From 6b8c0bdf11f3a94ed85774932fdf90a9c882eeea Mon Sep 17 00:00:00 2001 From: Oliver Skibbe Date: Thu, 8 Oct 2015 11:09:25 +0200 Subject: 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 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) -- cgit v0.10-9-g596f