summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/check_dns.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/plugins/check_dns.c b/plugins/check_dns.c
index 7071c01f..e98c709f 100644
--- a/plugins/check_dns.c
+++ b/plugins/check_dns.c
@@ -106,14 +106,16 @@ int main(int argc, char **argv) {
106 result = STATE_WARNING; 106 result = STATE_WARNING;
107 } 107 }
108 108
109 char *address = NULL; /* comma separated str with addrs/ptrs (sorted) */ 109 /* =====
110 char **addresses = NULL; 110 * scan stdout, main results get retrieved here
111 size_t n_addresses = 0; 111 * =====
112 */
113 char *address = NULL; /* comma separated str with addrs/ptrs (sorted) */
114 char **addresses = NULL; // All addresses parsed from stdout
115 size_t n_addresses = 0; // counter for retrieved addresses
112 bool non_authoritative = false; 116 bool non_authoritative = false;
113 bool is_nxdomain = false; 117 bool is_nxdomain = false;
114 char *temp_buffer = NULL;
115 bool parse_address = false; /* This flag scans for Address: but only after Name: */ 118 bool parse_address = false; /* This flag scans for Address: but only after Name: */
116 /* scan stdout */
117 for (size_t i = 0; i < chld_out.lines; i++) { 119 for (size_t i = 0; i < chld_out.lines; i++) {
118 if (addresses == NULL) { 120 if (addresses == NULL) {
119 addresses = malloc(sizeof(*addresses) * 10); 121 addresses = malloc(sizeof(*addresses) * 10);
@@ -126,6 +128,7 @@ int main(int argc, char **argv) {
126 } 128 }
127 129
128 if (strcasestr(chld_out.line[i], ".in-addr.arpa") || strcasestr(chld_out.line[i], ".ip6.arpa")) { 130 if (strcasestr(chld_out.line[i], ".in-addr.arpa") || strcasestr(chld_out.line[i], ".ip6.arpa")) {
131 char *temp_buffer = NULL;
129 if ((temp_buffer = strstr(chld_out.line[i], "name = "))) { 132 if ((temp_buffer = strstr(chld_out.line[i], "name = "))) {
130 addresses[n_addresses++] = strdup(temp_buffer + 7); 133 addresses[n_addresses++] = strdup(temp_buffer + 7);
131 } else { 134 } else {
@@ -137,6 +140,7 @@ int main(int argc, char **argv) {
137 /* bug ID: 2946553 - Older versions of bind will use all available dns 140 /* bug ID: 2946553 - Older versions of bind will use all available dns
138 servers, we have to match the one specified */ 141 servers, we have to match the one specified */
139 if (strstr(chld_out.line[i], "Server:") && strlen(config.dns_server) > 0) { 142 if (strstr(chld_out.line[i], "Server:") && strlen(config.dns_server) > 0) {
143 char *temp_buffer = NULL;
140 temp_buffer = strchr(chld_out.line[i], ':'); 144 temp_buffer = strchr(chld_out.line[i], ':');
141 temp_buffer++; 145 temp_buffer++;
142 146
@@ -159,6 +163,7 @@ int main(int argc, char **argv) {
159 if (strstr(chld_out.line[i], "Name:")) { 163 if (strstr(chld_out.line[i], "Name:")) {
160 parse_address = true; 164 parse_address = true;
161 } else if (parse_address && (strstr(chld_out.line[i], "Address:") || strstr(chld_out.line[i], "Addresses:"))) { 165 } else if (parse_address && (strstr(chld_out.line[i], "Address:") || strstr(chld_out.line[i], "Addresses:"))) {
166 char *temp_buffer = NULL;
162 temp_buffer = index(chld_out.line[i], ':'); 167 temp_buffer = index(chld_out.line[i], ':');
163 temp_buffer++; 168 temp_buffer++;
164 169
@@ -216,6 +221,8 @@ int main(int argc, char **argv) {
216 for (size_t i = 0; i < n_addresses; i++) { 221 for (size_t i = 0; i < n_addresses; i++) {
217 slen += strlen(addresses[i]) + 1; 222 slen += strlen(addresses[i]) + 1;
218 } 223 }
224
225 // Temporary pointer adrp gets moved, address stays on the beginning
219 adrp = address = malloc(slen); 226 adrp = address = malloc(slen);
220 for (size_t i = 0; i < n_addresses; i++) { 227 for (size_t i = 0; i < n_addresses; i++) {
221 if (i) { 228 if (i) {
@@ -232,7 +239,7 @@ int main(int argc, char **argv) {
232 /* compare to expected address */ 239 /* compare to expected address */
233 if (result == STATE_OK && config.expected_address_cnt > 0) { 240 if (result == STATE_OK && config.expected_address_cnt > 0) {
234 result = STATE_CRITICAL; 241 result = STATE_CRITICAL;
235 temp_buffer = ""; 242 char *temp_buffer = "";
236 unsigned long expect_match = (1 << config.expected_address_cnt) - 1; 243 unsigned long expect_match = (1 << config.expected_address_cnt) - 1;
237 unsigned long addr_match = (1 << n_addresses) - 1; 244 unsigned long addr_match = (1 << n_addresses) - 1;
238 245