diff options
| -rw-r--r-- | plugins/check_ssh.c | 89 |
1 files changed, 31 insertions, 58 deletions
diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c index d78189fc..ed36dd41 100644 --- a/plugins/check_ssh.c +++ b/plugins/check_ssh.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include "utils.h" | 16 | #include "utils.h" |
| 17 | 17 | ||
| 18 | #define PROGNAME "check_ssh" | 18 | #define PROGNAME "check_ssh" |
| 19 | #define REVISION "$Revision$" | ||
| 19 | 20 | ||
| 20 | #ifndef MSG_DONTWAIT | 21 | #ifndef MSG_DONTWAIT |
| 21 | #define MSG_DONTWAIT 0 | 22 | #define MSG_DONTWAIT 0 |
| @@ -63,46 +64,6 @@ process_arguments (int argc, char **argv) | |||
| 63 | { | 64 | { |
| 64 | int c; | 65 | int c; |
| 65 | 66 | ||
| 66 | if (argc < 2) | ||
| 67 | return ERROR; | ||
| 68 | |||
| 69 | for (c = 1; c < argc; c++) | ||
| 70 | if (strcmp ("-to", argv[c]) == 0) | ||
| 71 | strcpy (argv[c], "-t"); | ||
| 72 | |||
| 73 | c = 0; | ||
| 74 | while (c += (call_getopt (argc - c, &argv[c]))) { | ||
| 75 | if (argc <= c) | ||
| 76 | break; | ||
| 77 | if (server_name == NULL) { | ||
| 78 | server_name = argv[c]; | ||
| 79 | } | ||
| 80 | else if (port == -1) { | ||
| 81 | if (is_intpos (argv[c])) { | ||
| 82 | port = atoi (argv[c]); | ||
| 83 | } | ||
| 84 | else { | ||
| 85 | print_usage (); | ||
| 86 | exit (STATE_UNKNOWN); | ||
| 87 | } | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | return validate_arguments (); | ||
| 92 | } | ||
| 93 | |||
| 94 | |||
| 95 | /************************************************************************ | ||
| 96 | * | ||
| 97 | * Run the getopt until we encounter a non-option entry in the arglist | ||
| 98 | * | ||
| 99 | *-----------------------------------------------------------------------*/ | ||
| 100 | |||
| 101 | int | ||
| 102 | call_getopt (int argc, char **argv) | ||
| 103 | { | ||
| 104 | int c, i = 1; | ||
| 105 | |||
| 106 | #ifdef HAVE_GETOPT_H | 67 | #ifdef HAVE_GETOPT_H |
| 107 | int option_index = 0; | 68 | int option_index = 0; |
| 108 | static struct option long_options[] = { | 69 | static struct option long_options[] = { |
| @@ -115,29 +76,27 @@ call_getopt (int argc, char **argv) | |||
| 115 | }; | 76 | }; |
| 116 | #endif | 77 | #endif |
| 117 | 78 | ||
| 79 | if (argc < 2) | ||
| 80 | return ERROR; | ||
| 81 | |||
| 82 | for (c = 1; c < argc; c++) | ||
| 83 | if (strcmp ("-to", argv[c]) == 0) | ||
| 84 | strcpy (argv[c], "-t"); | ||
| 85 | |||
| 118 | while (1) { | 86 | while (1) { |
| 119 | #ifdef HAVE_GETOPT_H | 87 | #ifdef HAVE_GETOPT_H |
| 120 | c = getopt_long (argc, argv, "+Vhvt:H:p:", long_options, &option_index); | 88 | c = getopt_long (argc, argv, "+Vhvt:H:p:", long_options, &option_index); |
| 121 | #else | 89 | #else |
| 122 | c = getopt (argc, argv, "+Vhvt:H:p:"); | 90 | c = getopt (argc, argv, "+Vhvt:H:p:"); |
| 123 | #endif | 91 | #endif |
| 124 | |||
| 125 | if (c == -1 || c == EOF) | 92 | if (c == -1 || c == EOF) |
| 126 | break; | 93 | break; |
| 127 | 94 | ||
| 128 | i++; | ||
| 129 | switch (c) { | ||
| 130 | case 't': | ||
| 131 | case 'H': | ||
| 132 | case 'p': | ||
| 133 | i++; | ||
| 134 | } | ||
| 135 | |||
| 136 | switch (c) { | 95 | switch (c) { |
| 137 | case '?': /* help */ | 96 | case '?': /* help */ |
| 138 | usage (""); | 97 | usage (""); |
| 139 | case 'V': /* version */ | 98 | case 'V': /* version */ |
| 140 | print_revision (my_basename (argv[0]), "$Revision$"); | 99 | print_revision (PROGNAME, REVISION); |
| 141 | exit (STATE_OK); | 100 | exit (STATE_OK); |
| 142 | case 'h': /* help */ | 101 | case 'h': /* help */ |
| 143 | print_help (); | 102 | print_help (); |
| @@ -164,7 +123,22 @@ call_getopt (int argc, char **argv) | |||
| 164 | } | 123 | } |
| 165 | 124 | ||
| 166 | } | 125 | } |
| 167 | return i; | 126 | |
| 127 | c = optind; | ||
| 128 | if (server_name == NULL && argv[c]) { | ||
| 129 | server_name = argv[c++]; | ||
| 130 | } | ||
| 131 | else if (port == -1 && argv[c]) { | ||
| 132 | if (is_intpos (argv[c])) { | ||
| 133 | port = atoi (argv[c++]); | ||
| 134 | } | ||
| 135 | else { | ||
| 136 | print_usage (); | ||
| 137 | exit (STATE_UNKNOWN); | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | return validate_arguments (); | ||
| 168 | } | 142 | } |
| 169 | 143 | ||
| 170 | int | 144 | int |
| @@ -249,13 +223,12 @@ ssh_connect (char *haddr, short hport) | |||
| 249 | if (verbose) | 223 | if (verbose) |
| 250 | printf ("%s\n", output); | 224 | printf ("%s\n", output); |
| 251 | ssh_proto = output + 4; | 225 | ssh_proto = output + 4; |
| 252 | ssh_server = ssh_proto + strspn (ssh_proto, "0123456789-. "); | 226 | ssh_server = ssh_proto + strspn (ssh_proto, "-0123456789. "); |
| 253 | ssh_proto[strspn (ssh_proto, "0123456789-. ")] = 0; | 227 | ssh_proto[strspn (ssh_proto, "0123456789. ")] = 0; |
| 254 | printf | 228 | printf |
| 255 | ("SSH ok - protocol version %s - server version %s\n", | 229 | ("SSH ok - %s (protocol %s)\n", |
| 256 | ssh_proto, ssh_server); | 230 | ssh_server, ssh_proto); |
| 257 | buffer = | 231 | asprintf (&buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, revision); |
| 258 | ssprintf (buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, revision); | ||
| 259 | send (s, buffer, strlen (buffer), MSG_DONTWAIT); | 232 | send (s, buffer, strlen (buffer), MSG_DONTWAIT); |
| 260 | if (verbose) | 233 | if (verbose) |
| 261 | printf ("%s\n", buffer); | 234 | printf ("%s\n", buffer); |
| @@ -266,7 +239,7 @@ ssh_connect (char *haddr, short hport) | |||
| 266 | void | 239 | void |
| 267 | print_help (void) | 240 | print_help (void) |
| 268 | { | 241 | { |
| 269 | print_revision (PROGNAME, "$Revision$"); | 242 | print_revision (PROGNAME, REVISION); |
| 270 | printf ("Copyright (c) 1999 Remi Paulmier (remi@sinfomic.fr)\n\n"); | 243 | printf ("Copyright (c) 1999 Remi Paulmier (remi@sinfomic.fr)\n\n"); |
| 271 | print_usage (); | 244 | print_usage (); |
| 272 | printf ("by default, port is %d\n", SSH_DFL_PORT); | 245 | printf ("by default, port is %d\n", SSH_DFL_PORT); |
