diff options
Diffstat (limited to 'web/attachments/37563-nagiosplug-check_ssh-20021213.diff')
| -rw-r--r-- | web/attachments/37563-nagiosplug-check_ssh-20021213.diff | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/web/attachments/37563-nagiosplug-check_ssh-20021213.diff b/web/attachments/37563-nagiosplug-check_ssh-20021213.diff new file mode 100644 index 0000000..091b5bf --- /dev/null +++ b/web/attachments/37563-nagiosplug-check_ssh-20021213.diff | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | Index: plugins/check_ssh.c | ||
| 2 | =================================================================== | ||
| 3 | RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_ssh.c,v | ||
| 4 | retrieving revision 1.3 | ||
| 5 | diff -u -r1.3 check_ssh.c | ||
| 6 | --- plugins/check_ssh.c 30 Oct 2002 18:44:43 -0000 1.3 | ||
| 7 | +++ plugins/check_ssh.c 14 Dec 2002 04:31:32 -0000 | ||
| 8 | @@ -34,7 +34,6 @@ | ||
| 9 | void print_help (void); | ||
| 10 | void print_usage (void); | ||
| 11 | |||
| 12 | -char *ssh_resolve (char *hostname); | ||
| 13 | int ssh_connect (char *haddr, short hport); | ||
| 14 | |||
| 15 | int | ||
| 16 | @@ -49,7 +48,7 @@ | ||
| 17 | alarm (socket_timeout); | ||
| 18 | |||
| 19 | /* ssh_connect exits if error is found */ | ||
| 20 | - ssh_connect (ssh_resolve (server_name), port); | ||
| 21 | + ssh_connect (server_name, port); | ||
| 22 | |||
| 23 | alarm (0); | ||
| 24 | |||
| 25 | @@ -109,6 +108,8 @@ | ||
| 26 | socket_timeout = atoi (optarg); | ||
| 27 | break; | ||
| 28 | case 'H': /* host */ | ||
| 29 | + if (is_host (optarg) == FALSE) | ||
| 30 | + usage ("Invalid host name/addresss\n"); | ||
| 31 | server_name = optarg; | ||
| 32 | break; | ||
| 33 | case 'p': /* port */ | ||
| 34 | @@ -125,7 +126,8 @@ | ||
| 35 | |||
| 36 | c = optind; | ||
| 37 | if (server_name == NULL && argv[c]) { | ||
| 38 | - server_name = argv[c++]; | ||
| 39 | + if (is_host (argv[c++])) | ||
| 40 | + server_name = argv[c++]; | ||
| 41 | } | ||
| 42 | else if (port == -1 && argv[c]) { | ||
| 43 | if (is_intpos (argv[c])) { | ||
| 44 | @@ -153,26 +155,6 @@ | ||
| 45 | |||
| 46 | /************************************************************************ | ||
| 47 | * | ||
| 48 | -* Resolve hostname into IP address | ||
| 49 | -* | ||
| 50 | -*-----------------------------------------------------------------------*/ | ||
| 51 | - | ||
| 52 | -char * | ||
| 53 | -ssh_resolve (char *hostname) | ||
| 54 | -{ | ||
| 55 | - struct hostent *host; | ||
| 56 | - | ||
| 57 | - host = gethostbyname (hostname); | ||
| 58 | - if (!host) { | ||
| 59 | - herror (hostname); | ||
| 60 | - exit (STATE_CRITICAL); | ||
| 61 | - } | ||
| 62 | - return (host->h_addr); | ||
| 63 | -} | ||
| 64 | - | ||
| 65 | - | ||
| 66 | -/************************************************************************ | ||
| 67 | -* | ||
| 68 | * Try to connect to SSH server at specified server and port | ||
| 69 | * | ||
| 70 | *-----------------------------------------------------------------------*/ | ||
| 71 | @@ -180,39 +162,24 @@ | ||
| 72 | int | ||
| 73 | ssh_connect (char *haddr, short hport) | ||
| 74 | { | ||
| 75 | - int s; | ||
| 76 | - struct sockaddr_in addr; | ||
| 77 | - int addrlen; | ||
| 78 | - int len; | ||
| 79 | + int result; | ||
| 80 | + int sock; | ||
| 81 | char *output = NULL; | ||
| 82 | char *buffer = NULL; | ||
| 83 | char *ssh_proto = NULL; | ||
| 84 | char *ssh_server = NULL; | ||
| 85 | char revision[20]; | ||
| 86 | |||
| 87 | - sscanf ("$Revision: 1.3 $", "$Revision: %[0123456789.]", revision); | ||
| 88 | + sscanf ("$Revision: 1.3 $", "$Revision: %[0-9.]", revision); | ||
| 89 | |||
| 90 | - addrlen = sizeof (addr); | ||
| 91 | - memset (&addr, 0, addrlen); | ||
| 92 | - addr.sin_port = htons (hport); | ||
| 93 | - addr.sin_family = AF_INET; | ||
| 94 | - bcopy (haddr, (void *) &addr.sin_addr.s_addr, 4); | ||
| 95 | - | ||
| 96 | - s = socket (AF_INET, SOCK_STREAM, 0); | ||
| 97 | - if (!s) { | ||
| 98 | - printf ("socket(): %s for %s:%d\n", strerror (errno), server_name, hport); | ||
| 99 | - exit (STATE_CRITICAL); | ||
| 100 | - } | ||
| 101 | + result = my_tcp_connect (haddr, hport, &sock); | ||
| 102 | |||
| 103 | - if (connect (s, (struct sockaddr *) &addr, addrlen)) { | ||
| 104 | - printf ("connect(): %s for %s:%d\n", strerror (errno), server_name, | ||
| 105 | - hport); | ||
| 106 | - exit (STATE_CRITICAL); | ||
| 107 | - } | ||
| 108 | + if (result != STATE_OK) | ||
| 109 | + return result; | ||
| 110 | |||
| 111 | output = (char *) malloc (BUFF_SZ + 1); | ||
| 112 | memset (output, 0, BUFF_SZ + 1); | ||
| 113 | - recv (s, output, BUFF_SZ, 0); | ||
| 114 | + recv (sock, output, BUFF_SZ, 0); | ||
| 115 | if (strncmp (output, "SSH", 3)) { | ||
| 116 | printf ("Server answer: %s", output); | ||
| 117 | exit (STATE_CRITICAL); | ||
| 118 | @@ -228,7 +195,7 @@ | ||
| 119 | ("SSH ok - %s (protocol %s)\n", | ||
| 120 | ssh_server, ssh_proto); | ||
| 121 | asprintf (&buffer, "SSH-%s-check_ssh_%s\r\n", ssh_proto, revision); | ||
| 122 | - send (s, buffer, strlen (buffer), MSG_DONTWAIT); | ||
| 123 | + send (sock, buffer, strlen (buffer), MSG_DONTWAIT); | ||
| 124 | if (verbose) | ||
| 125 | printf ("%s\n", buffer); | ||
| 126 | exit (STATE_OK); | ||
