ConnectTimeout requires OpenSSH 3.7 or later
authorYang Tse <yangsita@gmail.com>
Tue, 27 Nov 2007 20:57:22 +0000 (20:57 +0000)
committerYang Tse <yangsita@gmail.com>
Tue, 27 Nov 2007 20:57:22 +0000 (20:57 +0000)
tests/sshserver.pl

index 77cd1f5..2ba61f1 100644 (file)
 use strict;
 use File::Spec;
 
-my $verbose=0; # set to 1 for debugging
+my $verbose=1; # set to 1 for debugging
 my $showfiles=0;
 
 my $port = 8999;        # just our default, weird enough
 my $listenaddr = "127.0.0.1"; # address on which to listen
 
+my $conffile="curl_sshd_config";    # sshd configuration data
+my $conffile_ssh="curl_ssh_config";    # ssh configuration data
+my $knownhostsfile="curl_client_knownhosts";    # ssh knownhosts file
+
 my $path = `pwd`;
 chomp $path;
 
@@ -75,6 +79,24 @@ sub displayfile {
     print "=== End of file $file\n";
 }
 
+# Append a string to sshd config file
+sub set_sshd_option {
+    my ($string) = @_;
+    if (open(FILE, ">>$conffile")) {
+        print FILE "$string\n";
+        close FILE;
+    }
+}
+
+# Append a string to ssh config file
+sub set_ssh_option {
+    my ($string) = @_;
+    if (open(FILE, ">>$conffile_ssh")) {
+        print FILE "$string\n";
+        close FILE;
+    }
+}
+
 # Parse options
 do {
     if($ARGV[0] eq "-v") {
@@ -93,10 +115,6 @@ do {
     }
 } while(shift @ARGV);
 
-my $conffile="curl_sshd_config";    # sshd configuration data
-my $conffile_ssh="curl_ssh_config";    # ssh configuration data
-my $knownhostsfile="curl_client_knownhosts";    # ssh knownhosts file
-
 # Searching for sshd and sftp-server will be done first
 # in the PATH and afterwards in other common locations.
 my @spath;
@@ -133,45 +151,48 @@ my $ssh_daemon;
 my $ssh_ver_major;
 my $ssh_ver_minor;
 my $ssh_ver_patch;
-chomp($tmpstr = qx($sshd -V 2>&1 | grep OpenSSH));
-if ($tmpstr =~ /OpenSSH[_-](\d+)\.(\d+)(\.(\d+))*/) {
-    ($ssh_ver_major, $ssh_ver_minor, $ssh_ver_patch) = ($1, $2, $4);
-    $ssh_daemon = 'OpenSSH';
-    if(10 * $ssh_ver_major + $ssh_ver_minor == 36) {
-        $showfiles=1;
+my $ssh_version;
+foreach $tmpstr (qx($sshd -V 2>&1)) {
+    if($tmpstr =~ /OpenSSH[_-](\d+)\.(\d+)(\.(\d+))*/i) {
+        ($ssh_ver_major, $ssh_ver_minor, $ssh_ver_patch) = ($1, $2, $4);
+        $ssh_daemon = 'OpenSSH';
+        $ssh_version = 10 * $ssh_ver_major + $ssh_ver_minor;
+        if($ssh_version == 36) {
+            $showfiles=1;
+        }
+        last;
     }
-}
-if(!$ssh_daemon) {
-    chomp($tmpstr = qx($sshd -V 2>&1 | grep Sun_SSH));
-    if($tmpstr =~ /Sun[_-]SSH[_-](\d+)\.(\d+)/) {
+    if($tmpstr =~ /Sun[_-]SSH[_-](\d+)\.(\d+)/i) {
         ($ssh_ver_major, $ssh_ver_minor) = ($1, $2);
         $ssh_daemon = 'SunSSH';
-        if(10 * $ssh_ver_major + $ssh_ver_minor == 11) {
+        $ssh_version = 10 * $ssh_ver_major + $ssh_ver_minor;
+        if($ssh_version == 11) {
             $showfiles=1;
         }
+        last;
     }
 }
-if ($verbose) {
-    print STDERR "ssh_daemon: $ssh_daemon\n";
-    print STDERR "ssh_ver_major: $ssh_ver_major\n";
-    print STDERR "ssh_ver_minor: $ssh_ver_minor\n";
-    print STDERR "ssh_ver_patch: $ssh_ver_patch\n";
-}
 
 # Verify minimum SSH daemon version.
 my $sshd_ver_ok = 1;
-if(($ssh_daemon =~ /OpenSSH/) && (10 * $ssh_ver_major + $ssh_ver_minor < 36)) {
-    print "SSH server daemon found is OpenSSH $ssh_ver_major.$ssh_ver_minor\n";
+if(!$ssh_daemon) {
+    if($verbose) {
+        print STDERR "unsupported SSH server daemon found\n";
+        chomp($tmpstr = qx($sshd -V 2>&1));
+        print STDERR "$tmpstr\n";
+    }
     $sshd_ver_ok = 0;
 }
-if(($ssh_daemon =~ /SunSSH/) && (10 * $ssh_ver_major + $ssh_ver_minor < 11)) {
-    print "SSH server daemon found is SunSSH $ssh_ver_major.$ssh_ver_minor\n";
+elsif(($ssh_daemon =~ /OpenSSH/) && ($ssh_version < 36)) {
+    if($verbose) {
+        print STDERR "sshd found is $ssh_daemon $ssh_ver_major.$ssh_ver_minor\n";
+    }
     $sshd_ver_ok = 0;
 }
-if(!$ssh_daemon) {
-    print "SSH server daemon found is not OpenSSH nor SunSSH\n";
-    chomp($tmpstr = qx($sshd -V 2>&1));
-    print "$tmpstr\n";
+elsif(($ssh_daemon =~ /SunSSH/) && ($ssh_version < 11)) {
+    if($verbose) {
+        print STDERR "sshd found is $ssh_daemon $ssh_ver_major.$ssh_ver_minor\n";
+    }
     $sshd_ver_ok = 0;
 }
 if(!$sshd_ver_ok) {
@@ -251,14 +272,6 @@ EOFSSHD
 ;
 close FILE ||  die "Could not close $conffile";
 
-sub set_sshd_option {
-    my ($string) = @_;
-    if (open(FILE, ">>$conffile")) {
-        print FILE "$string\n";
-        close FILE;
-    }
-}
-
 if ($supports_UsePAM) {
     set_sshd_option('UsePAM no');
 }
@@ -288,7 +301,6 @@ Protocol 2
 BatchMode yes
 CheckHostIP no
 Compression no
-ConnectTimeout 20
 ForwardX11 no
 GatewayPorts no
 HostbasedAuthentication yes
@@ -299,6 +311,10 @@ EOFSSH
 ;
 close SSHFILE ||  die "Could not close $conffile_ssh";
 
+if(($ssh_daemon =~ /OpenSSH/) && ($ssh_version >= 37)) {
+    set_ssh_option('ConnectTimeout 20'); # Supported in OpenSSH 3.7 and later
+}
+
 
 # Verify that sshd supports our configuration file
 if (system "$sshd -t -f $conffile > log/sshd.log 2>&1") {