X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fnegate.c;h=c1c0bc57fd07ae71fb16cf11b26102dc7afd22df;hb=11b35b92e3195d230bef359f6a0679ae4414716b;hp=b6effe399facbc30477bc1c100a42380c50d97ee;hpb=078651b1bd375fe31afea11404ce091f75bad6d1;p=nagiosplug.git diff --git a/plugins/negate.c b/plugins/negate.c index b6effe3..c1c0bc5 100644 --- a/plugins/negate.c +++ b/plugins/negate.c @@ -23,7 +23,7 @@ * *****************************************************************************/ -#define PROGNAME "negate" +const char *progname = "negate"; #define REVISION "$Revision$" #define COPYRIGHT "2002" #define AUTHOR "Karl DeBisschop" @@ -31,7 +31,7 @@ #define SUMMARY "Negates the status of a plugin (returns OK for CRITICAL, and vice-versa).\n" #define OPTIONS "\ -\[-t timeout] " +[-t timeout] " #define LONGOPTIONS "\ -t, --timeout=INTEGER\n\ @@ -52,10 +52,10 @@ Otherwise, the output state of the wrapped plugin is unchanged.\n" char *command_line; -static int process_arguments (int, char **); -static int validate_arguments (void); -static void print_usage (void); -static void print_help (void); +int process_arguments (int, char **); +int validate_arguments (void); +void print_usage (void); +void print_help (void); /****************************************************************************** @@ -76,7 +76,7 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. 5 -&PROGNAME; +&progname; &SUMMARY; @@ -117,20 +117,17 @@ main (int argc, char **argv) char input_buffer[MAX_INPUT_BUFFER]; if (process_arguments (argc, argv) == ERROR) - usage ("Could not parse arguments"); + usage ("Could not parse arguments\n"); /* Set signal handling and alarm */ - if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) { - printf ("Cannot catch SIGALRM"); - return STATE_UNKNOWN; - } - alarm (timeout_interval); + if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) + terminate (STATE_UNKNOWN, "Cannot catch SIGALRM"); + + (void) alarm ((unsigned) timeout_interval); child_process = spopen (command_line); - if (child_process == NULL) { - printf ("Could not open pipe: %s\n", command_line); - exit (STATE_UNKNOWN); - } + if (child_process == NULL) + terminate (STATE_UNKNOWN, "Could not open pipe: %s\n", command_line); child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r"); if (child_stderr == NULL) { @@ -139,7 +136,7 @@ main (int argc, char **argv) while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { found++; - if (index (input_buffer, '\n')) { + if (strchr (input_buffer, '\n')) { input_buffer[strcspn (input_buffer, "\n")] = 0; printf ("%s\n", input_buffer); } @@ -148,11 +145,10 @@ main (int argc, char **argv) } } - if (!found) { - printf ("%s problem - No data recieved from host\nCMD: %s\n", argv[0], - command_line); - exit (STATE_UNKNOWN); - } + if (!found) + terminate (STATE_UNKNOWN,\ + "%s problem - No data recieved from host\nCMD: %s\n",\ + argv[0], command_line); /* close the pipe */ result = spclose (child_process); @@ -165,11 +161,11 @@ main (int argc, char **argv) (void) fclose (child_stderr); if (result == STATE_OK) - return STATE_CRITICAL; + exit (STATE_CRITICAL); else if (result == STATE_CRITICAL) - return STATE_OK; + exit (EXIT_SUCCESS); else - return result; + exit (result); } @@ -178,7 +174,7 @@ main (int argc, char **argv) void print_help (void) { - print_revision (PROGNAME, REVISION); + print_revision (progname, REVISION); printf ("Copyright (c) %s %s <%s>\n\n%s\n", COPYRIGHT, AUTHOR, EMAIL, SUMMARY); @@ -193,14 +189,9 @@ void print_usage (void) { printf ("Usage:\n" " %s %s\n" -#ifdef HAVE_GETOPT_H " %s (-h | --help) for detailed help\n" " %s (-V | --version) for version information\n", -#else - " %s -h for detailed help\n" - " %s -V for version information\n", -#endif - PROGNAME, OPTIONS, PROGNAME, PROGNAME); + progname, OPTIONS, progname, progname); } @@ -226,7 +217,6 @@ process_arguments (int argc, char **argv) { int c; -#ifdef HAVE_GETOPT_H int option_index = 0; static struct option long_options[] = { {"help", no_argument, 0, 'h'}, @@ -234,27 +224,23 @@ process_arguments (int argc, char **argv) {"timeout", required_argument, 0, 't'}, {0, 0, 0, 0} }; -#endif while (1) { -#ifdef HAVE_GETOPT_H - c = getopt_long (argc, argv, "+?hVt:", + c = getopt_long (argc, argv, "+hVt:", long_options, &option_index); -#else - c = getopt (argc, argv, "+?hVt:"); -#endif + if (c == -1 || c == EOF) break; switch (c) { case '?': /* help */ - usage2 ("Unknown argument", optarg); + usage3 ("Unknown argument", optopt); case 'h': /* help */ print_help (); - exit (STATE_OK); + exit (EXIT_SUCCESS); case 'V': /* version */ - print_revision (PROGNAME, REVISION); - exit (STATE_OK); + print_revision (progname, REVISION); + exit (EXIT_SUCCESS); case 't': /* timeout period */ if (!is_integer (optarg)) usage2 ("Timeout Interval must be an integer", optarg); @@ -263,9 +249,9 @@ process_arguments (int argc, char **argv) } } - command_line = strscpy (command_line, argv[optind]); - for (c = optind+1; c <= argc; c++) { - command_line = ssprintf (command_line, "%s %s", command_line, argv[c]); + asprintf (&command_line, "%s", argv[optind]); + for (c = optind+1; c < argc; c++) { + asprintf (&command_line, "%s %s", command_line, argv[c]); } return validate_arguments (); @@ -286,7 +272,9 @@ process_arguments (int argc, char **argv) int validate_arguments () { - return OK; + if (command_line == NULL) + return ERROR; + return STATE_OK; }