use warnings; use strict; use Frontier::Daemon::Forking; use Crypt::XXTEA; use Cfg::Config; use Unix::PasswdFile; use MIME::Base64; use constant DEMON_PASS => $Cfg::Config{demonpass}; use constant DEMON_PORT => $Cfg::Config{demonport}; print "Uruchamianie demona.\n"; my $demon = Frontier::Daemon::Forking->new( methods => { sprawdz => \&sprawdz, instaluj => \&instaluj, start => \&start, stop => \&stop, konsola => \&konsola, send => \&send, ftp => \&ftp, reinstall => \&reinstall, delete => \&delete, status => \&status, }, LocalPort => DEMON_PORT, LocalAddr => '0.0.0.0', ) or die "Nie mozna uruchomic demona, sprobuj za chwile.\nKod bledu: $!"; sub decrypt_params { my @params; foreach my $param (@_) { $param = decode_base64($param); $param = Crypt::XXTEA::decrypt($param,DEMON_PASS); $param = decode_base64($param); return $param; push(@params,$param); } return @params; } sub sprawdz { my ($spr) = @_; my $sprawdz = decrypt_params($spr); if($spr ne 'spr') { return 1; } return 0; } sub instaluj { my($katalogins, $loginftp, $hasloftp) = @_; decrypt_params($katalogins); decrypt_params($loginftp); decrypt_params($hasloftp); system("screen -A -m -d -S c".$loginftp." cp -r ".$katalogins." /home/srv".$loginftp."/;"); system("useradd -d /home/srv".$loginftp."/ ".$loginftp.""); my $pw = new Unix::PasswdFile "/etc/passwd"; $pw->passwd("".$loginftp."", $pw->encpass("".$hasloftp."")); $pw->commit(); undef $pw; } sub start { my($katalog, $komenda, $loginftp) = @_; decrypt_params($katalog); decrypt_params($loginftp); decrypt_params($komenda); system("cd ".$katalog.";screen -A -m -d -L -S srv".$loginftp." ".$komenda.";"); } sub stop { my($loginftp) = @_; decrypt_params($loginftp); system("kill -3 `screen -list | grep srv".$loginftp." | cut -d . -f1`;"); system("screen -wipe;"); } sub konsola { my ($loginftp) = @_; decrypt_params($loginftp); system("cd /home/srv".$loginftp.";rm screenlog;tail -n 200 screenlog.0 > screenlog;"); } sub send { my ($loginftp, $komenda) = @_; decrypt_params($loginftp); decrypt_params($komenda); system("screen -A -m -d -S tmp".$loginftp." screen -x srv".$loginftp.";"); sleep 1; system("screen -s srv".$loginftp." -X stuff '".$komenda." ';"); system("kill -9 `screen -list | grep tmp".$loginftp." | cut -d . -f1`;"); } sub ftp { my($loginftp, $hasloftp) = @_; decrypt_params($loginftp); decrypt_params($hasloftp); my $pw = new Unix::PasswdFile "/etc/passwd"; $pw->passwd("".$loginftp."", $pw->encpass("".$hasloftp."")); $pw->commit(); undef $pw; } sub reinstall { my($loginftp, $katalogins) = @_; decrypt_params($katalogins); decrypt_params($loginftp); system("rm -r /home/srv".$loginftp."/ && cp -R ".$katalogins." /home/srv".$loginftp."/;"); } sub delete { my($loginftp) = @_; decrypt_params($loginftp); system("rm -r /home/srv".$loginftp."/;"); } sub status { my($screen) = @_; decrypt_params($screen); my $stat = `screen -list | grep $screen`; if ( $stat =~ /^\s*$/ ) { return 0; } else { return 1; } }