# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2011, 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
use strict;
use warnings;
use Cwd;
+use Cwd 'abs_path';
#***************************************************************************
# Variables and subs imported from sshhelp module
my $logdir = $path .'/log'; # directory for log files
my $username = $ENV{USER}; # default user
my $pidfile; # ssh daemon pid file
+my $identity = 'curl_client_key'; # default identity file
my $error;
my @cfgarr;
# Make sure all files are gone so ssh-keygen doesn't complain
unlink($hstprvkeyf, $hstpubkeyf, $cliprvkeyf, $clipubkeyf);
logmsg 'generating host keys...' if($verbose);
- if(system "$sshkeygen -q -t dsa -f $hstprvkeyf -C 'curl test server' -N ''") {
+ if(system "\"$sshkeygen\" -q -t dsa -f $hstprvkeyf -C 'curl test server' -N ''") {
logmsg 'Could not generate host key';
exit 1;
}
logmsg 'generating client keys...' if($verbose);
- if(system "$sshkeygen -q -t dsa -f $cliprvkeyf -C 'curl test client' -N ''") {
+ if(system "\"$sshkeygen\" -q -t dsa -f $cliprvkeyf -C 'curl test client' -N ''") {
logmsg 'Could not generate client key';
exit 1;
}
#***************************************************************************
+# Convert paths for curl's tests running on Windows using Cygwin OpenSSH
+#
+my $clipubkeyf_config = abs_path("$path/$clipubkeyf");
+my $hstprvkeyf_config = abs_path("$path/$hstprvkeyf");
+my $pidfile_config = $pidfile;
+my $sftpsrv_config = $sftpsrv;
+
+if ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') {
+ # convert MinGW drive paths to Cygwin drive paths
+ $clipubkeyf_config =~ s/^\/(\w)\//\/cygdrive\/$1\//;
+ $hstprvkeyf_config =~ s/^\/(\w)\//\/cygdrive\/$1\//;
+ $pidfile_config =~ s/^\/(\w)\//\/cygdrive\/$1\//;
+ $sftpsrv_config = "internal-sftp";
+}
+
+#***************************************************************************
# ssh daemon configuration file options we might use and version support
#
# AFSTokenPassing : OpenSSH 1.2.1 and later [1]
push @cfgarr, 'DenyGroups';
push @cfgarr, 'AllowGroups';
push @cfgarr, '#';
-push @cfgarr, "AuthorizedKeysFile $path/$clipubkeyf";
-push @cfgarr, "AuthorizedKeysFile2 $path/$clipubkeyf";
-push @cfgarr, "HostKey $path/$hstprvkeyf";
-push @cfgarr, "PidFile $pidfile";
+push @cfgarr, "AuthorizedKeysFile $clipubkeyf_config";
+push @cfgarr, "AuthorizedKeysFile2 $clipubkeyf_config";
+push @cfgarr, "HostKey $hstprvkeyf_config";
+push @cfgarr, "PidFile $pidfile_config";
push @cfgarr, '#';
push @cfgarr, "Port $port";
push @cfgarr, "ListenAddress $listenaddr";
push @cfgarr, 'RSAAuthentication no';
push @cfgarr, 'ServerKeyBits 768';
push @cfgarr, 'StrictModes no';
-push @cfgarr, "Subsystem sftp $sftpsrv";
+push @cfgarr, "Subsystem sftp \"$sftpsrv_config\"";
push @cfgarr, 'SyslogFacility AUTH';
push @cfgarr, 'UseLogin no';
push @cfgarr, 'X11Forwarding no';
($sshdid =~ /SunSSH/)) {
# ssh daemon supports command line options -t -f and -o
$err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
- qx($sshd -t -f $sshdconfig -o $option=$value 2>&1);
+ qx("$sshd" -t -f $sshdconfig -o $option=$value 2>&1);
return !$err;
}
if(($sshdid =~ /OpenSSH/) && ($sshdvernum >= 299)) {
return 0;
}
$err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
- qx($sshd -t -f $sshdconfig 2>&1);
+ qx("$sshd" -t -f $sshdconfig 2>&1);
unlink $sshdconfig;
return !$err;
}
#***************************************************************************
# Verify that sshd actually supports our generated configuration file
#
-if(system "$sshd -t -f $sshdconfig > $sshdlog 2>&1") {
+if(system "\"$sshd\" -t -f $sshdconfig > $sshdlog 2>&1") {
logmsg "sshd configuration file $sshdconfig failed verification";
display_sshdlog();
display_sshdconfig();
#***************************************************************************
+# Convert paths for curl's tests running on Windows using Cygwin OpenSSH
+#
+my $identity_config = abs_path("$path/$identity");
+my $knownhosts_config = abs_path("$path/$knownhosts");
+
+if ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') {
+ # convert MinGW drive paths to Cygwin drive paths
+ $identity_config =~ s/^\/(\w)\//\/cygdrive\/$1\//;
+ $knownhosts_config =~ s/^\/(\w)\//\/cygdrive\/$1\//;
+}
+
+
+#***************************************************************************
# ssh client configuration file options we might use and version support
#
# AddressFamily : OpenSSH 3.7.0 and later
push @cfgarr, "BindAddress $listenaddr";
push @cfgarr, "DynamicForward $socksport";
push @cfgarr, '#';
-push @cfgarr, "IdentityFile $path/curl_client_key";
-push @cfgarr, "UserKnownHostsFile $path/$knownhosts";
+push @cfgarr, "IdentityFile $identity_config";
+push @cfgarr, "UserKnownHostsFile $knownhosts_config";
push @cfgarr, '#';
push @cfgarr, 'BatchMode yes';
push @cfgarr, 'ChallengeResponseAuthentication no';
# Start the ssh server daemon without forking it
#
logmsg "SCP/SFTP server listening on port $port" if($verbose);
-my $rc = system "$sshd -e -D -f $sshdconfig > $sshdlog 2>&1";
+my $rc = system "\"$sshd\" -e -D -f $sshdconfig > $sshdlog 2>&1";
if($rc == -1) {
- logmsg "$sshd failed with: $!";
+ logmsg "\"$sshd\" failed with: $!";
}
elsif($rc & 127) {
- logmsg sprintf("$sshd died with signal %d, and %s coredump",
+ logmsg sprintf("\"$sshd\" died with signal %d, and %s coredump",
($rc & 127), ($rc & 128)?'a':'no');
}
elsif($verbose && ($rc >> 8)) {
- logmsg sprintf("$sshd exited with %d", $rc >> 8);
+ logmsg sprintf("\"$sshd\" exited with %d", $rc >> 8);
}