diff options
Diffstat (limited to 'plugins/check_dns.c')
| -rw-r--r-- | plugins/check_dns.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/plugins/check_dns.c b/plugins/check_dns.c index 2765f643..f1071d8e 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c | |||
| @@ -139,12 +139,16 @@ main (int argc, char **argv) | |||
| 139 | /* Strip leading spaces */ | 139 | /* Strip leading spaces */ |
| 140 | for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++) | 140 | for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++) |
| 141 | /* NOOP */; | 141 | /* NOOP */; |
| 142 | address = strscpy (address, temp_buffer); | 142 | address = strdup (temp_buffer); |
| 143 | strip (address); | 143 | strip (address); |
| 144 | if (address==NULL || strlen(address)==0) | ||
| 145 | terminate (STATE_CRITICAL, | ||
| 146 | "DNS CRITICAL - '%s' returned empty host name string\n", | ||
| 147 | NSLOOKUP_COMMAND); | ||
| 144 | result = STATE_OK; | 148 | result = STATE_OK; |
| 145 | } | 149 | } |
| 146 | else { | 150 | else { |
| 147 | output = strscpy (output, "Unknown error (plugin)"); | 151 | output = strdup ("Unknown error (plugin)"); |
| 148 | result = STATE_WARNING; | 152 | result = STATE_WARNING; |
| 149 | } | 153 | } |
| 150 | 154 | ||
| @@ -179,11 +183,18 @@ main (int argc, char **argv) | |||
| 179 | output = strscpy (output, "nslookup returned error status"); | 183 | output = strscpy (output, "nslookup returned error status"); |
| 180 | } | 184 | } |
| 181 | 185 | ||
| 186 | /* If we got here, we should have an address string, | ||
| 187 | and we can segfault if we do not */ | ||
| 188 | if (address==NULL || strlen(address)==0) | ||
| 189 | terminate (STATE_CRITICAL, | ||
| 190 | "DNS CRITICAL - '%s' output parsing exited with no address\n", | ||
| 191 | NSLOOKUP_COMMAND); | ||
| 192 | |||
| 182 | /* compare to expected address */ | 193 | /* compare to expected address */ |
| 183 | if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) { | 194 | if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) { |
| 184 | result = STATE_CRITICAL; | 195 | result = STATE_CRITICAL; |
| 185 | asprintf(&output, "expected %s but got %s", expected_address, address); | 196 | asprintf(&output, "expected %s but got %s", expected_address, address); |
| 186 | } | 197 | } |
| 187 | 198 | ||
| 188 | elapsed_time = delta_time (tv); | 199 | elapsed_time = delta_time (tv); |
| 189 | 200 | ||
