diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_dns.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/plugins/check_dns.c b/plugins/check_dns.c index a0d6e85..bc0400f 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c | |||
@@ -10,8 +10,9 @@ | |||
10 | * | 10 | * |
11 | * Notes: | 11 | * Notes: |
12 | * - Safe popen added by Karl DeBisschop 9-11-99 | 12 | * - Safe popen added by Karl DeBisschop 9-11-99 |
13 | * - expected-address parameter added by Alex Chaffee - 7 Oct 2002 | ||
13 | * | 14 | * |
14 | * Command line: CHECK_DNS <query_address> [dns_server] | 15 | * Command line: (see print_usage) |
15 | * | 16 | * |
16 | * Description: | 17 | * Description: |
17 | * | 18 | * |
@@ -59,6 +60,8 @@ char query_address[ADDRESS_LENGTH] = ""; | |||
59 | char dns_server[ADDRESS_LENGTH] = ""; | 60 | char dns_server[ADDRESS_LENGTH] = ""; |
60 | char ptr_server[ADDRESS_LENGTH] = ""; | 61 | char ptr_server[ADDRESS_LENGTH] = ""; |
61 | int verbose = FALSE; | 62 | int verbose = FALSE; |
63 | char expected_address[ADDRESS_LENGTH] = ""; | ||
64 | int match_expected_address = FALSE; | ||
62 | 65 | ||
63 | int | 66 | int |
64 | main (int argc, char **argv) | 67 | main (int argc, char **argv) |
@@ -165,6 +168,12 @@ main (int argc, char **argv) | |||
165 | output = strscpy (output, "nslookup returned error status"); | 168 | output = strscpy (output, "nslookup returned error status"); |
166 | } | 169 | } |
167 | 170 | ||
171 | /* compare to expected address */ | ||
172 | if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) { | ||
173 | result = STATE_CRITICAL; | ||
174 | output = ssprintf(output, "expected %s but got %s", expected_address, address); | ||
175 | } | ||
176 | |||
168 | (void) time (&end_time); | 177 | (void) time (&end_time); |
169 | 178 | ||
170 | if (result == STATE_OK) | 179 | if (result == STATE_OK) |
@@ -297,6 +306,7 @@ call_getopt (int argc, char **argv) | |||
297 | {"hostname", required_argument, 0, 'H'}, | 306 | {"hostname", required_argument, 0, 'H'}, |
298 | {"server", required_argument, 0, 's'}, | 307 | {"server", required_argument, 0, 's'}, |
299 | {"reverse-server", required_argument, 0, 'r'}, | 308 | {"reverse-server", required_argument, 0, 'r'}, |
309 | {"expected-address", required_argument, 0, 'a'}, | ||
300 | {0, 0, 0, 0} | 310 | {0, 0, 0, 0} |
301 | }; | 311 | }; |
302 | #endif | 312 | #endif |
@@ -304,9 +314,9 @@ call_getopt (int argc, char **argv) | |||
304 | 314 | ||
305 | while (1) { | 315 | while (1) { |
306 | #ifdef HAVE_GETOPT_H | 316 | #ifdef HAVE_GETOPT_H |
307 | c = getopt_long (argc, argv, "+?hVvt:H:s:r:", long_opts, &opt_index); | 317 | c = getopt_long (argc, argv, "+?hVvt:H:s:r:a:", long_opts, &opt_index); |
308 | #else | 318 | #else |
309 | c = getopt (argc, argv, "+?hVvt:H:s:r:"); | 319 | c = getopt (argc, argv, "+?hVvt:H:s:r:a:"); |
310 | #endif | 320 | #endif |
311 | 321 | ||
312 | if (c == -1 || c == EOF) | 322 | if (c == -1 || c == EOF) |
@@ -318,6 +328,7 @@ call_getopt (int argc, char **argv) | |||
318 | case 'H': | 328 | case 'H': |
319 | case 's': | 329 | case 's': |
320 | case 'r': | 330 | case 'r': |
331 | case 'a': | ||
321 | i++; | 332 | i++; |
322 | } | 333 | } |
323 | 334 | ||
@@ -368,6 +379,17 @@ call_getopt (int argc, char **argv) | |||
368 | terminate (STATE_UNKNOWN, "Input buffer overflow\n"); | 379 | terminate (STATE_UNKNOWN, "Input buffer overflow\n"); |
369 | strcpy (ptr_server, optarg); | 380 | strcpy (ptr_server, optarg); |
370 | break; | 381 | break; |
382 | case 'a': /* expected address */ | ||
383 | if (is_dotted_quad (optarg) == FALSE) { | ||
384 | printf ("Invalid expected address\n\n"); | ||
385 | print_usage (my_basename (argv[0])); | ||
386 | exit (STATE_UNKNOWN); | ||
387 | } | ||
388 | if (strlen (optarg) >= ADDRESS_LENGTH) | ||
389 | terminate (STATE_UNKNOWN, "Input buffer overflow\n"); | ||
390 | strcpy (expected_address, optarg); | ||
391 | match_expected_address = TRUE; | ||
392 | break; | ||
371 | } | 393 | } |
372 | } | 394 | } |
373 | return i; | 395 | return i; |
@@ -385,7 +407,7 @@ validate_arguments () | |||
385 | void | 407 | void |
386 | print_usage (char *cmd) | 408 | print_usage (char *cmd) |
387 | { | 409 | { |
388 | printf ("Usage: %s -H host [-s server] [-t timeout]\n" " %s --help\n" | 410 | printf ("Usage: %s -H host [-s server] [-a expected-address] [-t timeout]\n" " %s --help\n" |
389 | " %s --version\n", cmd, cmd, cmd); | 411 | " %s --version\n", cmd, cmd, cmd); |
390 | } | 412 | } |
391 | 413 | ||
@@ -401,6 +423,8 @@ print_help (char *cmd) | |||
401 | " The name or address you want to query\n" | 423 | " The name or address you want to query\n" |
402 | "-s, --server=HOST\n" | 424 | "-s, --server=HOST\n" |
403 | " Optional DNS server you want to use for the lookup\n" | 425 | " Optional DNS server you want to use for the lookup\n" |
426 | "-a, --expected-address=IP-ADDRESS\n" | ||
427 | " Optional IP address you expect the DNS server to return\n" | ||
404 | "-t, --timeout=INTEGER\n" | 428 | "-t, --timeout=INTEGER\n" |
405 | " Seconds before connection times out (default: %d)\n" | 429 | " Seconds before connection times out (default: %d)\n" |
406 | "-h, --help\n" | 430 | "-h, --help\n" |