diff options
author | Oliver Skibbe <oliskibbe@gmail.com> | 2015-10-08 11:09:25 +0200 |
---|---|---|
committer | Oliver Skibbe <oliskibbe@gmail.com> | 2015-10-08 11:09:25 +0200 |
commit | 6b8c0bdf11f3a94ed85774932fdf90a9c882eeea (patch) | |
tree | 9652c062bb8a4cabc9e64b1db26d90ba1cfc7f83 /plugins | |
parent | b6de2341f8683d51b8723b772e4753507b1607f5 (diff) | |
download | monitoring-plugins-6b8c0bdf11f3a94ed85774932fdf90a9c882eeea.tar.gz |
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
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_smtp.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c index 1996c6d3..a1c5f7ef 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c | |||
@@ -128,6 +128,7 @@ main (int argc, char **argv) | |||
128 | char *cmd_str = NULL; | 128 | char *cmd_str = NULL; |
129 | char *helocmd = NULL; | 129 | char *helocmd = NULL; |
130 | char *error_msg = ""; | 130 | char *error_msg = ""; |
131 | char *server_response = NULL; | ||
131 | struct timeval tv; | 132 | struct timeval tv; |
132 | 133 | ||
133 | /* Catch pipe errors in read/write - sometimes occurs when writing QUIT */ | 134 | /* Catch pipe errors in read/write - sometimes occurs when writing QUIT */ |
@@ -189,21 +190,9 @@ main (int argc, char **argv) | |||
189 | printf (_("recv() failed\n")); | 190 | printf (_("recv() failed\n")); |
190 | return STATE_WARNING; | 191 | return STATE_WARNING; |
191 | } | 192 | } |
192 | else { | 193 | |
193 | if (verbose) | 194 | /* save connect return (220 hostname ..) for later use */ |
194 | printf ("%s", buffer); | 195 | xasprintf(&server_response, "%s", buffer); |
195 | /* strip the buffer of carriage returns */ | ||
196 | strip (buffer); | ||
197 | /* make sure we find the response we are looking for */ | ||
198 | if (!strstr (buffer, server_expect)) { | ||
199 | if (server_port == SMTP_PORT) | ||
200 | printf (_("Invalid SMTP response received from host: %s\n"), buffer); | ||
201 | else | ||
202 | printf (_("Invalid SMTP response received from host on port %d: %s\n"), | ||
203 | server_port, buffer); | ||
204 | return STATE_WARNING; | ||
205 | } | ||
206 | } | ||
207 | 196 | ||
208 | /* send the HELO/EHLO command */ | 197 | /* send the HELO/EHLO command */ |
209 | send(sd, helocmd, strlen(helocmd), 0); | 198 | send(sd, helocmd, strlen(helocmd), 0); |
@@ -284,6 +273,24 @@ main (int argc, char **argv) | |||
284 | } | 273 | } |
285 | #endif | 274 | #endif |
286 | 275 | ||
276 | if (verbose) | ||
277 | printf ("%s", buffer); | ||
278 | |||
279 | /* save buffer for later use */ | ||
280 | xasprintf(&server_response, "%s%s", server_response, buffer); | ||
281 | /* strip the buffer of carriage returns */ | ||
282 | strip (server_response); | ||
283 | |||
284 | /* make sure we find the droids we are looking for */ | ||
285 | if (!strstr (server_response, server_expect)) { | ||
286 | if (server_port == SMTP_PORT) | ||
287 | printf (_("Invalid SMTP response received from host: %s\n"), server_response); | ||
288 | else | ||
289 | printf (_("Invalid SMTP response received from host on port %d: %s\n"), | ||
290 | server_port, server_response); | ||
291 | return STATE_WARNING; | ||
292 | } | ||
293 | |||
287 | if (send_mail_from) { | 294 | if (send_mail_from) { |
288 | my_send(cmd_str, strlen(cmd_str)); | 295 | my_send(cmd_str, strlen(cmd_str)); |
289 | if (recvlines(buffer, MAX_INPUT_BUFFER) >= 1 && verbose) | 296 | if (recvlines(buffer, MAX_INPUT_BUFFER) >= 1 && verbose) |