summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Wagner <waja@cyconet.org>2013-09-29 02:23:11 +0200
committerJan Wagner <waja@cyconet.org>2014-07-30 13:16:37 +0200
commitd0da78ced184197b29af9fe910aaf56a9e7fe762 (patch)
tree2db08436512d4c8c2b46f1b7854ded83a5fbd55a
parentd8c20cc487f4dc361af553c57b8b4f8a4ab1dd29 (diff)
downloadmonitoring-plugins-d0da78c.tar.gz
check_dns: returns incorrect state when specifying server
This patch verifies if the response is returned by the dns server we are trying to check --- Closes #981 Closes #982 Closes #1164
-rw-r--r--plugins/check_dns.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/plugins/check_dns.c b/plugins/check_dns.c
index 31a953d7..da90da75 100644
--- a/plugins/check_dns.c
+++ b/plugins/check_dns.c
@@ -136,6 +136,28 @@ main (int argc, char **argv)
136 } 136 }
137 } 137 }
138 138
139 /* bug ID: 2946553 - Older versions of bind will use all available dns
140 servers, we have to match the one specified */
141 if (strstr (chld_out.line[i], "Server:") && strlen(dns_server) > 0) {
142 temp_buffer = index (chld_out.line[i], ':');
143 temp_buffer++;
144
145 /* Strip leading tabs */
146 for (; *temp_buffer != '\0' && *temp_buffer == '\t'; temp_buffer++)
147 /* NOOP */;
148
149 strip(temp_buffer);
150 if (temp_buffer==NULL || strlen(temp_buffer)==0) {
151 die (STATE_CRITICAL,
152 _("DNS CRITICAL - '%s' returned empty server string\n"),
153 NSLOOKUP_COMMAND);
154 }
155
156 if (strcmp(temp_buffer, dns_server) != 0) {
157 die (STATE_CRITICAL, _("No response from DNS %s\n"), dns_server);
158 }
159 }
160
139 /* the server is responding, we just got the host name... */ 161 /* the server is responding, we just got the host name... */
140 if (strstr (chld_out.line[i], "Name:")) 162 if (strstr (chld_out.line[i], "Name:"))
141 parse_address = TRUE; 163 parse_address = TRUE;