[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