From 3c81964713e4114d7f40f95e9373c24b596d1efd Mon Sep 17 00:00:00 2001
From: Karl DeBisschop <kdebisschop@users.sourceforge.net>
Date: Mon, 1 Mar 2004 12:27:19 +0000
Subject: 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

diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c
index 7bd48d1..55ce898 100644
--- a/plugins/check_tcp.c
+++ b/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);
diff --git a/plugins/netutils.c b/plugins/netutils.c
index 5017eb9..1fa69a3 100644
--- a/plugins/netutils.c
+++ b/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;
-- 
cgit v0.10-9-g596f

