Code

first revised patch failed to trap the "break" in while()
authorKarl DeBisschop <kdebisschop@users.sourceforge.net>
Sat, 31 May 2003 14:39:21 +0000 (14:39 +0000)
committerKarl DeBisschop <kdebisschop@users.sourceforge.net>
Sat, 31 May 2003 14:39:21 +0000 (14:39 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@526 f882894a-f735-0410-b71e-b25c423dba1c

plugins/check_dns.c

index 2765f64379124148d34d6e935c199721aa8cb0ac..f1071d8e5d1f4b75aa4afc470418521a4237ffaa 100644 (file)
@@ -139,12 +139,16 @@ main (int argc, char **argv)
                                /* Strip leading spaces */
                                for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++)
                                        /* NOOP */;
-                               address = strscpy (address, temp_buffer);
+                               address = strdup (temp_buffer);
                                strip (address);
+                               if (address==NULL || strlen(address)==0)
+                                       terminate (STATE_CRITICAL,
+                                                  "DNS CRITICAL - '%s' returned empty host name string\n",
+                                                  NSLOOKUP_COMMAND);
                                result = STATE_OK;
                        }
                        else {
-                               output = strscpy (output, "Unknown error (plugin)");
+                               output = strdup ("Unknown error (plugin)");
                                result = STATE_WARNING;
                        }
 
@@ -179,11 +183,18 @@ main (int argc, char **argv)
                        output = strscpy (output, "nslookup returned error status");
        }
 
+       /* If we got here, we should have an address string, 
+          and we can segfault if we do not */
+       if (address==NULL || strlen(address)==0)
+               terminate (STATE_CRITICAL,
+                          "DNS CRITICAL - '%s' output parsing exited with no address\n",
+                          NSLOOKUP_COMMAND);
+
        /* compare to expected address */
        if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) {
-               result = STATE_CRITICAL;
-               asprintf(&output, "expected %s but got %s", expected_address, address);
-               }
+               result = STATE_CRITICAL;
+               asprintf(&output, "expected %s but got %s", expected_address, address);
+       }
        
        elapsed_time = delta_time (tv);