1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-24 09:08:49 -05:00

test: make tests and test scripts use socksd for SOCKS

Make all SOCKS tests use socksd instead of ssh.
This commit is contained in:
Daniel Stenberg 2019-04-08 19:43:48 +02:00
parent 04fd67555c
commit 54c784556e
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
9 changed files with 149 additions and 142 deletions

View File

@ -86,7 +86,7 @@ test643 test644 test645 test646 test647 test648 test649 test650 test651 \
test652 test653 test654 test655 test656 test658 test659 \ test652 test653 test654 test655 test656 test658 test659 \
\ \
test700 test701 test702 test703 test704 test705 test706 test707 test708 \ test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 \ test709 test710 test711 test712 test713 test714 test715 test716 test717 \
\ \
test800 test801 test802 test803 test804 test805 test806 test807 test808 \ test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \ test809 test810 test811 test812 test813 test814 test815 test816 test817 \

View File

@ -12,6 +12,10 @@ FAILURE
<reply> <reply>
<data> <data>
</data> </data>
# 91 is socks4 failure
<servercmd>
response 91
</servercmd>
</reply> </reply>
# Client-side # Client-side

View File

@ -12,6 +12,10 @@ FAILURE
<reply> <reply>
<data> <data>
</data> </data>
# 1 is socks5 failure
<servercmd>
response 1
</servercmd>
</reply> </reply>
# Client-side # Client-side

View File

@ -16,7 +16,6 @@ all_proxy
silly content silly content
</data> </data>
<servercmd> <servercmd>
backendport passthru
</servercmd> </servercmd>
</reply> </reply>

44
tests/data/test716 Normal file
View File

@ -0,0 +1,44 @@
<testcase>
<info>
<keywords>
HTTP
SOCKS5
all_proxy
</keywords>
</info>
#
# Server-side
<reply>
# method 2 is SOCKS5 asking for user+password
<servercmd>
method 2
</servercmd>
</reply>
#
# Client-side
<client>
<server>
socks5
</server>
<features>
http
</features>
<name>
SOCKS5 proxy with too long user name
</name>
# it should never connect to the target server
<command>
http://hohoho.example.com:99/716 -x socks5://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:b@%HOSTIP:%SOCKSPORT
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<errorcode>
43
</errorcode>
</verify>
</testcase>

65
tests/data/test717 Normal file
View File

