Loading tests/ftpserver.pl +19 −29 Original line number Diff line number Diff line Loading @@ -35,16 +35,21 @@ use strict; use IPC::Open2; #use Time::HiRes qw( gettimeofday ); # not available in perl 5.6 require "getpart.pm"; require "ftp.pm"; my $ftpdnum=""; # open and close each time to allow removal at any time sub logmsg { # if later than perl 5.6 is used # my ($seconds, $microseconds) = gettimeofday; my $seconds = time(); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); localtime($seconds); open(FTPLOG, ">>log/ftpd$ftpdnum.log"); printf FTPLOG ("%02d:%02d:%02d ", $hour, $min, $sec); print FTPLOG @_; Loading Loading @@ -116,9 +121,12 @@ $SIG{KILL} = \&catch_zap; my $sfpid; local(*SFREAD, *SFWRITE); sub startsf { my $cmd="./server/sockfilt --port $port --logfile log/sockctrl$ftpdnum$ext.log --pidfile .sockfilt$ftpdnum$ext.pid $ipv6"; $sfpid = open2(\*SFREAD, \*SFWRITE, $cmd); $sfpid = open2(*SFREAD, *SFWRITE, $cmd); print STDERR "$cmd\n" if($verbose); Loading @@ -131,8 +139,6 @@ sub startsf { kill(9, $sfpid); die "Failed to start sockfilt!"; } open(STDIN, "<&SFREAD") || die "can't dup client to stdin"; open(STDOUT, ">&SFWRITE") || die "can't dup client to stdout"; } # remove the file here so that if startsf() fails, it is very noticable Loading @@ -150,8 +156,8 @@ logmsg("logged pid $$ in $pidfile\n"); sub sockfilt { my $l; foreach $l (@_) { printf "DATA\n%04x\n", length($l); print $l; printf SFWRITE "DATA\n%04x\n", length($l); print SFWRITE $l; } } Loading Loading @@ -720,29 +726,13 @@ while(1) { # We read 'sockfilt' commands. # my $input; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 360; # just in case things go REALLY bad $input = <STDIN>; alarm 0; }; if ($@) { # timed out logmsg "reading stdin timed out\n"; } logmsg "Awaiting input\n"; sysread(SFREAD, $input, 5) || die "ftp$ftpdnum$ext read zero"; if($input !~ /^CNCT/) { # we wait for a connected client if(!length($input)) { # it probably died, restart it kill(9, $sfpid); waitpid $sfpid, 0; startsf(); logmsg "restarted sockfilt\n"; } else { logmsg "sockfilt said: $input"; } next; } logmsg "====> Client connect\n"; Loading Loading @@ -770,7 +760,7 @@ while(1) { # part only is FTP lingo. # COMMAND sysread(STDIN, $i, 5) || die; sysread(SFREAD, $i, 5) || die "ftp$ftpdnum$ext read zero"; if($i !~ /^DATA/) { logmsg "sockfilt said $i"; Loading @@ -782,11 +772,11 @@ while(1) { } # SIZE of data sysread(STDIN, $i, 5) || die; sysread(SFREAD, $i, 5) || die; my $size = hex($i); # data sysread STDIN, $_, $size; sysread SFREAD, $_, $size; ftpmsg $_; Loading Loading
tests/ftpserver.pl +19 −29 Original line number Diff line number Diff line Loading @@ -35,16 +35,21 @@ use strict; use IPC::Open2; #use Time::HiRes qw( gettimeofday ); # not available in perl 5.6 require "getpart.pm"; require "ftp.pm"; my $ftpdnum=""; # open and close each time to allow removal at any time sub logmsg { # if later than perl 5.6 is used # my ($seconds, $microseconds) = gettimeofday; my $seconds = time(); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); localtime($seconds); open(FTPLOG, ">>log/ftpd$ftpdnum.log"); printf FTPLOG ("%02d:%02d:%02d ", $hour, $min, $sec); print FTPLOG @_; Loading Loading @@ -116,9 +121,12 @@ $SIG{KILL} = \&catch_zap; my $sfpid; local(*SFREAD, *SFWRITE); sub startsf { my $cmd="./server/sockfilt --port $port --logfile log/sockctrl$ftpdnum$ext.log --pidfile .sockfilt$ftpdnum$ext.pid $ipv6"; $sfpid = open2(\*SFREAD, \*SFWRITE, $cmd); $sfpid = open2(*SFREAD, *SFWRITE, $cmd); print STDERR "$cmd\n" if($verbose); Loading @@ -131,8 +139,6 @@ sub startsf { kill(9, $sfpid); die "Failed to start sockfilt!"; } open(STDIN, "<&SFREAD") || die "can't dup client to stdin"; open(STDOUT, ">&SFWRITE") || die "can't dup client to stdout"; } # remove the file here so that if startsf() fails, it is very noticable Loading @@ -150,8 +156,8 @@ logmsg("logged pid $$ in $pidfile\n"); sub sockfilt { my $l; foreach $l (@_) { printf "DATA\n%04x\n", length($l); print $l; printf SFWRITE "DATA\n%04x\n", length($l); print SFWRITE $l; } } Loading Loading @@ -720,29 +726,13 @@ while(1) { # We read 'sockfilt' commands. # my $input; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 360; # just in case things go REALLY bad $input = <STDIN>; alarm 0; }; if ($@) { # timed out logmsg "reading stdin timed out\n"; } logmsg "Awaiting input\n"; sysread(SFREAD, $input, 5) || die "ftp$ftpdnum$ext read zero"; if($input !~ /^CNCT/) { # we wait for a connected client if(!length($input)) { # it probably died, restart it kill(9, $sfpid); waitpid $sfpid, 0; startsf(); logmsg "restarted sockfilt\n"; } else { logmsg "sockfilt said: $input"; } next; } logmsg "====> Client connect\n"; Loading Loading @@ -770,7 +760,7 @@ while(1) { # part only is FTP lingo. # COMMAND sysread(STDIN, $i, 5) || die; sysread(SFREAD, $i, 5) || die "ftp$ftpdnum$ext read zero"; if($i !~ /^DATA/) { logmsg "sockfilt said $i"; Loading @@ -782,11 +772,11 @@ while(1) { } # SIZE of data sysread(STDIN, $i, 5) || die; sysread(SFREAD, $i, 5) || die; my $size = hex($i); # data sysread STDIN, $_, $size; sysread SFREAD, $_, $size; ftpmsg $_; Loading