Ver Fonte

check_tcp was returning uninitialized string with user-defined refused outcome

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@833 f882894a-f735-0410-b71e-b25c423dba1c
Karl DeBisschop há 22 anos atrás
pai
commit
3c81964713
2 ficheiros alterados com 18 adições e 9 exclusões
  1. 2 2
      plugins/check_tcp.c
  2. 16 7
      plugins/netutils.c

+ 2 - 2
plugins/check_tcp.c

@@ -206,6 +206,7 @@ main (int argc, char **argv)
 	server_port = PORT;
 	server_send = SEND;
 	server_quit = QUIT;
+	status = strdup ("");
 
 	if (process_arguments (argc, argv) == ERROR)
 		usage (_("Could not parse arguments\n"));
@@ -259,7 +260,6 @@ main (int argc, char **argv)
 
 		buffer = malloc (MAXBUF);
 		memset (buffer, '\0', MAXBUF);
-		status = strdup ("");
 		/* watch for the expect string */
 		while ((i = my_recv ()) > 0) {
 			buffer[i] = '\0';
@@ -271,7 +271,7 @@ main (int argc, char **argv)
 		}
 
 		/* return a CRITICAL status if we couldn't read any data */
-		if (status == NULL)
+		if (strlen(status) == 0)
 			die (STATE_CRITICAL, _("No data received from host\n"));
 
 		strip (status);

+ 16 - 7
plugins/netutils.c

@@ -252,11 +252,7 @@ my_connect (const char *host_name, int port, int *sd, int proto)
 			if (result < 0) {
 				switch (errno) {
 				case ECONNREFUSED:
-					switch (econn_refuse_state) {
-					case STATE_OK:
-					case STATE_WARNING:
-						was_refused = TRUE;
-					}
+					was_refused = TRUE;
 					break;
 				}
 			}
@@ -269,8 +265,21 @@ my_connect (const char *host_name, int port, int *sd, int proto)
 
 	if (result == 0)
 		return STATE_OK;
-	else if (was_refused)
-		return econn_refuse_state;
+	else if (was_refused) {
+		switch (econn_refuse_state) { /* a user-defined expected outcome */
+		case STATE_OK:       
+		case STATE_WARNING:  /* user wants WARN or OK on refusal */
+			return econn_refuse_state;
+			break;
+		case STATE_CRITICAL: /* user did not set econn_refuse_state */
+			printf ("%s\n", strerror(errno));
+			return econn_refuse_state;
+			break;
+		default: /* it's a logic error if we do not end up in STATE_(OK|WARNING|CRITICAL) */
+			return STATE_UNKNOWN;
+			break;
+		}
+	}
 	else {
 		printf ("%s\n", strerror(errno));
 		return STATE_CRITICAL;