diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-04-19 23:45:15 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-04-19 23:45:15 +0200 |
commit | de0e24c3cd51a1c625e9739df619d930815a45f2 (patch) | |
tree | 9eb346e05481b43620261bcb0ccee079d469fcef | |
parent | ebb07f3c583c26ddca2c413ca10018d4dacfc378 (diff) | |
download | curl-bagder/tests-socks-dynport.tar.gz |
tests: run the SOCKS test server on a dynamic port numberbagder/tests-socks-dynport
-rwxr-xr-x | tests/runtests.pl | 13 | ||||
-rw-r--r-- | tests/server/socksd.c | 20 |
2 files changed, 21 insertions, 12 deletions
diff --git a/tests/runtests.pl b/tests/runtests.pl index 82de7f7a8..f767a7ad8 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -2274,7 +2274,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; @@ -2287,6 +2286,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}) { @@ -2305,8 +2305,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); @@ -2319,11 +2320,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); } ####################################################################### @@ -3160,7 +3163,6 @@ sub checksystem { logmsg sprintf("TFTP-IPv6/%d ", $TFTP6PORT); } logmsg sprintf("\n* SSH/%d ", $SSHPORT); - logmsg sprintf("SOCKS/%d ", $SOCKSPORT); if($httptlssrv) { logmsg sprintf("HTTPTLS/%d ", $HTTPTLSPORT); if($has_ipv6) { @@ -4886,7 +4888,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"; } @@ -5447,7 +5449,6 @@ $FTPSPORT = $base++; # FTPS (stunnel) server port $TFTPPORT = $base++; # TFTP (UDP) port $TFTP6PORT = $base++; # TFTP IPv6 (UDP) 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); |