Module: monitoring-plugins
 Branch: master
 Commit: 6b8c0bdf11f3a94ed85774932fdf90a9c882eeea
 Author: Oliver Skibbe <oliski...@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)

Reply via email to