PDA

Visualizza la versione completa : Shell in Perl


fedeg93
28-05-2008, 18:12
Sto cercando di fare una shell in perl :D

ecco il code:


#! /usr/bin/perl

#---- CREO FILE CONFIG ----

system ("whoami > .user.gsh");
system ("uname -n > .host.gsh");

open (USER,".user.gsh");
chomp($utente = <USER>);
close USER;
open (HOST,".host.gsh");
chomp ($host = <HOST>);
close HOST;

system ("rm .user.gsh");
system ("rm .host.gsh");

# -------------------------

print "Galatolo SHell v 0.1\n\n";
print "Benvenuto $utente su $host\n\n";

# --- CICLO PROGRAMMA -------


for(;;){
print $utente."@".$host." >> ";
chomp($cmd = <STDIN>);

#--- OK??? ---
open FILE,"/etc/gsh/$utente.conf";
@lista = <FILE>;
if ($lista[0] eq ""){
print "Error : Chiedere all'amministratore di creare il file /etc/gsh/$utente.conf con la lista dei comandi autorizzati!\n";
}
else {
@acmd = split(/ /,$cmd);
for ($x=0;$x<@lista;$x++){
chomp(@lista);


if ($acmd[0] eq $lista[$x]){
$ok = "TRUE";
}
else {
$ok = "FALSE";
}
}

}

# -----

if ($ok eq "TRUE"){
system ($cmd);
} else {
print "Error : Comando non autorizzato dall'amministratore\n";
}
}

# --- FINE CICLO ----



Questo il risultato:



federico@crash-overflow:~/perl/gsh$ ./gsh
Galatolo SHell v 0.1

Benvenuto federico su crash-overflow

federico@crash-overflow >> ls
Error : Comando non autorizzato dall'amministratore
federico@crash-overflow >> ls
Error : Comando non autorizzato dall'amministratore
federico@crash-overflow >> echo asd
Error : Comando non autorizzato dall'amministratore
federico@crash-overflow >>


questo il file /etc/gsh/utente:



ls
echo
mkdir
nano


Perche fa cosi??? :dh: :dh: :dh:

Mich_
30-05-2008, 09:02
Sei sicuro della logica del programma?

Se capisco bene, in @lista ci metti i comandi permessi. Perche` allora fai il chomp della lista? E perche` lo fai ad ogni ciclo? Non basterebbe farlo una volta fuori dal loop?

Comunque inserisci una serie di print, in modo da vedere subito il risultato; magari inviali a stderr, anziche stdout, altrimenti il risultato viene bufferizzato e potrebbe andare perso qualcosa in caso di errore.

fedeg93
30-05-2008, 17:01
ho risolto grazie lo stesso :)

Loading