@ -0,0 +1,65 @@
<testcase>
<info>
<keywords>
HTTP
SOCKS5
all_proxy
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes
-foo-
</data>
# method 2 is SOCKS5 asking for user+password
<servercmd>
method 2
user uz3r
password p4ssworm
backendport %HTTPPORT
</servercmd>
</reply>
#
# Client-side
<client>
<server>
socks5
http
</server>
<name>
SOCKS5 proxy auth
</name>
# target a port that won't work without the SOCKS magic
<command>
http://%HOSTIP:1/717 -x socks5://uz3r:p4ssworm@%HOSTIP:%SOCKSPORT
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /717 HTTP/1.1
Host: %HOSTIP:1
Accept: */*
</protocol>
</verify>
</testcase>

View File

@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms

View File

@ -276,7 +276,7 @@ my $sshdvernum; # for socks server, ssh daemon version number
my $sshdverstr; # for socks server, ssh daemon version string my $sshdverstr; # for socks server, ssh daemon version string
my $sshderror; # for socks server, ssh daemon version error my $sshderror; # for socks server, ssh daemon version error
my $defserverlogslocktimeout = 20; # timeout to await server logs lock removal my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal
my $defpostcommanddelay = 0; # delay between command and postcheck sections my $defpostcommanddelay = 0; # delay between command and postcheck sections
my $timestats; # time stamping and stats generation my $timestats; # time stamping and stats generation
@ -2012,7 +2012,6 @@ sub runsshserver {
my ($id, $verbose, $ipv6) = @_; my ($id, $verbose, $ipv6) = @_;
my $ip=$HOSTIP; my $ip=$HOSTIP;
my $port = $SSHPORT; my $port = $SSHPORT;
my $socksport = $SOCKSPORT;
my $proto = 'ssh'; my $proto = 'ssh';
my $ipvnum = 4; my $ipvnum = 4;
my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1; my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
@ -2046,7 +2045,7 @@ sub runsshserver {
$flags .= "--pidfile \"$pidfile\" "; $flags .= "--pidfile \"$pidfile\" ";
$flags .= "--id $idnum " if($idnum > 1); $flags .= "--id $idnum " if($idnum > 1);
$flags .= "--ipv$ipvnum --addr \"$ip\" "; $flags .= "--ipv$ipvnum --addr \"$ip\" ";
$flags .= "--sshport $port --socksport $socksport "; $flags .= "--sshport $port ";
$flags .= "--user \"$USER\""; $flags .= "--user \"$USER\"";
my $cmd = "$perl $srcdir/sshserver.pl $flags"; my $cmd = "$perl $srcdir/sshserver.pl $flags";
@ -2139,108 +2138,27 @@ sub runsocksserver {
$logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum); $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
# The ssh server must be already running # start our socks server, get commands from the FTP cmd file
if(!$run{'ssh'}) { my $cmd="$srcdir/server/socksd".
logmsg "RUN: SOCKS server cannot find running SSH server\n"; " --port $port ".
$doesntrun{$pidfile} = 1; " --pidfile $pidfile".
return (0,0); " --backend $HOSTIP".
} " --config $FTPDCMD";
my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
# Find out ssh daemon canonical file name if($sockspid <= 0 || !pidexists($sockspid)) {
my $sshd = find_sshd();
if(!$sshd) {
logmsg "RUN: SOCKS server cannot find $sshdexe\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
# Find out ssh daemon version info
($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
if(!$sshdid) {
# Not an OpenSSH or SunSSH ssh daemon
logmsg "$sshderror\n" if($verbose);
logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
logmsg "ssh server found $sshd is $sshdverstr\n" if($verbose);
# Find out ssh client canonical file name
my $ssh = find_ssh();
if(!$ssh) {
logmsg "RUN: SOCKS server cannot find $sshexe\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
# Find out ssh client version info
my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
if(!$sshid) {
# Not an OpenSSH or SunSSH ssh client
logmsg "$ssherror\n" if($verbose);
logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
# Verify minimum ssh client version
if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
(($sshid =~ /SunSSH/) && ($sshvernum < 100))) {
logmsg "ssh client found $ssh is $sshverstr\n";
logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
logmsg "ssh client found $ssh is $sshverstr\n" if($verbose);
# Verify if ssh client and ssh daemon versions match
if(($sshdid ne $sshid) || ($sshdvernum != $sshvernum)) {
# Our test harness might work with slightly mismatched versions
logmsg "Warning: version mismatch: sshd $sshdverstr - ssh $sshverstr\n"
if($verbose);
}
# Config file options for ssh client are previously set from sshserver.pl
if(! -e $sshconfig) {
logmsg "RUN: SOCKS server cannot find $sshconfig\n";
$doesntrun{$pidfile} = 1;
return (0,0);
}
$sshlog = server_logfilename($LOGDIR, 'socks', $ipvnum, $idnum);
# start our socks server
my $cmd="\"$ssh\" -N -F $sshconfig $ip > $sshlog 2>&1";
my ($sshpid, $pid2) = startnew($cmd, $pidfile, 30, 1); # fake pidfile
if($sshpid <= 0 || !pidexists($sshpid)) {
# it is NOT alive # it is NOT alive
logmsg "RUN: failed to start the $srvrname server\n"; logmsg "RUN: failed to start the $srvrname server\n";
display_sshlog();
display_sshconfig();
display_sshdlog();
display_sshdconfig();
stopserver($server, "$pid2"); stopserver($server, "$pid2");
$doesntrun{$pidfile} = 1; $doesntrun{$pidfile} = 1;
return (0,0); return (0,0);
} }
# Ugly hack but ssh doesn't support pid files. PID is from fake pidfile.
my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
if(!$pid3) {
logmsg "RUN: $srvrname server failed verification\n";
# failed to talk to it properly. Kill the server and return failure
stopserver($server, "$sshpid $pid2");
$doesntrun{$pidfile} = 1;
return (0,0);
}
$pid2 = $pid3;
if($verbose) { if($verbose) {
logmsg "RUN: $srvrname server is now running PID $pid2\n"; logmsg "RUN: $srvrname server is now running PID $pid2\n";
} }
return ($pid2, $sshpid); return ($pid2, $sockspid);
} }
####################################################################### #######################################################################
@ -3642,6 +3560,7 @@ sub singletest {
} }
} }
$ENV{$var} = "$content"; $ENV{$var} = "$content";
print "setenv $var = $content\n" if($verbose);
} }
} }
} }
@ -3757,7 +3676,7 @@ sub singletest {
} }
# if this section exists, it might be FTP server instructions: # if this section exists, it might be FTP server instructions:
my @ftpservercmd = getpart("reply", "servercmd"); my @ftpservercmd = fixarray ( getpart("reply", "servercmd") );
my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
@ -4974,7 +4893,7 @@ sub startservers {
$run{'tftp-ipv6'}="$pid $pid2"; $run{'tftp-ipv6'}="$pid $pid2";
} }
} }
elsif($what eq "sftp" || $what eq "scp" || $what eq "socks4" || $what eq "socks5" ) { elsif($what eq "sftp" || $what eq "scp") {
if(!$run{'ssh'}) { if(!$run{'ssh'}) {
($pid, $pid2) = runsshserver("", $verbose); ($pid, $pid2) = runsshserver("", $verbose);
if($pid <= 0) { if($pid <= 0) {
@ -4983,7 +4902,8 @@ sub startservers {
printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose); printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
$run{'ssh'}="$pid $pid2"; $run{'ssh'}="$pid $pid2";
} }
if($what eq "socks4" || $what eq "socks5") { }
elsif($what eq "socks4" || $what eq "socks5" ) {
if(!$run{'socks'}) { if(!$run{'socks'}) {
($pid, $pid2) = runsocksserver("", $verbose); ($pid, $pid2) = runsocksserver("", $verbose);
if($pid <= 0) { if($pid <= 0) {
@ -4993,24 +4913,6 @@ sub startservers {
$run{'socks'}="$pid $pid2"; $run{'socks'}="$pid $pid2";
} }
} }
if($what eq "socks5") {
if(!$sshdid) {
# Not an OpenSSH or SunSSH ssh daemon
logmsg "Not OpenSSH or SunSSH; socks5 tests need at least OpenSSH 3.7\n";
return "failed starting socks5 server";
}
elsif(($sshdid =~ /OpenSSH/) && ($sshdvernum < 370)) {
# Need OpenSSH 3.7 for socks5 - https://www.openssh.com/txt/release-3.7
logmsg "$sshdverstr insufficient; socks5 tests need at least OpenSSH 3.7\n";
return "failed starting socks5 server";
}
elsif(($sshdid =~ /SunSSH/) && ($sshdvernum < 100)) {
# Need SunSSH 1.0 for socks5
logmsg "$sshdverstr insufficient; socks5 tests need at least SunSSH 1.0\n";
return "failed starting socks5 server";
}
}
}
elsif($what eq "http-unix") { elsif($what eq "http-unix") {
if($torture && $run{'http-unix'} && if($torture && $run{'http-unix'} &&
!responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) { !responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) {

View File

@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -21,7 +21,7 @@
# #
#*************************************************************************** #***************************************************************************
# Starts sshd for use in the SCP, SFTP and SOCKS curl test harness tests. # Starts sshd for use in the SCP and SFTP curl test harness tests.
# Also creates the ssh configuration files needed for these tests. # Also creates the ssh configuration files needed for these tests.
use strict; use strict;
@ -81,7 +81,6 @@ use pathhelp;
my $verbose = 0; # set to 1 for debugging my $verbose = 0; # set to 1 for debugging
my $debugprotocol = 0; # set to 1 for protocol debugging my $debugprotocol = 0; # set to 1 for protocol debugging
my $port = 8999; # our default SCP/SFTP server port my $port = 8999; # our default SCP/SFTP server port
my $socksport = $port + 1; # our default SOCKS4/5 server port
my $listenaddr = '127.0.0.1'; # default address on which to listen my $listenaddr = '127.0.0.1'; # default address on which to listen
my $ipvnum = 4; # default IP version of listener address my $ipvnum = 4; # default IP version of listener address
my $idnum = 1; # default ssh daemon instance number my $idnum = 1; # default ssh daemon instance number
@ -157,14 +156,6 @@ while(@ARGV) {
} }
} }
} }
elsif($ARGV[0] eq '--socksport') {
if($ARGV[1]) {
if($ARGV[1] =~ /^(\d+)$/) {
$socksport = $1;
shift @ARGV;
}
}
}
else { else {
print STDERR "\nWarning: sshserver.pl unknown parameter: $ARGV[0]\n"; print STDERR "\nWarning: sshserver.pl unknown parameter: $ARGV[0]\n";
} }
@ -181,11 +172,10 @@ if(!$pidfile) {
#*************************************************************************** #***************************************************************************
# ssh, socks and sftp server log file names # ssh and sftp server log file names
# #
$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum); $sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
$sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum); $sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum);
$sshlog = server_logfilename($logdir, 'socks', $ipvnum, $idnum);
#*************************************************************************** #***************************************************************************
@ -226,7 +216,7 @@ my ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
if(!$sshdid) { if(!$sshdid) {
# Not an OpenSSH or SunSSH ssh daemon # Not an OpenSSH or SunSSH ssh daemon
logmsg $sshderror if($verbose); logmsg $sshderror if($verbose);
logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later'; logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
exit 1; exit 1;
} }
logmsg "ssh server found $sshd is $sshdverstr" if($verbose); logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
@ -255,7 +245,7 @@ logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
# #
if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) || if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
(($sshdid =~ /SunSSH/) && ($sshdvernum < 100))) { (($sshdid =~ /SunSSH/) && ($sshdvernum < 100))) {
logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later'; logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
exit 1; exit 1;
} }
@ -310,7 +300,7 @@ my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
if(!$sshid) { if(!$sshid) {
# Not an OpenSSH or SunSSH ssh client # Not an OpenSSH or SunSSH ssh client
logmsg $ssherror if($verbose); logmsg $ssherror if($verbose);
logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later'; logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
exit 1; exit 1;
} }
logmsg "ssh client found $ssh is $sshverstr" if($verbose); logmsg "ssh client found $ssh is $sshverstr" if($verbose);
@ -341,7 +331,7 @@ logmsg "ssh client found $ssh is $sshverstr" if($verbose);
# #
if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) || if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
(($sshid =~ /SunSSH/) && ($sshvernum < 100))) { (($sshid =~ /SunSSH/) && ($sshvernum < 100))) {
logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later'; logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
exit 1; exit 1;
} }
@ -864,7 +854,6 @@ push @cfgarr, "User $username";
push @cfgarr, 'Protocol 2'; push @cfgarr, 'Protocol 2';
push @cfgarr, '#'; push @cfgarr, '#';
push @cfgarr, "BindAddress $listenaddr"; push @cfgarr, "BindAddress $listenaddr";
push @cfgarr, "DynamicForward $socksport";
push @cfgarr, '#'; push @cfgarr, '#';
push @cfgarr, "IdentityFile $identity_config"; push @cfgarr, "IdentityFile $identity_config";
push @cfgarr, "UserKnownHostsFile $knownhosts_config"; push @cfgarr, "UserKnownHostsFile $knownhosts_config";