mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
flushes the log handles before fork, now the logs work too!
This commit is contained in:
parent
05ec503eac
commit
f22c690b1f
@ -21,7 +21,7 @@ sub spawn; # forward declaration
|
|||||||
open(FTPLOG, ">log/ftpd.log") ||
|
open(FTPLOG, ">log/ftpd.log") ||
|
||||||
print STDERR "failed to open log file, runs without logging\n";
|
print STDERR "failed to open log file, runs without logging\n";
|
||||||
|
|
||||||
sub logmsg { print FTPLOG @_; }
|
sub logmsg { print FTPLOG "$$: "; print FTPLOG @_; }
|
||||||
|
|
||||||
sub ftpmsg { print INPUT @_; }
|
sub ftpmsg { print INPUT @_; }
|
||||||
|
|
||||||
@ -115,11 +115,13 @@ my @ftpdir=("total 20\r\n",
|
|||||||
sub LIST_command {
|
sub LIST_command {
|
||||||
# print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n";
|
# print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes)\r\n";
|
||||||
|
|
||||||
|
logmsg "$$: pass data to child pid\n";
|
||||||
for(@ftpdir) {
|
for(@ftpdir) {
|
||||||
print KID_TO_WRITE $_;
|
print KID_TO_WRITE $_;
|
||||||
# print STDERR "PASS: $_";
|
# print STDERR "PASS: $_";
|
||||||
}
|
}
|
||||||
close(KID_TO_WRITE);
|
close(KID_TO_WRITE);
|
||||||
|
logmsg "$$: done passing data to child pid\n";
|
||||||
|
|
||||||
print "226 ASCII transfer complete\r\n";
|
print "226 ASCII transfer complete\r\n";
|
||||||
return 0;
|
return 0;
|
||||||
@ -179,10 +181,12 @@ sub PASV_command {
|
|||||||
|
|
||||||
if(0 == $pid) {
|
if(0 == $pid) {
|
||||||
# the child process runs the child function
|
# the child process runs the child function
|
||||||
|
logmsg "$$ is a child PASV\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# parent continues
|
# parent continues
|
||||||
# print STDERR "parent after fork!\n";
|
# print STDERR "parent after fork!\n";
|
||||||
|
logmsg "$$ is a parent from PASV\n";
|
||||||
return; # continue please
|
return; # continue please
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,6 +202,7 @@ sub PASV_command {
|
|||||||
}
|
}
|
||||||
if(11000 == $port) {
|
if(11000 == $port) {
|
||||||
print "500 no free ports!\r\n";
|
print "500 no free ports!\r\n";
|
||||||
|
logmsg "couldn't find free port\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
listen(Server2,SOMAXCONN) || die "listen: $!";
|
listen(Server2,SOMAXCONN) || die "listen: $!";
|
||||||
@ -212,20 +217,17 @@ sub PASV_command {
|
|||||||
my($port,$iaddr) = sockaddr_in($paddr);
|
my($port,$iaddr) = sockaddr_in($paddr);
|
||||||
my $name = gethostbyaddr($iaddr,AF_INET);
|
my $name = gethostbyaddr($iaddr,AF_INET);
|
||||||
|
|
||||||
logmsg "data connection from $name [", inet_ntoa($iaddr), "] at port $port\n";
|
logmsg "$$: data connection from $name [", inet_ntoa($iaddr), "] at port $port\n";
|
||||||
|
|
||||||
open(STDOUT, ">&Client2") || die "can't dup client to stdout";
|
open(STDOUT, ">&Client2") || die "can't dup client to stdout";
|
||||||
|
|
||||||
# print STDERR "#### CONN\n";
|
|
||||||
|
|
||||||
while(<STDIN>) {
|
while(<STDIN>) {
|
||||||
print $_;
|
print $_;
|
||||||
# print STDERR "SEND: $_";
|
|
||||||
}
|
}
|
||||||
close(SOCK);
|
|
||||||
|
|
||||||
close(Client2);
|
close(Client2);
|
||||||
|
|
||||||
|
logmsg "process dies here\n";
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -288,10 +290,15 @@ for ( $waitedpid = 0;
|
|||||||
my($port,$iaddr) = sockaddr_in($paddr);
|
my($port,$iaddr) = sockaddr_in($paddr);
|
||||||
my $name = gethostbyaddr($iaddr,AF_INET);
|
my $name = gethostbyaddr($iaddr,AF_INET);
|
||||||
|
|
||||||
|
# flush data:
|
||||||
|
$| = 1;
|
||||||
|
|
||||||
|
|
||||||
logmsg "connection from $name [", inet_ntoa($iaddr), "] at port $port\n";
|
logmsg "connection from $name [", inet_ntoa($iaddr), "] at port $port\n";
|
||||||
|
|
||||||
# this code is forked and run
|
# this code is forked and run
|
||||||
spawn sub {
|
open(STDIN, "<&Client") || die "can't dup client to stdin";
|
||||||
|
open(STDOUT, ">&Client") || die "can't dup client to stdout";
|
||||||
|
|
||||||
open(INPUT, ">log/server.input") ||
|
open(INPUT, ">log/server.input") ||
|
||||||
logmsg "failed to open log/server.input\n";
|
logmsg "failed to open log/server.input\n";
|
||||||
@ -312,9 +319,6 @@ for ( $waitedpid = 0;
|
|||||||
# < 150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes).
|
# < 150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes).
|
||||||
# * Getting file with size: -1
|
# * Getting file with size: -1
|
||||||
|
|
||||||
# flush data:
|
|
||||||
$| = 1;
|
|
||||||
|
|
||||||
print "220-running the curl suite test server\r\n",
|
print "220-running the curl suite test server\r\n",
|
||||||
"220-running the curl suite test server\r\n",
|
"220-running the curl suite test server\r\n",
|
||||||
"220 running the curl suite test server\r\n";
|
"220 running the curl suite test server\r\n";
|
||||||
@ -365,15 +369,20 @@ for ( $waitedpid = 0;
|
|||||||
my $func = $commandfunc{$FTPCMD};
|
my $func = $commandfunc{$FTPCMD};
|
||||||
if($func) {
|
if($func) {
|
||||||
# it is!
|
# it is!
|
||||||
|
# flush the handles before the possible fork
|
||||||
|
FTPLOG->autoflush(1);
|
||||||
|
INPUT->autoflush(1);
|
||||||
\&$func($FTPARG);
|
\&$func($FTPARG);
|
||||||
}
|
}
|
||||||
|
|
||||||
logmsg "gone to state $state\n";
|
logmsg "gone to state $state\n";
|
||||||
|
|
||||||
}
|
} # while(1)
|
||||||
exit;
|
close(Client);
|
||||||
|
close(Client2);
|
||||||
|
close(Server2);
|
||||||
# print "Hello there, $name, it's now ", scalar localtime, "\r\n";
|
# print "Hello there, $name, it's now ", scalar localtime, "\r\n";
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user