diff options
| author | Oliver Skibbe <oliskibbe@gmail.com> | 2016-11-19 16:38:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-11-19 16:38:07 +0100 |
| commit | 6438fec7888ffca6d435abffd5283bcc1a9814b5 (patch) | |
| tree | 2fb2cfc85f84ba1c9181dbc73c105e9eb4dd31fb | |
| parent | 099bd86f1c949b0db05c5c24b2538c8e3370d290 (diff) | |
| parent | 6b8c0bdf11f3a94ed85774932fdf90a9c882eeea (diff) | |
| download | monitoring-plugins-6438fec7888ffca6d435abffd5283bcc1a9814b5.tar.gz | |
Merge pull request #1382 from riskersen/smtp_tls_expec
check_smtp: extended support for expect option
| -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 587a7245..6e0e22ed 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c | |||
| @@ -124,6 +124,7 @@ main (int argc, char **argv) | |||
| 124 | char *cmd_str = NULL; | 124 | char *cmd_str = NULL; |
| 125 | char *helocmd = NULL; | 125 | char *helocmd = NULL; |
| 126 | char *error_msg = ""; | 126 | char *error_msg = ""; |
| 127 | char *server_response = NULL; | ||
| 127 | struct timeval tv; | 128 | struct timeval tv; |
| 128 | 129 | ||
| 129 | /* Catch pipe errors in read/write - sometimes occurs when writing QUIT */ | 130 | /* Catch pipe errors in read/write - sometimes occurs when writing QUIT */ |
| @@ -185,21 +186,9 @@ main (int argc, char **argv) | |||
| 185 | printf (_("recv() failed\n")); | 186 | printf (_("recv() failed\n")); |
| 186 | return STATE_WARNING; | 187 | return STATE_WARNING; |
| 187 | } | 188 | } |
| 188 | else { | 189 | |
| 189 | if (verbose) | 190 | /* save connect return (220 hostname ..) for later use */ |
| 190 | printf ("%s", buffer); | 191 | xasprintf(&server_response, "%s", buffer); |
| 191 | /* strip the buffer of carriage returns */ | ||
| 192 | strip (buffer); | ||
| 193 | /* make sure we find the response we are looking for */ | ||
| 194 | if (!strstr (buffer, server_expect)) { | ||
| 195 | if (server_port == SMTP_PORT) | ||
| 196 | printf (_("Invalid SMTP response received from host: %s\n"), buffer); | ||
| 197 | else | ||
| 198 | printf (_("Invalid SMTP response received from host on port %d: %s\n"), | ||
| 199 | server_port, buffer); | ||
| 200 | return STATE_WARNING; | ||
| 201 | } | ||
| 202 | } | ||
| 203 | 192 | ||
| 204 | /* send the HELO/EHLO command */ | 193 | /* send the HELO/EHLO command */ |
| 205 | send(sd, helocmd, strlen(helocmd), 0); | 194 | send(sd, helocmd, strlen(helocmd), 0); |
| @@ -280,6 +269,24 @@ main (int argc, char **argv) | |||
| 280 | } | 269 | } |
| 281 | #endif | 270 | #endif |
| 282 | 271 | ||
| 272 | if (verbose) | ||
| 273 | printf ("%s", buffer); | ||
| 274 | |||
| 275 | /* save buffer for later use */ | ||
| 276 | xasprintf(&server_response, "%s%s", server_response, buffer); | ||
| 277 | /* strip the buffer of carriage returns */ | ||
| 278 | strip (server_response); | ||
| 279 | |||
| 280 | /* make sure we find the droids we are looking for */ | ||
| 281 | if (!strstr (server_response, server_expect)) { | ||
| 282 | if (server_port == SMTP_PORT) | ||
| 283 | printf (_("Invalid SMTP response received from host: %s\n"), server_response); | ||
| 284 | else | ||
| 285 | printf (_("Invalid SMTP response received from host on port %d: %s\n"), | ||
| 286 | server_port, server_response); | ||
| 287 | return STATE_WARNING; | ||
| 288 | } | ||
| 289 | |||
| 283 | if (send_mail_from) { | 290 | if (send_mail_from) { |
| 284 | my_send(cmd_str, strlen(cmd_str)); | 291 | my_send(cmd_str, strlen(cmd_str)); |
| 285 | if (recvlines(buffer, MAX_INPUT_BUFFER) >= 1 && verbose) | 292 | if (recvlines(buffer, MAX_INPUT_BUFFER) >= 1 && verbose) |
