Explorar o código

first revised patch failed to trap the "break" in while()

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@526 f882894a-f735-0410-b71e-b25c423dba1c
Karl DeBisschop %!s(int64=23) %!d(string=hai) anos
pai
achega
cc032457cf
Modificáronse 1 ficheiros con 16 adicións e 5 borrados
  1. 16 5
      plugins/check_dns.c

+ 16 - 5
plugins/check_dns.c

@@ -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);