#!/usr/bin/perl -w

# use Socket;
use IO::Select;
use IO::Socket;

$lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
$sel = new IO::Select( $lsn );

while(@ready = $sel->can_read) {
    foreach $fh (@ready) {
	if($fh == $lsn) {
	    # Create a new socket
	    $new = $lsn->accept;
	    $sel->add($new);
	}
	else {
	    # Process socket
#	    ($port, $iaddr) = sockaddr_in($fh);
#	    $name = gethostbyaddr($iaddr, AF_INET);
#	    print "from $name [", inet_ntoa($iaddr), "] at port $port";
	    $data = <$fh>;
	    print " < $data";  # what we receive, printed on server
#	    print $fh "$data";       # echo
	    chomp $data;
	    $data =~ s/\`//g;        # security checks
	    $data =~ s/system//g;
	    $data =~ s/exec//g; 
	    $data =~ s/unlink//g;
	    $data =~ s/open//g;
	    $data =~ s/rm //g;
	    
	    $result = eval "$data";
	    print $fh "= $result\n"; # what we send, printer on client 
	    print " > $result\n"; # what we send, printed on server 
	    # Maybe we have finished with the socket
	    if ($data=~/quit/i || $data=~/exit/i || $data=~/end/i){ 
		$sel->remove($fh);
		$fh->close;
	    }
	}
    }
    sleep 1;   # a lazy server
}

__END__
