[monitoring-plugins] Fix TLS/non-TLS send/recv logic

Lorenz Kästle git at monitoring-plugins.org
Thu Mar 13 15:20:13 CET 2025


 Module: monitoring-plugins
 Branch: master
 Commit: a693cc0aa3d79f85115be48bcd81c0ec371e78a0
 Author: Lorenz Kästle <12514511+RincewindsHat at users.noreply.github.com>
   Date: Thu Mar 13 12:24:45 2025 +0100
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=a693cc0a

Fix TLS/non-TLS send/recv logic

---

 plugins/check_tcp.c | 45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c
index d2ebc16d..8cd86460 100644
--- a/plugins/check_tcp.c
+++ b/plugins/check_tcp.c
@@ -43,20 +43,22 @@ const char *email = "devel at monitoring-plugins.org";
 #include <ctype.h>
 #include <sys/select.h>
 
-ssize_t my_recv(char *buf, size_t len) {
+ssize_t my_recv(int socket_descriptor, char *buf, size_t len, bool use_tls) {
 #ifdef HAVE_SSL
-	return np_net_ssl_read(buf, (int)len);
-#else
+	if (use_tls) {
+		return np_net_ssl_read(buf, (int)len);
+	}
+#endif
 	return read(socket_descriptor, buf, len);
-#endif // HAVE_SSL
 }
 
-ssize_t my_send(char *buf, size_t len) {
+ssize_t my_send(int socket_descriptor, char *buf, size_t len, bool use_tls) {
 #ifdef HAVE_SSL
-	return np_net_ssl_write(buf, (int)len);
-#else
+	if (use_tls) {
+		return np_net_ssl_write(buf, (int)len);
+	}
+#endif
 	return write(socket_descriptor, buf, len);
-#endif // HAVE_SSL
 }
 
 typedef struct {
@@ -302,7 +304,7 @@ int main(int argc, char **argv) {
 #endif /* HAVE_SSL */
 
 	if (config.send != NULL) { /* Something to send? */
-		my_send(config.send, strlen(config.send));
+		my_send(socket_descriptor, config.send, strlen(config.send), config.use_tls);
 	}
 
 	if (config.delay > 0) {
@@ -325,8 +327,8 @@ int main(int argc, char **argv) {
 
 	/* if(len) later on, we know we have a non-NULL response */
 	ssize_t len = 0;
-	char *status = NULL;
-	int match = -1;
+	char *received_buffer = NULL;
+	enum np_match_result match = NP_MATCH_NONE;
 	mp_subcheck expected_data_result = mp_subcheck_init();
 
 	if (config.server_expect_count) {
@@ -334,23 +336,24 @@ int main(int argc, char **argv) {
 		char buffer[MAXBUF];
 
 		/* watch for the expect string */
-		while ((received = my_recv(buffer, sizeof(buffer))) > 0) {
-			status = realloc(status, len + received + 1);
+		while ((received = my_recv(socket_descriptor, buffer, sizeof(buffer), config.use_tls)) > 0) {
+			received_buffer = realloc(received_buffer, len + received + 1);
 
-			if (status == NULL) {
+			if (received_buffer == NULL) {
 				die(STATE_UNKNOWN, _("Allocation failed"));
 			}
 
-			memcpy(&status[len], buffer, received);
+			memcpy(&received_buffer[len], buffer, received);
 			len += received;
-			status[len] = '\0';
+			received_buffer[len] = '\0';
 
 			/* stop reading if user-forced */
 			if (config.maxbytes && len >= config.maxbytes) {
 				break;
 			}
 
-			if ((match = np_expect_match(status, config.server_expect, config.server_expect_count, config.match_flags)) != NP_MATCH_RETRY) {
+			if ((match = np_expect_match(received_buffer, config.server_expect, config.server_expect_count, config.match_flags)) !=
+				NP_MATCH_RETRY) {
 				break;
 			}
 
@@ -382,16 +385,16 @@ int main(int argc, char **argv) {
 
 		/* print raw output if we're debugging */
 		if (verbosity > 0) {
-			printf("received %d bytes from host\n#-raw-recv-------#\n%s\n#-raw-recv-------#\n", (int)len + 1, status);
+			printf("received %d bytes from host\n#-raw-recv-------#\n%s\n#-raw-recv-------#\n", (int)len + 1, received_buffer);
 		}
 		/* strip whitespace from end of output */
-		while (--len > 0 && isspace(status[len])) {
-			status[len] = '\0';
+		while (--len > 0 && isspace(received_buffer[len])) {
+			received_buffer[len] = '\0';
 		}
 	}
 
 	if (config.quit != NULL) {
-		my_send(config.quit, strlen(config.quit));
+		my_send(socket_descriptor, config.quit, strlen(config.quit), config.use_tls);
 	}
 
 	if (socket_descriptor) {



More information about the Commits mailing list