aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2009-12-12 21:54:01 +0000
committerDaniel Stenberg <daniel@haxx.se>2009-12-12 21:54:01 +0000
commitec3bb8f727405642a471b4b1b9eb0118fc003104 (patch)
treecf1eac52d5df82ba08514b43b5d058803d164b66 /tests
parent463d2d395caaafc557590a09aa01db28527e560f (diff)
introducing IMAP, POP3 and SMTP support (still lots of polish left to do)
Diffstat (limited to 'tests')
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test80047
-rw-r--r--tests/ftpserver.pl283
-rwxr-xr-xtests/runtests.pl169
4 files changed, 381 insertions, 120 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index d6dc4f38b..7aa5f6dca 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -63,7 +63,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096 \
test1097 test560 test561 test1098 test1099 test562 test563 test1100 \
test564 test1101 test1102 test1103 test1104 test299 test310 test311 \
- test312 test1105 test565
+ test312 test1105 test565 test800
filecheck:
@mkdir test-place; \
diff --git a/tests/data/test800 b/tests/data/test800
new file mode 100644
index 000000000..3281b632d
--- /dev/null
+++ b/tests/data/test800
@@ -0,0 +1,47 @@
+<testcase>
+<info>
+<keywords>
+POP3
+RETR
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 RETR
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/800 -u user:secret
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER user
+PASS secret
+RETR 800
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index 94b6554b3..d7c4d54d9 100644
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -22,7 +22,11 @@
# $Id$
###########################################################################
-# This is the FTP server designed for the curl test suite.
+# This is a server designed for the curl test suite.
+#
+# In December 2009 we started remaking the server to support more protocols
+# that are similar in spirit. Like POP3, IMAP and SMTP in addition to the
+# FTP it already supported since a long time.
#
# It is meant to exercise curl, it is not meant to be a fully working
# or even very standard compliant server.
@@ -88,6 +92,8 @@ my $pidfile = ".ftpd.pid"; # a default, use --pidfile
my $SERVERLOGS_LOCK="log/serverlogs.lock"; # server logs advisor read lock
my $serverlogslocked=0;
+my $proto="ftp";
+
do {
if($ARGV[0] eq "-v") {
$verbose=1;
@@ -100,6 +106,11 @@ do {
$ftpdnum=$ARGV[1];
shift @ARGV;
}
+ elsif($ARGV[0] eq "--proto") {
+ # ftp pop3 imap smtp
+ $proto=$ARGV[1];
+ shift @ARGV;
+ }
elsif($ARGV[0] eq "--pidfile") {
$pidfile=$ARGV[1];
shift @ARGV;
@@ -115,23 +126,28 @@ do {
}
elsif($ARGV[0] eq "--addr") {
$listenaddr = $ARGV[1];
- $listenaddr =~ s/^\[(.*)\]$/\1/;
+ $listenaddr =~ s/^\[(.*)\]$/$1/;
shift @ARGV;
}
} while(shift @ARGV);
+# a dedicated protocol has been selected, check that it's a fine one
+if($proto !~ /^(ftp|imap|pop3|smtp)\z/) {
+ die "unsupported protocol selected";
+}
+
sub catch_zap {
my $signame = shift;
+ print STDERR "ftpserver.pl received SIG$signame, exiting\n";
ftpkillslaves(1);
- unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
}
- exit;
+ die "Somebody sent me a SIG$signame";
}
$SIG{INT} = \&catch_zap;
-$SIG{TERM} = \&catch_zap;
+$SIG{KILL} = \&catch_zap;
my $sfpid;
@@ -153,7 +169,6 @@ sub sysread_or_die {
logmsg "Error: ftp$ftpdnum$ext sysread error: $!\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
- unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -167,7 +182,6 @@ sub sysread_or_die {
logmsg "Error: ftp$ftpdnum$ext read zero\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
- unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -193,7 +207,6 @@ sub startsf {
logmsg "Failed sockfilt command: $cmd\n";
kill(9, $sfpid);
waitpid($sfpid, 0);
- unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
@@ -202,9 +215,13 @@ sub startsf {
}
}
+# remove the file here so that if startsf() fails, it is very noticeable
+unlink($pidfile);
+
startsf();
-logmsg sprintf("FTP server listens on port IPv%d/$port\n", $ipv6?6:4);
+logmsg sprintf("%s server listens on port IPv%d/$port\n", uc($proto),
+ $ipv6?6:4);
open(PID, ">$pidfile");
print PID $$."\n";
close(PID);
@@ -273,41 +290,66 @@ sub senddata {
}
}
-# this text is shown before the function specified below is run
-my %displaytext = ('USER' => '331 We are happy you popped in!',
- 'PASS' => '230 Welcome you silly person',
- 'PORT' => '200 You said PORT - I say FINE',
- 'TYPE' => '200 I modify TYPE as you wanted',
- 'LIST' => '150 here comes a directory',
- 'NLST' => '150 here comes a directory',
- 'CWD' => '250 CWD command successful.',
- 'SYST' => '215 UNIX Type: L8', # just fake something
- 'QUIT' => '221 bye bye baby', # just reply something
- 'PWD' => '257 "/nowhere/anywhere" is current directory',
- 'MKD' => '257 Created your requested directory',
- 'REST' => '350 Yeah yeah we set it there for you',
- 'DELE' => '200 OK OK OK whatever you say',
- 'RNFR' => '350 Received your order. Please provide more',
- 'RNTO' => '250 Ok, thanks. File renaming completed.',
- 'NOOP' => '200 Yes, I\'m very good at doing nothing.',
- 'PBSZ' => '500 PBSZ not implemented',
- 'PROT' => '500 PROT not implemented',
- );
+my %displaytext;
+my %commandfunc;
# callback functions for certain commands
-my %commandfunc = ( 'PORT' => \&PORT_command,
- 'EPRT' => \&PORT_command,
- 'LIST' => \&LIST_command,
- 'NLST' => \&NLST_command,
- 'PASV' => \&PASV_command,
- 'EPSV' => \&PASV_command,
- 'RETR' => \&RETR_command,
- 'SIZE' => \&SIZE_command,
- 'REST' => \&REST_command,
- 'STOR' => \&STOR_command,
- 'APPE' => \&STOR_command, # append looks like upload
- 'MDTM' => \&MDTM_command,
- );
+# and text shown before the function specified below is run
+
+if($proto eq "ftp") {
+ %displaytext = ('USER' => '331 We are happy you popped in!',
+ 'PASS' => '230 Welcome you silly person',
+ 'PORT' => '200 You said PORT - I say FINE',
+ 'TYPE' => '200 I modify TYPE as you wanted',
+ 'LIST' => '150 here comes a directory',
+ 'NLST' => '150 here comes a directory',
+ 'CWD' => '250 CWD command successful.',
+ 'SYST' => '215 UNIX Type: L8', # just fake something
+ 'QUIT' => '221 bye bye baby', # just reply something
+ 'PWD' => '257 "/nowhere/anywhere" is current directory',
+ 'MKD' => '257 Created your requested directory',
+ 'REST' => '350 Yeah yeah we set it there for you',
+ 'DELE' => '200 OK OK OK whatever you say',
+ 'RNFR' => '350 Received your order. Please provide more',
+ 'RNTO' => '250 Ok, thanks. File renaming completed.',
+ 'NOOP' => '200 Yes, I\'m very good at doing nothing.',
+ 'PBSZ' => '500 PBSZ not implemented',
+ 'PROT' => '500 PROT not implemented',
+ );
+
+ %commandfunc = ( 'PORT' => \&PORT_command,
+ 'EPRT' => \&PORT_command,
+ 'LIST' => \&LIST_command,
+ 'NLST' => \&NLST_command,
+ 'PASV' => \&PASV_command,
+ 'EPSV' => \&PASV_command,
+ 'RETR' => \&RETR_command,
+ 'SIZE' => \&SIZE_command,
+ 'REST' => \&REST_command,
+ 'STOR' => \&STOR_command,
+ 'APPE' => \&STOR_command, # append looks like upload
+ 'MDTM' => \&MDTM_command,
+ );
+}
+elsif($proto eq "pop3") {
+ %commandfunc = ('RETR' => \&RETR_pop3,
+ );
+
+ %displaytext = ('USER' => '+OK We are happy you popped in!',
+ 'PASS' => '+OK Access granted',
+ 'QUIT' => '+OK byebye',
+ );
+
+}
+elsif($proto eq "imap") {
+ %commandfunc = ('FETCH' => \&FETCH_imap,
+ );
+
+ %displaytext = ('LOGIN' => ' OK We are happy you popped in!',
+ 'SELECT' => ' OK selection done',
+ );
+
+}
sub close_dataconn {
@@ -330,6 +372,98 @@ sub close_dataconn {
$slavepid=0;
}
+################
+################ IMAP commands
+################
+
+sub FETCH_imap {
+ my ($testno) = @_;
+ my @data;
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ my $response = "WE ROOLZ: $$\r\n";
+ if($verbose) {
+ print STDERR "FTPD: We returned proof we are the test server\n";
+ }
+ $data[0] = $response;
+ logmsg "return proof we are we\n";
+ }
+ else {
+ logmsg "retrieve a mail\n";
+
+ $testno =~ s/^([^0-9]*)//;
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ # send mail content
+ loadtest("$srcdir/data/test$testno");
+
+ @data = getpart("reply", "data$testpart");
+ }
+
+ sendcontrol "- OK Mail transfer starts\r\n";
+
+ for my $d (@data) {
+ sendcontrol $d;
+ }
+
+ return 0;
+}
+
+################
+################ POP3 commands
+################
+
+sub RETR_pop3 {
+ my ($testno) = @_;
+ my @data;
+
+ if($testno =~ /^verifiedserver$/) {
+ # this is the secret command that verifies that this actually is
+ # the curl test server
+ my $response = "WE ROOLZ: $$\r\n";
+ if($verbose) {
+ print STDERR "FTPD: We returned proof we are the test server\n";
+ }
+ $data[0] = $response;
+ logmsg "return proof we are we\n";
+ }
+ else {
+ logmsg "retrieve a mail\n";
+
+ $testno =~ s/^([^0-9]*)//;
+ my $testpart = "";
+ if ($testno > 10000) {
+ $testpart = $testno % 10000;
+ $testno = int($testno / 10000);
+ }
+
+ # send mail content
+ loadtest("$srcdir/data/test$testno");
+
+ @data = getpart("reply", "data$testpart");
+ }
+
+ sendcontrol "+OK Mail transfer starts\r\n";
+
+ for my $d (@data) {
+ sendcontrol $d;
+ }
+
+ # end with the magic 5-byte end of mail marker
+ sendcontrol "\r\n.\r\n";
+
+ return 0;
+}
+
+################
+################ FTP commands
+################
my $rest=0;
sub REST_command {
$rest = $_[0];
@@ -798,12 +932,34 @@ sub customize {
close(CUSTOM);
}
-my @welcome=(
- '220- _ _ ____ _ '."\r\n",
- '220- ___| | | | _ \| | '."\r\n",
- '220- / __| | | | |_) | | '."\r\n",
- '220- | (__| |_| | _ <| |___ '."\r\n",
- '220 \___|\___/|_| \_\_____|'."\r\n");
+my @welcome;
+
+if($proto eq "ftp") {
+ @welcome=(
+ '220- _ _ ____ _ '."\r\n",
+ '220- ___| | | | _ \| | '."\r\n",
+ '220- / __| | | | |_) | | '."\r\n",
+ '220- | (__| |_| | _ <| |___ '."\r\n",
+ '220 \___|\___/|_| \_\_____|'."\r\n");
+}
+elsif($proto eq "pop3") {
+ @welcome=(
+ ' _ _ ____ _ '."\r\n",
+ ' ___| | | | _ \| | '."\r\n",
+ ' / __| | | | |_) | | '."\r\n",
+ ' | (__| |_| | _ <| |___ '."\r\n",
+ ' \___|\___/|_| \_\_____|'."\r\n",
+ '+OK cURL POP3 server ready to serve'."\r\n");
+}
+elsif($proto eq "imap") {
+ @welcome=(
+ ' _ _ ____ _ '."\r\n",
+ ' ___| | | | _ \| | '."\r\n",
+ ' / __| | | | |_) | | '."\r\n",
+ ' | (__| |_| | _ <| |___ '."\r\n",
+ ' \___|\___/|_| \_\_____|'."\r\n",
+ '* OK cURL IMAP server ready to serve'."\r\n");
+}
while(1) {
@@ -872,13 +1028,28 @@ while(1) {
# Remove trailing CRLF.
s/[\n\r]+$//;
- unless (m/^([A-Z]{3,4})\s?(.*)/i) {
- sendcontrol "500 '$_': command not understood.\r\n";
- last;
- }
- my $FTPCMD=$1;
- my $FTPARG=$2;
+ my $cmdid;
+ my $FTPCMD;
+ my $FTPARG;
my $full=$_;
+ if($proto eq "imap") {
+ # IMAP is different with its identifier first on the command line
+ unless (m/^([^ ]+) ([^ ]+) (.*)/i) {
+ sendcontrol "500 '$_': command not understood.\r\n";
+ last;
+ }
+ $cmdid=$1;
+ $FTPCMD=$2;
+ $FTPARG=$3;
+ }
+ else {
+ unless (m/^([A-Z]{3,4})\s?(.*)/i) {
+ sendcontrol "500 '$_': command not understood.\r\n";
+ last;
+ }
+ $FTPCMD=$1;
+ $FTPARG=$2;
+ }
logmsg "< \"$full\"\n";
@@ -907,7 +1078,7 @@ while(1) {
}
my $check;
if($text) {
- sendcontrol "$text\r\n";
+ sendcontrol "$cmdid$text\r\n";
}
else {
$check=1; # no response yet
@@ -939,8 +1110,6 @@ while(1) {
print SFWRITE "QUIT\n";
waitpid $sfpid, 0;
-unlink($pidfile);
-
if($serverlogslocked) {
$serverlogslocked = 0;
clear_advisor_read_lock($SERVERLOGS_LOCK);
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 834c86652..94552d86d 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -109,6 +109,9 @@ my $TFTPPORT; # TFTP
my $TFTP6PORT; # TFTP
my $SSHPORT; # SCP/SFTP
my $SOCKSPORT; # SOCKS4/5 port
+my $POP3PORT; # POP3
+my $IMAPPORT; # IMAP
+my $SMTPPORT; # SMTP
my $srcdir = $ENV{'srcdir'} || '.';
my $CURL="../src/curl"; # what curl executable to run on the tests
@@ -147,6 +150,9 @@ my $TFTPPIDFILE=".tftpd.pid";
my $TFTP6PIDFILE=".tftp6.pid";
my $SSHPIDFILE=".ssh.pid";
my $SOCKSPIDFILE=".socks.pid";
+my $POP3PIDFILE=".pop3.pid";
+my $IMAPPIDFILE=".imap.pid";
+my $SMTPPIDFILE=".smtp.pid";
# invoke perl like this:
my $perl="perl -I$srcdir";
@@ -663,7 +669,7 @@ sub verifyftp {
}
if($pid <= 0 && $data[0]) {
# this is not a known server
- logmsg "RUN: Unknown server on our FTP port: $port\n";
+ logmsg "RUN: Unknown server on our $proto port: $port\n";
return 0;
}
# we can/should use the time it took to verify the FTP server as a measure
@@ -671,7 +677,7 @@ sub verifyftp {
my $took = time()-$time;
if($verbose) {
- logmsg "RUN: Verifying our test FTP server took $took seconds\n";
+ logmsg "RUN: Verifying our test $proto server took $took seconds\n";
}
$ftpchecktime = $took?$took:1; # make sure it never is zero
@@ -773,6 +779,9 @@ sub verifysocks {
my %protofunc = ('http' => \&verifyhttp,
'https' => \&verifyhttp,
'ftp' => \&verifyftp,
+ 'pop3' => \&verifyftp,
+ 'imap' => \&verifyftp,
+ 'smtp' => \&verifyftp,
'ftps' => \&verifyftp,
'tftp' => \&verifyftp,
'ssh' => \&verifyssh,
@@ -942,26 +951,48 @@ sub runhttpsserver {
}
#######################################################################
-# start the ftp server
+# start the pingpong server (FTP, POP3, IMAP, SMTP)
#
-sub runftpserver {
- my ($id, $verbose, $ipv6) = @_;
+sub runpingpongserver {
+ my ($proto, $id, $verbose, $ipv6) = @_;
my $STATUS;
my $RUNNING;
- my $port = $id?$FTP2PORT:$FTPPORT;
- # check for pidfile
- my $pidfile = $id?$FTP2PIDFILE:$FTPPIDFILE;
+ my $port;
+ my $pidfile;
my $ip=$HOSTIP;
my $nameext;
my $cmd;
+ my $flag;
- if($ipv6) {
- # if IPv6, use a different setup
- $pidfile = $FTP6PIDFILE;
- $port = $FTP6PORT;
- $ip = $HOST6IP;
- $nameext="-ipv6";
+ if($proto eq "ftp") {
+ $port = $id?$FTP2PORT:$FTPPORT;
+ $pidfile = $id?$FTP2PIDFILE:$FTPPIDFILE;
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $pidfile = $FTP6PIDFILE;
+ $port = $FTP6PORT;
+ $ip = $HOST6IP;
+ $nameext="-ipv6";
+ }
+ }
+ elsif($proto eq "pop3") {
+ $port = $POP3PORT;
+ $pidfile = $POP3PIDFILE;
+ }
+ elsif($proto eq "imap") {
+ $port = $IMAPPORT;
+ $pidfile = $IMAPPIDFILE;
}
+ elsif($proto eq "smtp") {
+ $port = $SMTPPORT;
+ $pidfile = $SMTPPIDFILE;
+ }
+ else {
+ print STDERR "Unsupported protocol $proto!!\n";
+ return 0;
+ }
+ $flag .= "--proto $proto ";
# don't retry if the server doesn't work
if ($doesntrun{$pidfile}) {
@@ -975,7 +1006,7 @@ sub runftpserver {
unlink($pidfile);
# start our server:
- my $flag=$debugprotocol?"-v ":"";
+ $flag.=$debugprotocol?"-v ":"";
$flag .= "-s \"$srcdir\" ";
my $addr;
if($id) {
@@ -993,7 +1024,7 @@ sub runftpserver {
if($ftppid <= 0 || !kill(0, $ftppid)) {
# it is NOT alive
- logmsg "RUN: failed to start the FTP$id$nameext server\n";
+ logmsg "RUN: failed to start the $proto$id$nameext server\n";
stopserver("$pid2");
displaylogs($testnumcheck);
$doesntrun{$pidfile} = 1;
@@ -1001,9 +1032,9 @@ sub runftpserver {
}
# Server is up. Verify that we can speak to it.
- my $pid3 = verifyserver("ftp", $ip, $port);
+ my $pid3 = verifyserver($proto, $ip, $port);
if(!$pid3) {
- logmsg "RUN: FTP$id$nameext server failed verification\n";
+ logmsg "RUN: $proto$id$nameext server failed verification\n";
# failed to talk to it properly. Kill the server and return failure
stopserver("$ftppid $pid2");
displaylogs($testnumcheck);
@@ -1013,7 +1044,7 @@ sub runftpserver {
$pid2 = $pid3;
if($verbose) {
- logmsg "RUN: FTP$id$nameext server is now running PID $ftppid\n";
+ logmsg "RUN: $proto$id$nameext server is now running PID $ftppid\n";
}
sleep(1);
@@ -1661,41 +1692,46 @@ sub checksystem {
"* Host: $hostname",
"* System: $hosttype");
- logmsg sprintf("* Server SSL: %s\n", $stunnel?"ON":"OFF");
- logmsg sprintf("* libcurl SSL: %s\n", $ssl_version?"ON":"OFF");
- logmsg sprintf("* debug build: %s\n", $debug_build?"ON":"OFF");
- logmsg sprintf("* track memory: %s\n", $curl_debug?"ON":"OFF");
- logmsg sprintf("* valgrind: %s\n", $valgrind?"ON":"OFF");
- logmsg sprintf("* HTTP IPv6 %s\n", $http_ipv6?"ON":"OFF");
- logmsg sprintf("* FTP IPv6 %s\n", $ftp_ipv6?"ON":"OFF");
-
- logmsg sprintf("* HTTP port: %d\n", $HTTPPORT);
- logmsg sprintf("* FTP port: %d\n", $FTPPORT);
- logmsg sprintf("* FTP port 2: %d\n", $FTP2PORT);
+ logmsg sprintf("* Server SSL: %8s", $stunnel?"ON ":"OFF");
+ logmsg sprintf(" libcurl SSL: %s\n", $ssl_version?"ON ":"OFF");
+ logmsg sprintf("* debug build: %8s", $debug_build?"ON ":"OFF");
+ logmsg sprintf(" track memory: %s\n", $curl_debug?"ON ":"OFF");
+ logmsg sprintf("* valgrind: %8s", $valgrind?"ON ":"OFF");
+ logmsg sprintf(" HTTP IPv6 %s\n", $http_ipv6?"ON ":"OFF");
+ logmsg sprintf("* FTP IPv6 %8s", $ftp_ipv6?"ON ":"OFF");
+ logmsg sprintf(" Libtool lib: %s\n", $libtool?"ON ":"OFF");
+ if($ssl_version) {
+ logmsg sprintf("* SSL library: %s\n", $ssllib);
+ }
+
+ logmsg "* Ports:\n";
+
+ logmsg sprintf("* HTTP/%d ", $HTTPPORT);
+ logmsg sprintf("FTP/%d ", $FTPPORT);
+ logmsg sprintf("FTP2/%d ", $FTP2PORT);
if($stunnel) {
- logmsg sprintf("* FTPS port: %d\n", $FTPSPORT);
- logmsg sprintf("* HTTPS port: %d\n", $HTTPSPORT);
+ logmsg sprintf("FTPS/%d ", $FTPSPORT);
+ logmsg sprintf("HTTPS/%d ", $HTTPSPORT);
}
+ logmsg sprintf("\n* TFTP/%d ", $TFTPPORT);
if($http_ipv6) {
- logmsg sprintf("* HTTP IPv6 port: %d\n", $HTTP6PORT);
+ logmsg sprintf("HTTP-IPv6/%d ", $HTTP6PORT);
}
if($ftp_ipv6) {
- logmsg sprintf("* FTP IPv6 port: %d\n", $FTP6PORT);
+ logmsg sprintf("FTP-IPv6/%d ", $FTP6PORT);
}
- logmsg sprintf("* TFTP port: %d\n", $TFTPPORT);
if($tftp_ipv6) {
- logmsg sprintf("* TFTP IPv6 port: %d\n", $TFTP6PORT);
+ logmsg sprintf("TFTP-IPv6/%d ", $TFTP6PORT);
}
- logmsg sprintf("* SCP/SFTP port: %d\n", $SSHPORT);
- logmsg sprintf("* SOCKS port: %d\n", $SOCKSPORT);
+ logmsg sprintf("\n* SSH/%d ", $SSHPORT);
+ logmsg sprintf("SOCKS/%d ", $SOCKSPORT);
+ logmsg sprintf("POP3/%d ", $POP3PORT);
+ logmsg sprintf("IMAP/%d ", $IMAPPORT);
+ logmsg sprintf("SMTP/%d\n", $SMTPPORT);
- if($ssl_version) {
- logmsg sprintf("* SSL library: %s\n", $ssllib);
- }
$has_textaware = ($^O eq 'MSWin32') || ($^O eq 'msys');
- logmsg sprintf("* Libtool lib: %s\n", $libtool?"ON":"OFF");
logmsg "***************************************** \n";
}
@@ -1720,6 +1756,9 @@ sub subVariables {
$$thing =~ s/%TFTP6PORT/$TFTP6PORT/g;
$$thing =~ s/%SSHPORT/$SSHPORT/g;
$$thing =~ s/%SOCKSPORT/$SOCKSPORT/g;
+ $$thing =~ s/%POP3PORT/$POP3PORT/g;
+ $$thing =~ s/%IMAPPORT/$IMAPPORT/g;
+ $$thing =~ s/%SMTPPORT/$SMTPPORT/g;
$$thing =~ s/%CURL/$CURL/g;
$$thing =~ s/%USER/$USER/g;
$$thing =~ s/%CLIENTIP/$CLIENTIP/g;
@@ -2546,19 +2585,22 @@ sub startservers {
my $what = lc($whatlist[0]);
$what =~ s/[^a-z0-9-]//g;
- if($what eq "ftp") {
- if(!$run{'ftp'}) {
- ($pid, $pid2) = runftpserver("", $verbose);
+ if(($what eq "pop3") ||
+ ($what eq "ftp") ||
+ ($what eq "imap") ||
+ ($what eq "smtp")) {
+ if(!$run{$what}) {
+ ($pid, $pid2) = runpingpongserver($what, "", $verbose);
if($pid <= 0) {
- return "failed starting FTP server";
+ return "failed starting $what server";
}
- printf ("* pid ftp => %d %d\n", $pid, $pid2) if($verbose);
- $run{'ftp'}="$pid $pid2";
+ printf ("* pid $what => %d %d\n", $pid, $pid2) if($verbose);
+ $run{$what}="$pid $pid2";
}
}
elsif($what eq "ftp2") {
if(!$run{'ftp2'}) {
- ($pid, $pid2) = runftpserver("2", $verbose);
+ ($pid, $pid2) = runpingpongserver("ftp", "2", $verbose);
if($pid <= 0) {
return "failed starting FTP2 server";
}
@@ -2568,7 +2610,7 @@ sub startservers {
}
elsif($what eq "ftp-ipv6") {
if(!$run{'ftp-ipv6'}) {
- ($pid, $pid2) = runftpserver("", $verbose, "ipv6");
+ ($pid, $pid2) = runpingpongserver("ftp", "", $verbose, "ipv6");
if($pid <= 0) {
return "failed starting FTP-IPv6 server";
}
@@ -2609,7 +2651,7 @@ sub startservers {
}
if(!$run{'ftp'}) {
- ($pid, $pid2) = runftpserver("", $verbose);
+ ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);
if($pid <= 0) {
return "failed starting FTP server";
}
@@ -2939,18 +2981,21 @@ if ($gdbthis) {
}
}
-$HTTPPORT = $base + 0; # HTTP server port
-$HTTPSPORT = $base + 1; # HTTPS server port
-$FTPPORT = $base + 2; # FTP server port
-$FTPSPORT = $base + 3; # FTPS server port
-$HTTP6PORT = $base + 4; # HTTP IPv6 server port (different IP protocol
+$HTTPPORT = $base++; # HTTP server port
+$HTTPSPORT = $base++; # HTTPS server port
+$FTPPORT = $base++; # FTP server port
+$FTPSPORT = $base++; # FTPS server port
+$HTTP6PORT = $base++; # HTTP IPv6 server port (different IP protocol
# but we follow the same port scheme anyway)
-$FTP2PORT = $base + 5; # FTP server 2 port
-$FTP6PORT = $base + 6; # FTP IPv6 port
-$TFTPPORT = $base + 7; # TFTP (UDP) port
-$TFTP6PORT = $base + 8; # TFTP IPv6 (UDP) port
-$SSHPORT = $base + 9; # SSH (SCP/SFTP) port
-$SOCKSPORT = $base + 10; # SOCKS port
+$FTP2PORT = $base++; # FTP server 2 port
+$FTP6PORT = $base++; # FTP IPv6 port
+$TFTPPORT = $base++; # TFTP (UDP) port
+$TFTP6PORT = $base++; # TFTP IPv6 (UDP) port
+$SSHPORT = $base++; # SSH (SCP/SFTP) port
+$SOCKSPORT = $base++; # SOCKS port
+$POP3PORT = $base++;
+$IMAPPORT = $base++;
+$SMTPPORT = $base++;
#######################################################################
# clear and create logging directory: