summaryrefslogtreecommitdiffstats
path: root/plugins/check_smtp.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/check_smtp.c')
-rw-r--r--plugins/check_smtp.c63
1 files changed, 36 insertions, 27 deletions
diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c
index fc0ae2c4..986c3e18 100644
--- a/plugins/check_smtp.c
+++ b/plugins/check_smtp.c
@@ -40,7 +40,7 @@ const char *email = "devel@monitoring-plugins.org";
40#include <ctype.h> 40#include <ctype.h>
41 41
42#ifdef HAVE_SSL 42#ifdef HAVE_SSL
43int check_cert = FALSE; 43bool check_cert = false;
44int days_till_exp_warn, days_till_exp_crit; 44int days_till_exp_warn, days_till_exp_crit;
45# define my_recv(buf, len) (((use_starttls || use_ssl) && ssl_established) ? np_net_ssl_read(buf, len) : read(sd, buf, len)) 45# define my_recv(buf, len) (((use_starttls || use_ssl) && ssl_established) ? np_net_ssl_read(buf, len) : read(sd, buf, len))
46# define my_send(buf, len) (((use_starttls || use_ssl) && ssl_established) ? np_net_ssl_write(buf, len) : send(sd, buf, len, 0)) 46# define my_send(buf, len) (((use_starttls || use_ssl) && ssl_established) ? np_net_ssl_write(buf, len) : send(sd, buf, len, 0))
@@ -100,17 +100,17 @@ char *authtype = NULL;
100char *authuser = NULL; 100char *authuser = NULL;
101char *authpass = NULL; 101char *authpass = NULL;
102double warning_time = 0; 102double warning_time = 0;
103int check_warning_time = FALSE; 103bool check_warning_time = false;
104double critical_time = 0; 104double critical_time = 0;
105int check_critical_time = FALSE; 105bool check_critical_time = false;
106int verbose = 0; 106int verbose = 0;
107int use_ssl = FALSE; 107bool use_ssl = false;
108int use_starttls = FALSE; 108bool use_starttls = false;
109int use_sni = FALSE; 109bool use_sni = false;
110short use_proxy_prefix = FALSE; 110bool use_proxy_prefix = false;
111short use_ehlo = FALSE; 111bool use_ehlo = false;
112short use_lhlo = FALSE; 112bool use_lhlo = false;
113short ssl_established = 0; 113bool ssl_established = false;
114char *localhostname = NULL; 114char *localhostname = NULL;
115int sd; 115int sd;
116char buffer[MAX_INPUT_BUFFER]; 116char buffer[MAX_INPUT_BUFFER];
@@ -118,13 +118,13 @@ enum {
118 TCP_PROTOCOL = 1, 118 TCP_PROTOCOL = 1,
119 UDP_PROTOCOL = 2, 119 UDP_PROTOCOL = 2,
120}; 120};
121int ignore_send_quit_failure = FALSE; 121bool ignore_send_quit_failure = false;
122 122
123 123
124int 124int
125main (int argc, char **argv) 125main (int argc, char **argv)
126{ 126{
127 short supports_tls=FALSE; 127 bool supports_tls = false;
128 int n = 0; 128 int n = 0;
129 double elapsed_time; 129 double elapsed_time;
130 long microsec; 130 long microsec;
@@ -230,7 +230,7 @@ main (int argc, char **argv)
230 } else if(use_ehlo || use_lhlo){ 230 } else if(use_ehlo || use_lhlo){
231 if(strstr(buffer, "250 STARTTLS") != NULL || 231 if(strstr(buffer, "250 STARTTLS") != NULL ||
232 strstr(buffer, "250-STARTTLS") != NULL){ 232 strstr(buffer, "250-STARTTLS") != NULL){
233 supports_tls=TRUE; 233 supports_tls=true;
234 } 234 }
235 } 235 }
236 236
@@ -466,7 +466,7 @@ main (int argc, char **argv)
466 fperfdata ("time", elapsed_time, "s", 466 fperfdata ("time", elapsed_time, "s",
467 (int)check_warning_time, warning_time, 467 (int)check_warning_time, warning_time,
468 (int)check_critical_time, critical_time, 468 (int)check_critical_time, critical_time,
469 TRUE, 0, FALSE, 0)); 469 true, 0, false, 0));
470 470
471 return result; 471 return result;
472} 472}
@@ -480,6 +480,8 @@ process_arguments (int argc, char **argv)
480 int c; 480 int c;
481 char* temp; 481 char* temp;
482 482
483 bool implicit_tls = false;
484
483 enum { 485 enum {
484 SNI_OPTION 486 SNI_OPTION
485 }; 487 };
@@ -560,7 +562,7 @@ process_arguments (int argc, char **argv)
560 break; 562 break;
561 case 'A': 563 case 'A':
562 authtype = optarg; 564 authtype = optarg;
563 use_ehlo = TRUE; 565 use_ehlo = true;
564 break; 566 break;
565 case 'U': 567 case 'U':
566 authuser = optarg; 568 authuser = optarg;
@@ -600,7 +602,7 @@ process_arguments (int argc, char **argv)
600 usage4 (_("Critical time must be a positive")); 602 usage4 (_("Critical time must be a positive"));
601 else { 603 else {
602 critical_time = strtod (optarg, NULL); 604 critical_time = strtod (optarg, NULL);
603 check_critical_time = TRUE; 605 check_critical_time = true;
604 } 606 }
605 break; 607 break;
606 case 'w': /* warning time threshold */ 608 case 'w': /* warning time threshold */
@@ -608,14 +610,14 @@ process_arguments (int argc, char **argv)
608 usage4 (_("Warning time must be a positive")); 610 usage4 (_("Warning time must be a positive"));
609 else { 611 else {
610 warning_time = strtod (optarg, NULL); 612 warning_time = strtod (optarg, NULL);
611 check_warning_time = TRUE; 613 check_warning_time = true;
612 } 614 }
613 break; 615 break;
614 case 'v': /* verbose */ 616 case 'v': /* verbose */
615 verbose++; 617 verbose++;
616 break; 618 break;
617 case 'q': 619 case 'q':
618 ignore_send_quit_failure++; /* ignore problem sending QUIT */ 620 ignore_send_quit_failure = true; /* ignore problem sending QUIT */
619 break; 621 break;
620 case 't': /* timeout */ 622 case 't': /* timeout */
621 if (is_intnonneg (optarg)) { 623 if (is_intnonneg (optarg)) {
@@ -645,33 +647,35 @@ process_arguments (int argc, char **argv)
645 usage2 ("Invalid certificate expiration period", optarg); 647 usage2 ("Invalid certificate expiration period", optarg);
646 days_till_exp_warn = atoi (optarg); 648 days_till_exp_warn = atoi (optarg);
647 } 649 }
648 check_cert = TRUE; 650 check_cert = true;
649 ignore_send_quit_failure = TRUE; 651 ignore_send_quit_failure = true;
650#else 652#else
651 usage (_("SSL support not available - install OpenSSL and recompile")); 653 usage (_("SSL support not available - install OpenSSL and recompile"));
652#endif 654#endif
655 implicit_tls = true;
656 // fallthrough
653 case 's': 657 case 's':
654 /* ssl */ 658 /* ssl */
655 use_ssl = TRUE; 659 use_ssl = true;
656 server_port = SMTPS_PORT; 660 server_port = SMTPS_PORT;
657 break; 661 break;
658 case 'S': 662 case 'S':
659 /* starttls */ 663 /* starttls */
660 use_starttls = TRUE; 664 use_starttls = true;
661 use_ehlo = TRUE; 665 use_ehlo = true;
662 break; 666 break;
663 case SNI_OPTION: 667 case SNI_OPTION:
664#ifdef HAVE_SSL 668#ifdef HAVE_SSL
665 use_sni = TRUE; 669 use_sni = true;
666#else 670#else
667 usage (_("SSL support not available - install OpenSSL and recompile")); 671 usage (_("SSL support not available - install OpenSSL and recompile"));
668#endif 672#endif
669 break; 673 break;
670 case 'r': 674 case 'r':
671 use_proxy_prefix = TRUE; 675 use_proxy_prefix = true;
672 break; 676 break;
673 case 'L': 677 case 'L':
674 use_lhlo = TRUE; 678 use_lhlo = true;
675 break; 679 break;
676 case '4': 680 case '4':
677 address_family = AF_INET; 681 address_family = AF_INET;
@@ -717,7 +721,12 @@ process_arguments (int argc, char **argv)
717 from_arg = strdup(" "); 721 from_arg = strdup(" ");
718 722
719 if (use_starttls && use_ssl) { 723 if (use_starttls && use_ssl) {
720 usage4 (_("Set either -s/--ssl/--tls or -S/--starttls")); 724 if (implicit_tls) {
725 use_ssl = false;
726 server_port = SMTP_PORT;
727 } else {
728 usage4 (_("Set either -s/--ssl/--tls or -S/--starttls"));
729 }
721 } 730 }
722 731
723 if (server_port_option != 0) { 732 if (server_port_option != 0) {