aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-11-02 13:38:31 +0100
committerYang Tse <yangsita@gmail.com>2011-11-02 13:38:31 +0100
commit3f5e267b9d11c043168d5323f493f51fb73fb15d (patch)
treeb6fee7e7c665b4bd815dbe2270e3f09834552311
parentf7dfe2b87a3c79be41ab4e17764675f36dca3670 (diff)
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.
-rwxr-xr-xtests/ftpserver.pl87
1 files changed, 61 insertions, 26 deletions
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index 70356a1c3..99722bb8c 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -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;
@@ -1486,6 +1498,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
# a new client control connection is established with the test server.
@@ -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