From bcd9813588e971212f139d614a77215f1602e066 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 19 Apr 2020 23:45:15 +0200 Subject: tests: run the SOCKS test server on a dynamic port number Closes #5266 --- tests/runtests.pl | 13 +++++++------ tests/server/socksd.c | 20 ++++++++++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) (limited to 'tests') diff --git a/tests/runtests.pl b/tests/runtests.pl index 9857076fb..cd22cd3f7 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -2277,7 +2277,6 @@ sub runmqttserver { sub runsocksserver { my ($id, $verbose, $ipv6) = @_; my $ip=$HOSTIP; - my $port = $SOCKSPORT; my $proto = 'socks'; my $ipvnum = 4; my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1; @@ -2290,6 +2289,7 @@ sub runsocksserver { $server = servername_id($proto, $ipvnum, $idnum); $pidfile = $serverpidfile{$server}; + my $portfile = $serverportfile{$server}; # don't retry if the server doesn't work if ($doesntrun{$pidfile}) { @@ -2308,8 +2308,9 @@ sub runsocksserver { # start our socks server, get commands from the FTP cmd file my $cmd="server/socksd".exe_ext('SRV'). - " --port $port ". + " --port 0 ". " --pidfile $pidfile". + " --portfile $portfile". " --backend $HOSTIP". " --config $FTPDCMD"; my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0); @@ -2322,11 +2323,13 @@ sub runsocksserver { return (0,0); } + my $port = pidfromfile($portfile); + if($verbose) { logmsg "RUN: $srvrname server is now running PID $pid2\n"; } - return ($pid2, $sockspid); + return ($pid2, $sockspid, $port); } ####################################################################### @@ -3159,7 +3162,6 @@ sub checksystem { logmsg sprintf("RTSP-IPv6/%d ", $RTSP6PORT); } logmsg sprintf("\n* SSH/%d ", $SSHPORT); - logmsg sprintf("SOCKS/%d ", $SOCKSPORT); if($httptlssrv) { logmsg sprintf("HTTPTLS/%d ", $HTTPTLSPORT); if($has_ipv6) { @@ -4883,7 +4885,7 @@ sub startservers { } elsif($what eq "socks4" || $what eq "socks5" ) { if(!$run{'socks'}) { - ($pid, $pid2) = runsocksserver("", $verbose); + ($pid, $pid2, $SOCKSPORT) = runsocksserver("", $verbose); if($pid <= 0) { return "failed starting socks server"; } @@ -5442,7 +5444,6 @@ $minport = $base; # original base port number $HTTPSPORT = $base++; # HTTPS (stunnel) server port $FTPSPORT = $base++; # FTPS (stunnel) server port $SSHPORT = $base++; # SSH (SCP/SFTP) port -$SOCKSPORT = $base++; # SOCKS port $RTSPPORT = $base++; # RTSP server port $RTSP6PORT = $base++; # RTSP IPv6 server port $HTTPTLSPORT = $base++; # HTTP TLS (non-stunnel) server port diff --git a/tests/server/socksd.c b/tests/server/socksd.c index 813eca665..e6e9c12b0 100644 --- a/tests/server/socksd.c +++ b/tests/server/socksd.c @@ -883,6 +883,7 @@ int main(int argc, char *argv[]) curl_socket_t msgsock = CURL_SOCKET_BAD; int wrotepidfile = 0; const char *pidname = ".socksd.pid"; + const char *portfile = NULL; bool juggle_again; int error; int arg = 1; @@ -903,6 +904,11 @@ int main(int argc, char *argv[]) if(argc>arg) pidname = argv[arg++]; } + else if(!strcmp("--portfile", argv[arg])) { + arg++; + if(argc>arg) + portfile = argv[arg++]; + } else if(!strcmp("--config", argv[arg])) { arg++; if(argc>arg) @@ -943,12 +949,6 @@ int main(int argc, char *argv[]) if(argc>arg) { char *endptr; unsigned long ulnum = strtoul(argv[arg], &endptr, 10); - if((endptr != argv[arg] + strlen(argv[arg])) || - ((ulnum != 0UL) && ((ulnum < 1025UL) || (ulnum > 65535UL)))) { - fprintf(stderr, "socksd: invalid --port argument (%s)\n", - argv[arg]); - return 0; - } port = curlx_ultous(ulnum); arg++; } @@ -961,6 +961,7 @@ int main(int argc, char *argv[]) " --version\n" " --logfile [file]\n" " --pidfile [file]\n" + " --portfile [file]\n" " --ipv4\n" " --ipv6\n" " --bindonly\n" @@ -1013,6 +1014,13 @@ int main(int argc, char *argv[]) goto socks5_cleanup; } + if(portfile) { + wrotepidfile = write_portfile(portfile, port); + if(!wrotepidfile) { + goto socks5_cleanup; + } + } + do { juggle_again = incoming(sock); } while(juggle_again); -- cgit v1.2.3