[monitoring-plugins] check_smtp: extended support for expect option

Oliver Skibbe git at monitoring-plugins.org
Sat Nov 19 16:40:11 CET 2016


 Module: monitoring-plugins
 Branch: master
 Commit: 6b8c0bdf11f3a94ed85774932fdf90a9c882eeea
 Author: Oliver Skibbe <oliskibbe at gmail.com>
   Date: Thu Oct  8 11:09:25 2015 +0200
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=6b8c0bd

check_smtp: extended support for expect option

  expect option (-e) supported only first response, so checking for
  any other response like 250-xxx would never match. This fix stores
  return of relevant buffer

  closes #1381

---

 plugins/check_smtp.c | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c
index 1996c6d..a1c5f7e 100644
--- a/plugins/check_smtp.c
+++ b/plugins/check_smtp.c
@@ -128,6 +128,7 @@ main (int argc, char **argv)
 	char *cmd_str = NULL;
 	char *helocmd = NULL;
 	char *error_msg = "";
+	char *server_response = NULL;
 	struct timeval tv;
 
 	/* Catch pipe errors in read/write - sometimes occurs when writing QUIT */
@@ -189,21 +190,9 @@ main (int argc, char **argv)
 			printf (_("recv() failed\n"));
 			return STATE_WARNING;
 		}
-		else {
-			if (verbose)
-				printf ("%s", buffer);
-			/* strip the buffer of carriage returns */
-			strip (buffer);
-			/* make sure we find the response we are looking for */
-			if (!strstr (buffer, server_expect)) {
-				if (server_port == SMTP_PORT)
-					printf (_("Invalid SMTP response received from host: %s\n"), buffer);
-				else
-					printf (_("Invalid SMTP response received from host on port %d: %s\n"),
-									server_port, buffer);
-				return STATE_WARNING;
-			}
-		}
+
+		/* save connect return (220 hostname ..) for later use */
+		xasprintf(&server_response, "%s", buffer);
 
 		/* send the HELO/EHLO command */
 		send(sd, helocmd, strlen(helocmd), 0);
@@ -284,6 +273,24 @@ main (int argc, char **argv)
 		}
 #endif
 
+		if (verbose)
+			printf ("%s", buffer);
+
+		/* save buffer for later use */
+		xasprintf(&server_response, "%s%s", server_response, buffer);
+		/* strip the buffer of carriage returns */
+		strip (server_response);
+
+		/* make sure we find the droids we are looking for */
+		if (!strstr (server_response, server_expect)) {
+			if (server_port == SMTP_PORT)
+				printf (_("Invalid SMTP response received from host: %s\n"), server_response);
+			else
+				printf (_("Invalid SMTP response received from host on port %d: %s\n"),
+										server_port, server_response);
+			return STATE_WARNING;
+		}
+
 		if (send_mail_from) {
 		  my_send(cmd_str, strlen(cmd_str));
 		  if (recvlines(buffer, MAX_INPUT_BUFFER) >= 1 && verbose)



More information about the Commits mailing list