X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_dig.c;h=5c6f1e12e8bdb45985d0ac535d8c79bdcab1de42;hb=782bc207d5697f539beb1fd3359ce81d22e26a54;hp=384b380b8ba5afa291e7847ca8257f349b700639;hpb=f4c6f7f09305c1c9916da6ac4f7aadcb31e319e0;p=nagiosplug.git diff --git a/plugins/check_dig.c b/plugins/check_dig.c index 384b380..5c6f1e1 100644 --- a/plugins/check_dig.c +++ b/plugins/check_dig.c @@ -1,26 +1,39 @@ /****************************************************************************** -* -* check_dig.c -* -* Program: dig plugin for Nagios -* License: GPL -* Copyright (c) 2000 -* -* $Id$ -* -*****************************************************************************/ + * + * Program: SNMP plugin for Nagios + * License: GPL + * + * License Information: + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *****************************************************************************/ #include "config.h" #include "common.h" #include "utils.h" #include "popen.h" -#define PROGNAME "check_dig" +const char *progname = "check_dig"; +#define REVISION "$Revision$" +#define COPYRIGHT "2000-2002" +#define AUTHOR "Karl DeBisschop" +#define EMAIL "karl@debisschop.net" +#define SUMMARY "Test the DNS service on the specified host using dig\n" int process_arguments (int, char **); -int call_getopt (int, char **); int validate_arguments (void); -int check_disk (int usp, int free_disk); void print_help (void); void print_usage (void); @@ -33,7 +46,7 @@ main (int argc, char **argv) { char input_buffer[MAX_INPUT_BUFFER]; char *command_line = NULL; - char *output = NULL; + char *output = ""; int result = STATE_UNKNOWN; /* Set signal handling and alarm */ @@ -44,9 +57,7 @@ main (int argc, char **argv) usage ("Could not parse arguments\n"); /* get the command to run */ - command_line = - ssprintf (command_line, "%s @%s %s", PATH_TO_DIG, dns_server, - query_address); + asprintf (&command_line, "%s @%s %s", PATH_TO_DIG, dns_server, query_address); alarm (timeout_interval); time (&start_time); @@ -64,8 +75,6 @@ main (int argc, char **argv) if (child_stderr == NULL) printf ("Could not open stderr for %s\n", command_line); - output = strscpy (output, ""); - while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { /* the server is responding, we just got the host name... */ @@ -79,11 +88,11 @@ main (int argc, char **argv) input_buffer[strcspn (input_buffer, "\r\n")] = '\0'; if (strstr (input_buffer, query_address) == input_buffer) { - output = strscpy (output, input_buffer); + asprintf (&output, input_buffer); result = STATE_OK; } else { - strcpy (output, "Server not found in ANSWER SECTION"); + asprintf (&output, "Server not found in ANSWER SECTION"); result = STATE_WARNING; } @@ -93,15 +102,15 @@ main (int argc, char **argv) } if (result != STATE_OK) { - strcpy (output, "No ANSWER SECTION found"); + asprintf (&output, "No ANSWER SECTION found"); } while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) { /* If we get anything on STDERR, at least set warning */ result = max_state (result, STATE_WARNING); printf ("%s", input_buffer); - if (!strcmp (output, "")) - strcpy (output, 1 + index (input_buffer, ':')); + if (strlen (output) == 0) + asprintf (&output, 1 + index (input_buffer, ':')); } (void) fclose (child_stderr); @@ -109,27 +118,24 @@ main (int argc, char **argv) /* close the pipe */ if (spclose (child_process)) { result = max_state (result, STATE_WARNING); - if (!strcmp (output, "")) - strcpy (output, "nslookup returned error status"); + if (strlen (output) == 0) + asprintf (&output, "dig returned error status"); } (void) time (&end_time); + if (output == NULL || strlen (output) == 0) + asprintf (&output, " Probably a non-existent host/domain"); + if (result == STATE_OK) printf ("DNS ok - %d seconds response time (%s)\n", (int) (end_time - start_time), output); else if (result == STATE_WARNING) - printf ("DNS WARNING - %s\n", - !strcmp (output, - "") ? " Probably a non-existent host/domain" : output); + printf ("DNS WARNING - %s\n", output); else if (result == STATE_CRITICAL) - printf ("DNS CRITICAL - %s\n", - !strcmp (output, - "") ? " Probably a non-existent host/domain" : output); + printf ("DNS CRITICAL - %s\n", output); else - printf ("DNS problem - %s\n", - !strcmp (output, - "") ? " Probably a non-existent host/domain" : output); + printf ("DNS problem - %s\n", output); return result; } @@ -140,42 +146,6 @@ process_arguments (int argc, char **argv) { int c; - if (argc < 2) - return ERROR; - - - c = 0; - while ((c += (call_getopt (argc - c, &argv[c]))) < argc) { - - if (is_option (argv[c])) - continue; - - if (dns_server == NULL) { - if (is_host (argv[c])) { - dns_server = argv[c]; - } - else { - usage ("Invalid host name"); - } - } - } - - if (dns_server == NULL) - dns_server = strscpy (NULL, "127.0.0.1"); - - return validate_arguments (); -} - - - - - - -int -call_getopt (int argc, char **argv) -{ - int c, i = 0; - #ifdef HAVE_GETOPT_H int option_index = 0; static struct option long_options[] = { @@ -188,26 +158,22 @@ call_getopt (int argc, char **argv) }; #endif + if (argc < 2) + return ERROR; + while (1) { #ifdef HAVE_GETOPT_H - c = getopt_long (argc, argv, "+hVvt:l:H:", long_options, &option_index); + c = getopt_long (argc, argv, "hVvt:l:H:", long_options, &option_index); #else - c = getopt (argc, argv, "+?hVvt:l:H:"); + c = getopt (argc, argv, "hVvt:l:H:"); #endif - i++; - - if (c == -1 || c == EOF || c == 1) + if (c == -1 || c == EOF) break; switch (c) { - case 't': - case 'l': - case 'H': - i++; - } - - switch (c) { + case '?': /* help */ + usage3 ("Unknown argument", optopt); case 'H': /* hostname */ if (is_host (optarg)) { dns_server = optarg; @@ -231,16 +197,30 @@ call_getopt (int argc, char **argv) } break; case 'V': /* version */ - print_revision (PROGNAME, "$Revision$"); + print_revision (progname, "$Revision$"); exit (STATE_OK); case 'h': /* help */ print_help (); exit (STATE_OK); - case '?': /* help */ - usage ("Invalid argument\n"); } } - return i; + + c = optind; + if (dns_server == NULL) { + if (c < argc) { + if (is_host (argv[c])) { + dns_server = argv[c]; + } + else { + usage ("Invalid host name"); + } + } + else { + asprintf (&dns_server, "127.0.0.1"); + } + } + + return validate_arguments (); } @@ -260,10 +240,10 @@ validate_arguments (void) void print_help (void) { - print_revision (PROGNAME, "$Revision$"); + print_revision (progname, "$Revision$"); printf - ("Copyright (c) 2000 Karl DeBisschop\n\n" - "This plugin use dig to test the DNS service on the specified host.\n\n"); + ("Copyright (c) %s %s <%s>\n\n%s\n", + COPYRIGHT, AUTHOR, EMAIL, SUMMARY); print_usage (); printf ("\nOptions:\n" @@ -292,5 +272,5 @@ print_usage (void) printf ("Usage: %s -H host -l lookup [-t timeout] [-v]\n" " %s --help\n" - " %s --version\n", PROGNAME, PROGNAME, PROGNAME); + " %s --version\n", progname, progname, progname); }