diff options
| author | Karl DeBisschop <kdebisschop@users.sourceforge.net> | 2003-07-30 11:39:37 +0000 |
|---|---|---|
| committer | Karl DeBisschop <kdebisschop@users.sourceforge.net> | 2003-07-30 11:39:37 +0000 |
| commit | 5dc2819e158748b3c340ded3504bef208f9c9c5e (patch) | |
| tree | 5dfa3d6b90f5dc4b23ec9dd44a0991200a196382 /plugins | |
| parent | ccead7695f4c31401283b95547e9f9703a4c43f2 (diff) | |
| download | monitoring-plugins-5dc2819e158748b3c340ded3504bef208f9c9c5e.tar.gz | |
mark up for translation
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@621 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_by_ssh.c | 197 |
1 files changed, 95 insertions, 102 deletions
diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 7328f5ac..de106f22 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
| @@ -23,22 +23,91 @@ | |||
| 23 | *****************************************************************************/ | 23 | *****************************************************************************/ |
| 24 | 24 | ||
| 25 | const char *progname = "check_by_ssh"; | 25 | const char *progname = "check_by_ssh"; |
| 26 | #define DESCRIPTION "Run checks on a remote system using ssh, wrapping the proper timeout around the ssh invocation." | 26 | const char *revision = "$Revision$"; |
| 27 | #define AUTHOR "Karl DeBisschop" | 27 | const char *copyright = "2000-2003"; |
| 28 | #define EMAIL "karl@debisschop.net" | 28 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
| 29 | #define COPYRIGHTDATE "1999, 2000, 2001" | ||
| 30 | 29 | ||
| 31 | #include "config.h" | 30 | #include "config.h" |
| 32 | #include "common.h" | 31 | #include "common.h" |
| 33 | #include "popen.h" | 32 | #include "netutils.h" |
| 34 | #include "utils.h" | 33 | #include "utils.h" |
| 35 | #include <time.h> | 34 | #include "popen.h" |
| 36 | 35 | ||
| 37 | int process_arguments (int, char **); | 36 | int process_arguments (int, char **); |
| 38 | int validate_arguments (void); | 37 | int validate_arguments (void); |
| 39 | void print_help (const char *command_name); | 38 | void print_help (void); |
| 40 | void print_usage (void); | 39 | void print_usage (void); |
| 41 | 40 | ||
| 41 | void | ||
| 42 | print_help (void) | ||
| 43 | { | ||
| 44 | print_revision (progname, revision); | ||
| 45 | |||
| 46 | printf (_(COPYRIGHT), copyright, email); | ||
| 47 | |||
| 48 | printf (_("This plugin uses SSH to execute commands on a remote host\n\n")); | ||
| 49 | |||
| 50 | print_usage (); | ||
| 51 | |||
| 52 | printf (_(HELP_VRSN)); | ||
| 53 | |||
| 54 | printf (_(HOST_PORT), 'p', "none"); | ||
| 55 | |||
| 56 | printf (_(IPv46)); | ||
| 57 | |||
| 58 | printf (_("\ | ||
| 59 | -1, --proto1\n\ | ||
| 60 | tell ssh to use Protocol 1\n\ | ||
| 61 | -2, --proto2\n\ | ||
| 62 | tell ssh to use Protocol 2\n\ | ||
| 63 | -f\n\ | ||
| 64 | tells ssh to fork rather than create a tty\n")); | ||
| 65 | |||
| 66 | printf (_("\ | ||
| 67 | -C, --command='COMMAND STRING'\n\ | ||
| 68 | command to execute on the remote machine\n\ | ||
| 69 | -l, --logname=USERNAME\n\ | ||
| 70 | SSH user name on remote host [optional]\n\ | ||
| 71 | -i, --identity=KEYFILE\n\ | ||
| 72 | identity of an authorized key [optional]\n\ | ||
| 73 | -O, --output=FILE\n\ | ||
| 74 | external command file for nagios [optional]\n\ | ||
| 75 | -s, --services=LIST\n\ | ||
| 76 | list of nagios service names, separated by ':' [optional]\n\ | ||
| 77 | -n, --name=NAME\n\ | ||
| 78 | short name of host in nagios configuration [optional]\n")); | ||
| 79 | |||
| 80 | printf (_(WARN_CRIT_TO), DEFAULT_SOCKET_TIMEOUT); | ||
| 81 | |||
| 82 | printf (_("\n\ | ||
| 83 | The most common mode of use is to refer to a local identity file with\n\ | ||
| 84 | the '-i' option. In this mode, the identity pair should have a null\n\ | ||
| 85 | passphrase and the public key should be listed in the authorized_keys\n\ | ||
| 86 | file of the remote host. Usually the key will be restricted to running\n\ | ||
| 87 | only one command on the remote server. If the remote SSH server tracks\n\ | ||
| 88 | invocation agruments, the one remote program may be an agent that can\n\ | ||
| 89 | execute additional commands as proxy\n")); | ||
| 90 | |||
| 91 | printf (_("\n\ | ||
| 92 | To use passive mode, provide multiple '-C' options, and provide\n\ | ||
| 93 | all of -O, -s, and -n options (servicelist order must match '-C'\n\ | ||
| 94 | options)\n")); | ||
| 95 | } | ||
| 96 | |||
| 97 | |||
| 98 | |||
| 99 | |||
| 100 | |||
| 101 | void | ||
| 102 | print_usage (void) | ||
| 103 | { | ||
| 104 | printf (_("Usage:\n\ | ||
| 105 | check_by_ssh [-f46] [-t timeout] [-i identity] [-l user] -H <host> -C <command>\n\ | ||
| 106 | [-n name] [-s servicelist] [-O outputfile] [-p port]\n\ | ||
| 107 | check_by_ssh -V prints version info\n\ | ||
| 108 | check_by_ssh -h prints more detailed help\n")); | ||
| 109 | } | ||
| 110 | |||
| 42 | 111 | ||
| 43 | int commands = 0; | 112 | int commands = 0; |
| 44 | int services = 0; | 113 | int services = 0; |
| @@ -56,13 +125,11 @@ int | |||
| 56 | main (int argc, char **argv) | 125 | main (int argc, char **argv) |
| 57 | { | 126 | { |
| 58 | 127 | ||
| 59 | char input_buffer[MAX_INPUT_BUFFER] = ""; | 128 | char input_buffer[MAX_INPUT_BUFFER]; |
| 60 | char *result_text = ""; | 129 | char *result_text = ""; |
| 61 | char *status_text; | 130 | char *status_text; |
| 62 | char *output = ""; | 131 | char *output = ""; |
| 63 | char *summary = ""; | ||
| 64 | char *eol = NULL; | 132 | char *eol = NULL; |
| 65 | char *srvc_desc = NULL; | ||
| 66 | int cresult; | 133 | int cresult; |
| 67 | int result = STATE_UNKNOWN; | 134 | int result = STATE_UNKNOWN; |
| 68 | time_t local_time; | 135 | time_t local_time; |
| @@ -71,7 +138,7 @@ main (int argc, char **argv) | |||
| 71 | 138 | ||
| 72 | /* process arguments */ | 139 | /* process arguments */ |
| 73 | if (process_arguments (argc, argv) == ERROR) | 140 | if (process_arguments (argc, argv) == ERROR) |
| 74 | usage ("Could not parse arguments\n"); | 141 | usage (_("Could not parse arguments\n")); |
| 75 | 142 | ||
| 76 | 143 | ||
| 77 | /* Set signal handling and alarm timeout */ | 144 | /* Set signal handling and alarm timeout */ |
| @@ -90,7 +157,7 @@ main (int argc, char **argv) | |||
| 90 | child_process = spopen (comm); | 157 | child_process = spopen (comm); |
| 91 | 158 | ||
| 92 | if (child_process == NULL) { | 159 | if (child_process == NULL) { |
| 93 | printf ("Unable to open pipe: %s", comm); | 160 | printf (_("Unable to open pipe: %s"), comm); |
| 94 | return STATE_UNKNOWN; | 161 | return STATE_UNKNOWN; |
| 95 | } | 162 | } |
| 96 | 163 | ||
| @@ -98,7 +165,7 @@ main (int argc, char **argv) | |||
| 98 | /* open STDERR for spopen */ | 165 | /* open STDERR for spopen */ |
| 99 | child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r"); | 166 | child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r"); |
| 100 | if (child_stderr == NULL) { | 167 | if (child_stderr == NULL) { |
| 101 | printf ("Could not open stderr for %s\n", SSH_COMMAND); | 168 | printf (_("Could not open stderr for %s\n"), SSH_COMMAND); |
| 102 | } | 169 | } |
| 103 | 170 | ||
| 104 | 171 | ||
| @@ -123,14 +190,14 @@ main (int argc, char **argv) | |||
| 123 | if (passive) { | 190 | if (passive) { |
| 124 | 191 | ||
| 125 | if (!(fp = fopen (outputfile, "a"))) { | 192 | if (!(fp = fopen (outputfile, "a"))) { |
| 126 | printf ("SSH WARNING: could not open %s\n", outputfile); | 193 | printf (_("SSH WARNING: could not open %s\n"), outputfile); |
| 127 | exit (STATE_UNKNOWN); | 194 | exit (STATE_UNKNOWN); |
| 128 | } | 195 | } |
| 129 | 196 | ||
| 130 | time (&local_time); | 197 | time (&local_time); |
| 131 | commands = 0; | 198 | commands = 0; |
| 132 | while (result_text && strlen(result_text) > 0) { | 199 | while (result_text && strlen(result_text) > 0) { |
| 133 | status_text = (strstr (result_text, "STATUS CODE: ")); | 200 | status_text = strstr (result_text, _("STATUS CODE: ")); |
| 134 | if (status_text == NULL) { | 201 | if (status_text == NULL) { |
| 135 | printf ("%s", result_text); | 202 | printf ("%s", result_text); |
| 136 | return result; | 203 | return result; |
| @@ -141,8 +208,8 @@ main (int argc, char **argv) | |||
| 141 | if (eol != NULL) | 208 | if (eol != NULL) |
| 142 | eol[0] = 0; | 209 | eol[0] = 0; |
| 143 | if (service[commands] && status_text | 210 | if (service[commands] && status_text |
| 144 | && sscanf (status_text, "STATUS CODE: %d", &cresult) == 1) { | 211 | && sscanf (status_text, _("STATUS CODE: %d"), &cresult) == 1) { |
| 145 | fprintf (fp, "[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n", | 212 | fprintf (fp, _("[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n"), |
| 146 | (int) local_time, host_shortname, service[commands++], cresult, | 213 | (int) local_time, host_shortname, service[commands++], cresult, |
| 147 | output); | 214 | output); |
| 148 | } | 215 | } |
| @@ -170,9 +237,8 @@ main (int argc, char **argv) | |||
| 170 | int | 237 | int |
| 171 | process_arguments (int argc, char **argv) | 238 | process_arguments (int argc, char **argv) |
| 172 | { | 239 | { |
| 173 | int c, i; | 240 | int c; |
| 174 | char *p1, *p2; | 241 | char *p1, *p2; |
| 175 | size_t len; | ||
| 176 | 242 | ||
| 177 | int option_index = 0; | 243 | int option_index = 0; |
| 178 | static struct option long_options[] = { | 244 | static struct option long_options[] = { |
| @@ -219,24 +285,24 @@ process_arguments (int argc, char **argv) | |||
| 219 | print_revision (progname, "$Revision$"); | 285 | print_revision (progname, "$Revision$"); |
| 220 | exit (STATE_OK); | 286 | exit (STATE_OK); |
| 221 | case 'h': /* help */ | 287 | case 'h': /* help */ |
| 222 | print_help (progname); | 288 | print_help (); |
| 223 | exit (STATE_OK); | 289 | exit (STATE_OK); |
| 224 | case 'v': /* help */ | 290 | case 'v': /* help */ |
| 225 | verbose = TRUE; | 291 | verbose = TRUE; |
| 226 | break; | 292 | break; |
| 227 | case 't': /* timeout period */ | 293 | case 't': /* timeout period */ |
| 228 | if (!is_integer (optarg)) | 294 | if (!is_integer (optarg)) |
| 229 | usage2 ("timeout interval must be an integer", optarg); | 295 | usage2 (_("timeout interval must be an integer"), optarg); |
| 230 | timeout_interval = atoi (optarg); | 296 | timeout_interval = atoi (optarg); |
| 231 | break; | 297 | break; |
| 232 | case 'H': /* host */ | 298 | case 'H': /* host */ |
| 233 | if (!is_host (optarg)) | 299 | if (!is_host (optarg)) |
| 234 | usage2 ("invalid host name", optarg); | 300 | usage2 (_("invalid host name"), optarg); |
| 235 | hostname = optarg; | 301 | hostname = optarg; |
| 236 | break; | 302 | break; |
| 237 | case 'p': /* port number */ | 303 | case 'p': /* port number */ |
| 238 | if (!is_integer (optarg)) | 304 | if (!is_integer (optarg)) |
| 239 | usage2 ("port must be an integer", optarg); | 305 | usage2 (_("port must be an integer"), optarg); |
| 240 | asprintf (&comm,"%s -p %s", comm, optarg); | 306 | asprintf (&comm,"%s -p %s", comm, optarg); |
| 241 | break; | 307 | break; |
| 242 | case 'O': /* output file */ | 308 | case 'O': /* output file */ |
| @@ -246,7 +312,7 @@ process_arguments (int argc, char **argv) | |||
| 246 | case 's': /* description of service to check */ | 312 | case 's': /* description of service to check */ |
| 247 | service = realloc (service, (++services) * sizeof(char *)); | 313 | service = realloc (service, (++services) * sizeof(char *)); |
| 248 | p1 = optarg; | 314 | p1 = optarg; |
| 249 | while (p2 = index (p1, ':')) { | 315 | while ((p2 = index (p1, ':'))) { |
| 250 | *p2 = '\0'; | 316 | *p2 = '\0'; |
| 251 | asprintf (&service[services-1], "%s", p1); | 317 | asprintf (&service[services-1], "%s", p1); |
| 252 | service = realloc (service, (++services) * sizeof(char *)); | 318 | service = realloc (service, (++services) * sizeof(char *)); |
| @@ -281,9 +347,9 @@ process_arguments (int argc, char **argv) | |||
| 281 | c = optind; | 347 | c = optind; |
| 282 | if (hostname == NULL) { | 348 | if (hostname == NULL) { |
| 283 | if (c <= argc) { | 349 | if (c <= argc) { |
| 284 | terminate (STATE_UNKNOWN, "%s: You must provide a host name\n", progname); | 350 | terminate (STATE_UNKNOWN, _("%s: You must provide a host name\n"), progname); |
| 285 | } else if (!is_host (argv[c])) | 351 | } else if (!is_host (argv[c])) |
| 286 | terminate (STATE_UNKNOWN, "%s: Invalid host name %s\n", progname, argv[c]); | 352 | terminate (STATE_UNKNOWN, _("%s: Invalid host name %s\n"), progname, argv[c]); |
| 287 | hostname = argv[c++]; | 353 | hostname = argv[c++]; |
| 288 | } | 354 | } |
| 289 | 355 | ||
| @@ -299,7 +365,7 @@ process_arguments (int argc, char **argv) | |||
| 299 | remotecmd = strscat (remotecmd, ";echo STATUS CODE: $?;"); | 365 | remotecmd = strscat (remotecmd, ";echo STATUS CODE: $?;"); |
| 300 | 366 | ||
| 301 | if (remotecmd == NULL || strlen (remotecmd) <= 1) | 367 | if (remotecmd == NULL || strlen (remotecmd) <= 1) |
| 302 | usage ("No remotecmd\n"); | 368 | usage (_("No remotecmd\n")); |
| 303 | 369 | ||
| 304 | asprintf (&comm, "%s %s '%s'", comm, hostname, remotecmd); | 370 | asprintf (&comm, "%s %s '%s'", comm, hostname, remotecmd); |
| 305 | 371 | ||
| @@ -317,83 +383,10 @@ validate_arguments (void) | |||
| 317 | return ERROR; | 383 | return ERROR; |
| 318 | 384 | ||
| 319 | if (passive && commands != services) | 385 | if (passive && commands != services) |
| 320 | terminate (STATE_UNKNOWN, "%s: In passive mode, you must provide a service name for each command.\n", progname); | 386 | terminate (STATE_UNKNOWN, _("%s: In passive mode, you must provide a service name for each command.\n"), progname); |
| 321 | 387 | ||
| 322 | if (passive && host_shortname == NULL) | 388 | if (passive && host_shortname == NULL) |
| 323 | terminate (STATE_UNKNOWN, "%s: In passive mode, you must provide the host short name from the nagios configs.\n", progname); | 389 | terminate (STATE_UNKNOWN, _("%s: In passive mode, you must provide the host short name from the nagios configs.\n"), progname); |
| 324 | 390 | ||
| 325 | return OK; | 391 | return OK; |
| 326 | } | 392 | } |
| 327 | |||
| 328 | |||
| 329 | |||
| 330 | |||
| 331 | |||
| 332 | void | ||
| 333 | print_help (const char *cmd) | ||
| 334 | { | ||
| 335 | print_revision (cmd, "$Revision$"); | ||
| 336 | |||
| 337 | printf | ||
| 338 | ("Copyright (c) 1999 Karl DeBisschop (kdebisschop@alum.mit.edu)\n\n" | ||
| 339 | "This plugin will execute a command on a remote host using SSH\n\n"); | ||
| 340 | |||
| 341 | print_usage (); | ||
| 342 | |||
| 343 | printf | ||
| 344 | ("\nOptions:\n" | ||
| 345 | "-H, --hostname=HOST\n" | ||
| 346 | " name or IP address of remote host\n" | ||
| 347 | "-C, --command='COMMAND STRING'\n" | ||
| 348 | " command to execute on the remote machine\n" | ||
| 349 | "-f tells ssh to fork rather than create a tty\n" | ||
| 350 | "-t, --timeout=INTEGER\n" | ||
| 351 | " specify timeout (default: %d seconds) [optional]\n" | ||
| 352 | "-p, --port=PORT\n" | ||
| 353 | " port to connect to on remote system [optional]\n" | ||
| 354 | "-l, --logname=USERNAME\n" | ||
| 355 | " SSH user name on remote host [optional]\n" | ||
| 356 | "-i, --identity=KEYFILE\n" | ||
| 357 | " identity of an authorized key [optional]\n" | ||
| 358 | "-O, --output=FILE\n" | ||
| 359 | " external command file for nagios [optional]\n" | ||
| 360 | "-s, --services=LIST\n" | ||
| 361 | " list of nagios service names, separated by ':' [optional]\n" | ||
| 362 | "-n, --name=NAME\n" | ||
| 363 | " short name of host in nagios configuration [optional]\n" | ||
| 364 | "-1, --proto1\n" | ||
| 365 | " tell ssh to use Protocol 1\n" | ||
| 366 | "-2, --proto2\n" | ||
| 367 | " tell ssh to use Protocol 2\n" | ||
| 368 | "-4, --use-ipv4\n" | ||
| 369 | " tell ssh to use IPv4\n" | ||
| 370 | "-6, --use-ipv6\n" | ||
| 371 | " tell ssh to use IPv6\n" | ||
| 372 | "\n" | ||
| 373 | "The most common mode of use is to refer to a local identity file with\n" | ||
| 374 | "the '-i' option. In this mode, the identity pair should have a null\n" | ||
| 375 | "passphrase and the public key should be listed in the authorized_keys\n" | ||
| 376 | "file of the remote host. Usually the key will be restricted to running\n" | ||
| 377 | "only one command on the remote server. If the remote SSH server tracks\n" | ||
| 378 | "invocation agruments, the one remote program may be an agent that can\n" | ||
| 379 | "execute additional commands as proxy\n" | ||
| 380 | "\n" | ||
| 381 | "To use passive mode, provide multiple '-C' options, and provide\n" | ||
| 382 | "all of -O, -s, and -n options (servicelist order must match '-C'\n" | ||
| 383 | "options)\n", DEFAULT_SOCKET_TIMEOUT); | ||
| 384 | } | ||
| 385 | |||
| 386 | |||
| 387 | |||
| 388 | |||
| 389 | |||
| 390 | void | ||
| 391 | print_usage (void) | ||
| 392 | { | ||
| 393 | printf | ||
| 394 | ("Usage:\n" | ||
| 395 | "check_by_ssh [-f46] [-t timeout] [-i identity] [-l user] -H <host> -C <command>\n" | ||
| 396 | " [-n name] [-s servicelist] [-O outputfile] [-p port]\n" | ||
| 397 | "check_by_ssh -V prints version info\n" | ||
| 398 | "check_by_ssh -h prints more detailed help\n"); | ||
| 399 | } | ||
