FTP test server: NODATACONN commands follow-up
Make NODATACONN425 and NODATACONN421 return a 150 positive preliminary reply before 425 or 421. New NODATACONN150 returns 150 without further positive nor negative reply Now NODATACONN doesn't reply anything at all.
This commit is contained in:
parent
f7dfe2b87a
commit
3f5e267b9d
@ -135,6 +135,7 @@ my $nosave; # set if ftp server should not save uploaded data
|
||||
my $nodataconn; # set if ftp srvr doesn't establish or accepts data channel
|
||||
my $nodataconn425; # set if ftp srvr doesn't establish data ch and replies 425
|
||||
my $nodataconn421; # set if ftp srvr doesn't establish data ch and replies 421
|
||||
my $nodataconn150; # set if ftp srvr doesn't establish data ch and replies 150
|
||||
my %customreply; #
|
||||
my %customcount; #
|
||||
my %delayreply; #
|
||||
@ -832,13 +833,19 @@ my @ftpdir=("total 20\r\n",
|
||||
|
||||
if($datasockf_conn eq 'no') {
|
||||
if($nodataconn425) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "425 Can't open data connection\r\n";
|
||||
}
|
||||
elsif($nodataconn421) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "421 Connection timed out\r\n";
|
||||
}
|
||||
elsif($nodataconn150) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
else {
|
||||
sendcontrol "503 data channel not established\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -861,13 +868,19 @@ sub NLST_ftp {
|
||||
|
||||
if($datasockf_conn eq 'no') {
|
||||
if($nodataconn425) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "425 Can't open data connection\r\n";
|
||||
}
|
||||
elsif($nodataconn421) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "421 Connection timed out\r\n";
|
||||
}
|
||||
elsif($nodataconn150) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
else {
|
||||
sendcontrol "503 data channel not established\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -977,13 +990,19 @@ sub RETR_ftp {
|
||||
|
||||
if($datasockf_conn eq 'no') {
|
||||
if($nodataconn425) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "425 Can't open data connection\r\n";
|
||||
}
|
||||
elsif($nodataconn421) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "421 Connection timed out\r\n";
|
||||
}
|
||||
elsif($nodataconn150) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
else {
|
||||
sendcontrol "503 data channel not established\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1084,13 +1103,19 @@ sub STOR_ftp {
|
||||
|
||||
if($datasockf_conn eq 'no') {
|
||||
if($nodataconn425) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "425 Can't open data connection\r\n";
|
||||
}
|
||||
elsif($nodataconn421) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
sendcontrol "421 Connection timed out\r\n";
|
||||
}
|
||||
elsif($nodataconn150) {
|
||||
sendcontrol "150 Opening data connection\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
else {
|
||||
sendcontrol "503 data channel not established\r\n";
|
||||
# client shall timeout
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1238,12 +1263,13 @@ sub PASV_ftp {
|
||||
}
|
||||
|
||||
if($nodataconn) {
|
||||
logmsg "DATA sockfilt for passive data channel (NODATACONN) ".
|
||||
"bound on port $pasvport\n";
|
||||
my $str = nodataconn_str();
|
||||
logmsg "DATA sockfilt for passive data channel ($str) bound on port ".
|
||||
"$pasvport\n";
|
||||
}
|
||||
else {
|
||||
logmsg "DATA sockfilt for passive data channel listens on port ".
|
||||
"$pasvport\n";
|
||||
logmsg "DATA sockfilt for passive data channel listens on port ".
|
||||
"$pasvport\n";
|
||||
}
|
||||
|
||||
if($cmd ne "EPSV") {
|
||||
@ -1265,7 +1291,8 @@ sub PASV_ftp {
|
||||
"will be accepted on port $pasvport\n";
|
||||
|
||||
if($nodataconn) {
|
||||
logmsg "====> Client fooled (NODATACONN)\n";
|
||||
my $str = nodataconn_str();
|
||||
logmsg "====> Client fooled ($str)\n";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1367,23 +1394,8 @@ sub PORT_ftp {
|
||||
}
|
||||
|
||||
if($nodataconn) {
|
||||
logmsg "DATA sockfilt for active data channel not started ".
|
||||
"(NODATACONN)\n";
|
||||
datasockf_state('ACTIVE_NODATACONN');
|
||||
logmsg "====> Active DATA channel not established\n";
|
||||
# client shall timeout awaiting connection from server
|
||||
return;
|
||||
}
|
||||
elsif($nodataconn425) {
|
||||
logmsg "DATA sockfilt for active data channel not started ".
|
||||
"(NODATACONN425)\n";
|
||||
datasockf_state('ACTIVE_NODATACONN');
|
||||
logmsg "====> Active DATA channel not established\n";
|
||||
return;
|
||||
}
|
||||
elsif($nodataconn421) {
|
||||
logmsg "DATA sockfilt for active data channel not started ".
|
||||
"(NODATACONN421)\n";
|
||||
my $str = nodataconn_str();
|
||||
logmsg "DATA sockfilt for active data channel not started ($str)\n";
|
||||
datasockf_state('ACTIVE_NODATACONN');
|
||||
logmsg "====> Active DATA channel not established\n";
|
||||
return;
|
||||
@ -1485,6 +1497,20 @@ sub datasockf_state {
|
||||
}
|
||||
}
|
||||
|
||||
#**********************************************************************
|
||||
# nodataconn_str returns string of efective nodataconn command. Notice
|
||||
# that $nodataconn may be set alone or in addition to a $nodataconnXXX.
|
||||
#
|
||||
sub nodataconn_str {
|
||||
my $str;
|
||||
# order matters
|
||||
$str = 'NODATACONN' if($nodataconn);
|
||||
$str = 'NODATACONN425' if($nodataconn425);
|
||||
$str = 'NODATACONN421' if($nodataconn421);
|
||||
$str = 'NODATACONN150' if($nodataconn150);
|
||||
return "$str";
|
||||
}
|
||||
|
||||
#**********************************************************************
|
||||
# customize configures test server operation for each curl test, reading
|
||||
# configuration commands/parameters from server commands file each time
|
||||
@ -1501,6 +1527,7 @@ sub customize {
|
||||
$nodataconn = 0; # default is to establish or accept data channel
|
||||
$nodataconn425 = 0; # default is to not send 425 without data channel
|
||||
$nodataconn421 = 0; # default is to not send 421 without data channel
|
||||
$nodataconn150 = 0; # default is to not send 150 without data channel
|
||||
%customreply = (); #
|
||||
%customcount = (); #
|
||||
%delayreply = (); #
|
||||
@ -1546,11 +1573,19 @@ sub customize {
|
||||
# applies to both active and passive FTP modes
|
||||
logmsg "FTPD: instructed to use NODATACONN425\n";
|
||||
$nodataconn425=1;
|
||||
$nodataconn=1;
|
||||
}
|
||||
elsif($_ =~ /NODATACONN421/) {
|
||||
# applies to both active and passive FTP modes
|
||||
logmsg "FTPD: instructed to use NODATACONN421\n";
|
||||
$nodataconn421=1;
|
||||
$nodataconn=1;
|
||||
}
|
||||
elsif($_ =~ /NODATACONN150/) {
|
||||
# applies to both active and passive FTP modes
|
||||
logmsg "FTPD: instructed to use NODATACONN150\n";
|
||||
$nodataconn150=1;
|
||||
$nodataconn=1;
|
||||
}
|
||||
elsif($_ =~ /NODATACONN/) {
|
||||
# applies to both active and passive FTP modes
|
||||
|
Loading…
x
Reference in New Issue
Block a user