--- nagios-plugins-1.4.8/plugins/check_ssh.c.orig 2008-01-07 16:18:34.000000000 -0800 +++ nagios-plugins-1.4.8/plugins/check_ssh.c 2008-02-22 10:23:37.000000000 -0800 @@ -54,6 +54,7 @@ int port = -1; char *server_name = NULL; char *remote_version = NULL; +char *remote_protocol = NULL; int verbose = FALSE; int process_arguments (int, char **); @@ -61,7 +62,7 @@ void print_help (void); void print_usage (void); -int ssh_connect (char *haddr, int hport, char *remote_version); +int ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol); @@ -83,7 +84,7 @@ alarm (socket_timeout); /* ssh_connect exits if error is found */ - result = ssh_connect (server_name, port, remote_version); + result = ssh_connect (server_name, port, remote_version, remote_protocol); alarm (0); @@ -110,6 +111,7 @@ {"timeout", required_argument, 0, 't'}, {"verbose", no_argument, 0, 'v'}, {"remote-version", required_argument, 0, 'r'}, + {"remote-protcol", required_argument, 0, 'P'}, {0, 0, 0, 0} }; @@ -121,7 +123,7 @@ strcpy (argv[c], "-t"); while (1) { - c = getopt_long (argc, argv, "+Vhv46t:r:H:p:", longopts, &option); + c = getopt_long (argc, argv, "+Vhv46t:r:H:p:P:", longopts, &option); if (c == -1 || c == EOF) break; @@ -157,6 +159,9 @@ case 'r': /* remote version */ remote_version = optarg; break; + case 'P': /* remote version */ + remote_protocol = optarg; + break; case 'H': /* host */ if (is_host (optarg) == FALSE) usage2 (_("Invalid hostname/address"), optarg); @@ -211,7 +216,7 @@ int -ssh_connect (char *haddr, int hport, char *remote_version) +ssh_connect (char *haddr, int hport, char *remote_version, char *remote_protocol) { int sd; int result; @@ -254,6 +259,13 @@ ssh_server, ssh_proto, remote_version); exit (STATE_WARNING); } + + if (remote_protocol && strcmp(remote_protocol, ssh_proto)) { + printf + (_("SSH WARNING - %s (protocol %s) protocol version mismatch, expected '%s'\n"), + ssh_server, ssh_proto, remote_protocol); + exit (STATE_WARNING); + } printf (_("SSH OK - %s (protocol %s)\n"), @@ -293,6 +305,9 @@ printf (" %s\n", "-r, --remote-version=STRING"); printf (" %s\n", _("Warn if string doesn't match expected server version (ex: OpenSSH_3.9p1)")); + printf (" %s\n", "-P, --remote-protocol=STRING"); + printf (" %s\n", _("Warn if protocol doesn't match expected protocol version (ex: 2.0)")); + printf (_(UT_VERBOSE)); printf (_(UT_SUPPORT));