Ver Fonte

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 há 23 anos atrás
pai
commit
cc032457cf
1 ficheiros alterados com 16 adições e 5 exclusões
  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 */
 				/* Strip leading spaces */
 				for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++)
 				for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++)
 					/* NOOP */;
 					/* NOOP */;
-				address = strscpy (address, temp_buffer);
+				address = strdup (temp_buffer);
 				strip (address);
 				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;
 				result = STATE_OK;
 			}
 			}
 			else {
 			else {
-				output = strscpy (output, "Unknown error (plugin)");
+				output = strdup ("Unknown error (plugin)");
 				result = STATE_WARNING;
 				result = STATE_WARNING;
 			}
 			}
 
 
@@ -179,11 +183,18 @@ main (int argc, char **argv)
 			output = strscpy (output, "nslookup returned error status");
 			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 */
 	/* compare to expected address */
 	if (result == STATE_OK && match_expected_address && strcmp(address, 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);
 	elapsed_time = delta_time (tv);