diff options
author | Ton Voon <tonvoon@users.sourceforge.net> | 2004-08-18 21:25:50 +0000 |
---|---|---|
committer | Ton Voon <tonvoon@users.sourceforge.net> | 2004-08-18 21:25:50 +0000 |
commit | 556698798427e81da2c9ecb8a0bd45fd27f5f1b9 (patch) | |
tree | ed64a2f2c8a23929a91fa794c1f0a67efea0d1f7 /plugins/check_dig.c | |
parent | 5d6b214dbc6a9a32ce9e0b0f20914b1fbac76755 (diff) | |
download | monitoring-plugins-556698798427e81da2c9ecb8a0bd45fd27f5f1b9.tar.gz |
Checks different record types and checks against an expected address (Bill Kunkel)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@888 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'plugins/check_dig.c')
-rw-r--r-- | plugins/check_dig.c | 79 |
1 files changed, 58 insertions, 21 deletions
diff --git a/plugins/check_dig.c b/plugins/check_dig.c index 9e1d8479..41c445c5 100644 --- a/plugins/check_dig.c +++ b/plugins/check_dig.c | |||
@@ -37,6 +37,8 @@ enum { | |||
37 | }; | 37 | }; |
38 | 38 | ||
39 | char *query_address = NULL; | 39 | char *query_address = NULL; |
40 | char *record_type = "A"; | ||
41 | char *expected_address = NULL; | ||
40 | char *dns_server = NULL; | 42 | char *dns_server = NULL; |
41 | int verbose = FALSE; | 43 | int verbose = FALSE; |
42 | int server_port = DEFAULT_PORT; | 44 | int server_port = DEFAULT_PORT; |
@@ -68,14 +70,20 @@ main (int argc, char **argv) | |||
68 | usage (_("Could not parse arguments\n")); | 70 | usage (_("Could not parse arguments\n")); |
69 | 71 | ||
70 | /* get the command to run */ | 72 | /* get the command to run */ |
71 | asprintf (&command_line, "%s @%s -p %d %s", | 73 | asprintf (&command_line, "%s @%s -p %d %s -t %s", |
72 | PATH_TO_DIG, dns_server, server_port, query_address); | 74 | PATH_TO_DIG, dns_server, server_port, query_address, record_type); |
73 | 75 | ||
74 | alarm (timeout_interval); | 76 | alarm (timeout_interval); |
75 | gettimeofday (&tv, NULL); | 77 | gettimeofday (&tv, NULL); |
76 | 78 | ||
77 | if (verbose) | 79 | if (verbose) { |
78 | printf ("%s\n", command_line); | 80 | printf ("%s\n", command_line); |
81 | if(expected_address != NULL) { | ||
82 | printf ("Looking for: '%s'\n", expected_address); | ||
83 | } else { | ||
84 | printf ("Looking for: '%s'\n", query_address); | ||
85 | } | ||
86 | } | ||
79 | 87 | ||
80 | /* run the command */ | 88 | /* run the command */ |
81 | child_process = spopen (command_line); | 89 | child_process = spopen (command_line); |
@@ -93,28 +101,39 @@ main (int argc, char **argv) | |||
93 | /* the server is responding, we just got the host name... */ | 101 | /* the server is responding, we just got the host name... */ |
94 | if (strstr (input_buffer, ";; ANSWER SECTION:")) { | 102 | if (strstr (input_buffer, ";; ANSWER SECTION:")) { |
95 | 103 | ||
96 | /* get the host address */ | 104 | /* loop through the whole 'ANSWER SECTION' */ |
97 | if (!fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) | 105 | do { |
98 | break; | 106 | /* get the host address */ |
107 | if (!fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) | ||
108 | break; | ||
99 | 109 | ||
100 | if (strpbrk (input_buffer, "\r\n")) | 110 | if (strpbrk (input_buffer, "\r\n")) |
101 | input_buffer[strcspn (input_buffer, "\r\n")] = '\0'; | 111 | input_buffer[strcspn (input_buffer, "\r\n")] = '\0'; |
102 | 112 | ||
103 | if (strstr (input_buffer, query_address) == input_buffer) { | 113 | if (verbose && !strstr (input_buffer, ";; ")) |
104 | output = strdup(input_buffer); | 114 | printf ("%s\n", input_buffer); |
105 | result = STATE_OK; | 115 | |
106 | } | 116 | if (expected_address==NULL && strstr (input_buffer, query_address) != NULL) { |
107 | else { | 117 | output = strdup(input_buffer); |
108 | asprintf (&output, _("Server not found in ANSWER SECTION")); | 118 | result = STATE_OK; |
109 | result = STATE_WARNING; | 119 | } |
110 | } | 120 | else if (expected_address != NULL && strstr (input_buffer, expected_address) != NULL) { |
121 | output = strdup(input_buffer); | ||
122 | result = STATE_OK; | ||
123 | } | ||
124 | |||
125 | } while (!strstr (input_buffer, ";; ")); | ||
126 | |||
127 | if (result == STATE_UNKNOWN) { | ||
128 | asprintf (&output, _("Server not found in ANSWER SECTION")); | ||
129 | result = STATE_WARNING; | ||
130 | } | ||
111 | 131 | ||
112 | continue; | ||
113 | } | 132 | } |
114 | 133 | ||
115 | } | 134 | } |
116 | 135 | ||
117 | if (result != STATE_OK) { | 136 | if (result == STATE_UNKNOWN) { |
118 | asprintf (&output, _("No ANSWER SECTION found")); | 137 | asprintf (&output, _("No ANSWER SECTION found")); |
119 | } | 138 | } |
120 | 139 | ||
@@ -181,6 +200,8 @@ process_arguments (int argc, char **argv) | |||
181 | {"verbose", no_argument, 0, 'v'}, | 200 | {"verbose", no_argument, 0, 'v'}, |
182 | {"version", no_argument, 0, 'V'}, | 201 | {"version", no_argument, 0, 'V'}, |
183 | {"help", no_argument, 0, 'h'}, | 202 | {"help", no_argument, 0, 'h'}, |
203 | {"record_type", required_argument, 0, 'T'}, | ||
204 | {"expected_address", required_argument, 0, 'a'}, | ||
184 | {0, 0, 0, 0} | 205 | {0, 0, 0, 0} |
185 | }; | 206 | }; |
186 | 207 | ||
@@ -188,7 +209,7 @@ process_arguments (int argc, char **argv) | |||
188 | return ERROR; | 209 | return ERROR; |
189 | 210 | ||
190 | while (1) { | 211 | while (1) { |
191 | c = getopt_long (argc, argv, "hVvt:l:H:w:c:", longopts, &option); | 212 | c = getopt_long (argc, argv, "hVvt:l:H:w:c:T:a:", longopts, &option); |
192 | 213 | ||
193 | if (c == -1 || c == EOF) | 214 | if (c == -1 || c == EOF) |
194 | break; | 215 | break; |
@@ -248,6 +269,12 @@ process_arguments (int argc, char **argv) | |||
248 | case 'v': /* verbose */ | 269 | case 'v': /* verbose */ |
249 | verbose = TRUE; | 270 | verbose = TRUE; |
250 | break; | 271 | break; |
272 | case 'T': | ||
273 | record_type = optarg; | ||
274 | break; | ||
275 | case 'a': | ||
276 | expected_address = optarg; | ||
277 | break; | ||
251 | } | 278 | } |
252 | } | 279 | } |
253 | 280 | ||
@@ -309,6 +336,15 @@ print_help (void) | |||
309 | -l, --lookup=STRING\n\ | 336 | -l, --lookup=STRING\n\ |
310 | machine name to lookup\n")); | 337 | machine name to lookup\n")); |
311 | 338 | ||
339 | printf (_("\ | ||
340 | -T, --record_type=STRING\n\ | ||
341 | record type to lookup (default: A)\n")); | ||
342 | |||
343 | printf (_("\ | ||
344 | -a, --expected_address=STRING\n\ | ||
345 | an address expected to be in the asnwer section.\n\ | ||
346 | if not set, uses whatever was in -l\n")); | ||
347 | |||
312 | printf (_(UT_WARN_CRIT)); | 348 | printf (_(UT_WARN_CRIT)); |
313 | 349 | ||
314 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | 350 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); |
@@ -325,8 +361,9 @@ void | |||
325 | print_usage (void) | 361 | print_usage (void) |
326 | { | 362 | { |
327 | printf (_("\ | 363 | printf (_("\ |
328 | Usage: %s -H host -l lookup [-p <server port>] [-w <warning interval>]\n\ | 364 | Usage: %s -H host -l lookup [-p <server port>] [-T <query type>]\n\ |
329 | [-c <critical interval>] [-t <timeout>] [-v]\n"), | 365 | [-w <warning interval>] [-c <critical interval>] [-t <timeout>]\n\ |
366 | [-a <expected answer address>] [-v]\n"), | ||
330 | progname); | 367 | progname); |
331 | printf (" %s (-h|--help)\n", progname); | 368 | printf (" %s (-h|--help)\n", progname); |
332 | printf (" %s (-V|--version)\n", progname); | 369 | printf (" %s (-V|--version)\n", progname); |