diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_curl.c | 256 | ||||
-rw-r--r-- | plugins/check_dbi.c | 14 | ||||
-rw-r--r-- | plugins/check_fping.c | 1 | ||||
-rw-r--r-- | plugins/check_hpjd.c | 1 | ||||
-rw-r--r-- | plugins/check_http.c | 1 | ||||
-rw-r--r-- | plugins/check_ntp_peer.c | 6 | ||||
-rw-r--r-- | plugins/check_smtp.c | 1 | ||||
-rw-r--r-- | plugins/check_snmp.c | 1 | ||||
-rw-r--r-- | plugins/check_ups.c | 14 |
9 files changed, 212 insertions, 83 deletions
diff --git a/plugins/check_curl.c b/plugins/check_curl.c index 100a97aa..d0871c48 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c | |||
@@ -244,7 +244,7 @@ void curlhelp_freewritebuffer (curlhelp_write_curlbuf*); | |||
244 | int curlhelp_initreadbuffer (curlhelp_read_curlbuf *, const char *, size_t); | 244 | int curlhelp_initreadbuffer (curlhelp_read_curlbuf *, const char *, size_t); |
245 | int curlhelp_buffer_read_callback (void *, size_t , size_t , void *); | 245 | int curlhelp_buffer_read_callback (void *, size_t , size_t , void *); |
246 | void curlhelp_freereadbuffer (curlhelp_read_curlbuf *); | 246 | void curlhelp_freereadbuffer (curlhelp_read_curlbuf *); |
247 | curlhelp_ssl_library curlhelp_get_ssl_library (CURL*); | 247 | curlhelp_ssl_library curlhelp_get_ssl_library (); |
248 | const char* curlhelp_get_ssl_library_string (curlhelp_ssl_library); | 248 | const char* curlhelp_get_ssl_library_string (curlhelp_ssl_library); |
249 | int net_noopenssl_check_certificate (cert_ptr_union*, int, int); | 249 | int net_noopenssl_check_certificate (cert_ptr_union*, int, int); |
250 | 250 | ||
@@ -297,6 +297,7 @@ main (int argc, char **argv) | |||
297 | 297 | ||
298 | int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) | 298 | int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) |
299 | { | 299 | { |
300 | (void) preverify_ok; | ||
300 | /* TODO: we get all certificates of the chain, so which ones | 301 | /* TODO: we get all certificates of the chain, so which ones |
301 | * should we test? | 302 | * should we test? |
302 | * TODO: is the last certificate always the server certificate? | 303 | * TODO: is the last certificate always the server certificate? |
@@ -321,6 +322,8 @@ int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) | |||
321 | 322 | ||
322 | CURLcode sslctxfun(CURL *curl, SSL_CTX *sslctx, void *parm) | 323 | CURLcode sslctxfun(CURL *curl, SSL_CTX *sslctx, void *parm) |
323 | { | 324 | { |
325 | (void) curl; // ignore unused parameter | ||
326 | (void) parm; // ignore unused parameter | ||
324 | SSL_CTX_set_verify(sslctx, SSL_VERIFY_PEER, verify_callback); | 327 | SSL_CTX_set_verify(sslctx, SSL_VERIFY_PEER, verify_callback); |
325 | 328 | ||
326 | return CURLE_OK; | 329 | return CURLE_OK; |
@@ -375,8 +378,12 @@ void | |||
375 | handle_curl_option_return_code (CURLcode res, const char* option) | 378 | handle_curl_option_return_code (CURLcode res, const char* option) |
376 | { | 379 | { |
377 | if (res != CURLE_OK) { | 380 | if (res != CURLE_OK) { |
378 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Error while setting cURL option '%s': cURL returned %d - %s"), | 381 | snprintf (msg, |
379 | option, res, curl_easy_strerror(res)); | 382 | DEFAULT_BUFFER_SIZE, |
383 | _("Error while setting cURL option '%s': cURL returned %d - %s"), | ||
384 | option, | ||
385 | res, | ||
386 | curl_easy_strerror(res)); | ||
380 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 387 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); |
381 | } | 388 | } |
382 | } | 389 | } |
@@ -516,9 +523,13 @@ check_http (void) | |||
516 | // fill dns resolve cache to make curl connect to the given server_address instead of the host_name, only required for ssl, because we use the host_name later on to make SNI happy | 523 | // fill dns resolve cache to make curl connect to the given server_address instead of the host_name, only required for ssl, because we use the host_name later on to make SNI happy |
517 | if(use_ssl && host_name != NULL) { | 524 | if(use_ssl && host_name != NULL) { |
518 | if ( (res=lookup_host (server_address, addrstr, DEFAULT_BUFFER_SIZE/2)) != 0) { | 525 | if ( (res=lookup_host (server_address, addrstr, DEFAULT_BUFFER_SIZE/2)) != 0) { |
519 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Unable to lookup IP address for '%s': getaddrinfo returned %d - %s"), | 526 | snprintf (msg, |
520 | server_address, res, gai_strerror (res)); | 527 | DEFAULT_BUFFER_SIZE, |
521 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 528 | _("Unable to lookup IP address for '%s': getaddrinfo returned %d - %s"), |
529 | server_address, | ||
530 | res, | ||
531 | gai_strerror (res)); | ||
532 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
522 | } | 533 | } |
523 | snprintf (dnscache, DEFAULT_BUFFER_SIZE, "%s:%d:%s", host_name, server_port, addrstr); | 534 | snprintf (dnscache, DEFAULT_BUFFER_SIZE, "%s:%d:%s", host_name, server_port, addrstr); |
524 | host = curl_slist_append(NULL, dnscache); | 535 | host = curl_slist_append(NULL, dnscache); |
@@ -646,7 +657,7 @@ check_http (void) | |||
646 | } | 657 | } |
647 | 658 | ||
648 | /* detect SSL library used by libcurl */ | 659 | /* detect SSL library used by libcurl */ |
649 | ssl_library = curlhelp_get_ssl_library (curl); | 660 | ssl_library = curlhelp_get_ssl_library (); |
650 | 661 | ||
651 | /* try hard to get a stack of certificates to verify against */ | 662 | /* try hard to get a stack of certificates to verify against */ |
652 | if (check_cert) { | 663 | if (check_cert) { |
@@ -816,9 +827,13 @@ check_http (void) | |||
816 | 827 | ||
817 | /* Curl errors, result in critical Nagios state */ | 828 | /* Curl errors, result in critical Nagios state */ |
818 | if (res != CURLE_OK) { | 829 | if (res != CURLE_OK) { |
819 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: cURL returned %d - %s"), | 830 | snprintf (msg, |
820 | server_port, res, errbuf[0] ? errbuf : curl_easy_strerror(res)); | 831 | DEFAULT_BUFFER_SIZE, |
821 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 832 | _("Invalid HTTP response received from host on port %d: cURL returned %d - %s"), |
833 | server_port, | ||
834 | res, | ||
835 | errbuf[0] ? errbuf : curl_easy_strerror(res)); | ||
836 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
822 | } | 837 | } |
823 | 838 | ||
824 | /* certificate checks */ | 839 | /* certificate checks */ |
@@ -861,15 +876,19 @@ check_http (void) | |||
861 | } | 876 | } |
862 | GOT_FIRST_CERT: | 877 | GOT_FIRST_CERT: |
863 | if (!raw_cert) { | 878 | if (!raw_cert) { |
864 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot retrieve certificates from CERTINFO information - certificate data was empty")); | 879 | snprintf (msg, |
865 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 880 | DEFAULT_BUFFER_SIZE, |
881 | _("Cannot retrieve certificates from CERTINFO information - certificate data was empty")); | ||
882 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
866 | } | 883 | } |
867 | BIO* cert_BIO = BIO_new (BIO_s_mem()); | 884 | BIO* cert_BIO = BIO_new (BIO_s_mem()); |
868 | BIO_write (cert_BIO, raw_cert, strlen(raw_cert)); | 885 | BIO_write (cert_BIO, raw_cert, strlen(raw_cert)); |
869 | cert = PEM_read_bio_X509 (cert_BIO, NULL, NULL, NULL); | 886 | cert = PEM_read_bio_X509 (cert_BIO, NULL, NULL, NULL); |
870 | if (!cert) { | 887 | if (!cert) { |
871 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot read certificate from CERTINFO information - BIO error")); | 888 | snprintf (msg, |
872 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 889 | DEFAULT_BUFFER_SIZE, |
890 | _("Cannot read certificate from CERTINFO information - BIO error")); | ||
891 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
873 | } | 892 | } |
874 | BIO_free (cert_BIO); | 893 | BIO_free (cert_BIO); |
875 | result = np_net_ssl_check_certificate(cert, days_till_exp_warn, days_till_exp_crit); | 894 | result = np_net_ssl_check_certificate(cert, days_till_exp_warn, days_till_exp_crit); |
@@ -886,9 +905,12 @@ GOT_FIRST_CERT: | |||
886 | } | 905 | } |
887 | #endif /* USE_OPENSSL */ | 906 | #endif /* USE_OPENSSL */ |
888 | } else { | 907 | } else { |
889 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot retrieve certificates - cURL returned %d - %s"), | 908 | snprintf (msg, |
890 | res, curl_easy_strerror(res)); | 909 | DEFAULT_BUFFER_SIZE, |
891 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | 910 | _("Cannot retrieve certificates - cURL returned %d - %s"), |
911 | res, | ||
912 | curl_easy_strerror(res)); | ||
913 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); | ||
892 | } | 914 | } |
893 | } | 915 | } |
894 | } | 916 | } |
@@ -927,8 +949,11 @@ GOT_FIRST_CERT: | |||
927 | 949 | ||
928 | /* get status line of answer, check sanity of HTTP code */ | 950 | /* get status line of answer, check sanity of HTTP code */ |
929 | if (curlhelp_parse_statusline (header_buf.buf, &status_line) < 0) { | 951 | if (curlhelp_parse_statusline (header_buf.buf, &status_line) < 0) { |
930 | snprintf (msg, DEFAULT_BUFFER_SIZE, "Unparsable status line in %.3g seconds response time|%s\n", | 952 | snprintf (msg, |
931 | total_time, perfstring); | 953 | DEFAULT_BUFFER_SIZE, |
954 | "Unparsable status line in %.3g seconds response time|%s\n", | ||
955 | total_time, | ||
956 | perfstring); | ||
932 | /* we cannot know the major/minor version here for sure as we cannot parse the first line */ | 957 | /* we cannot know the major/minor version here for sure as we cannot parse the first line */ |
933 | die (STATE_CRITICAL, "HTTP CRITICAL HTTP/x.x %ld unknown - %s", code, msg); | 958 | die (STATE_CRITICAL, "HTTP CRITICAL HTTP/x.x %ld unknown - %s", code, msg); |
934 | } | 959 | } |
@@ -948,9 +973,16 @@ GOT_FIRST_CERT: | |||
948 | /* make sure the status line matches the response we are looking for */ | 973 | /* make sure the status line matches the response we are looking for */ |
949 | if (!expected_statuscode(status_line.first_line, server_expect)) { | 974 | if (!expected_statuscode(status_line.first_line, server_expect)) { |
950 | if (server_port == HTTP_PORT) | 975 | if (server_port == HTTP_PORT) |
951 | snprintf(msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host: %s\n"), status_line.first_line); | 976 | snprintf(msg, |
977 | DEFAULT_BUFFER_SIZE, | ||
978 | _("Invalid HTTP response received from host: %s\n"), | ||
979 | status_line.first_line); | ||
952 | else | 980 | else |
953 | snprintf(msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: %s\n"), server_port, status_line.first_line); | 981 | snprintf(msg, |
982 | DEFAULT_BUFFER_SIZE, | ||
983 | _("Invalid HTTP response received from host on port %d: %s\n"), | ||
984 | server_port, | ||
985 | status_line.first_line); | ||
954 | die (STATE_CRITICAL, "HTTP CRITICAL - %s%s%s", msg, | 986 | die (STATE_CRITICAL, "HTTP CRITICAL - %s%s%s", msg, |
955 | show_body ? "\n" : "", | 987 | show_body ? "\n" : "", |
956 | show_body ? body_buf.buf : ""); | 988 | show_body ? body_buf.buf : ""); |
@@ -1023,23 +1055,55 @@ GOT_FIRST_CERT: | |||
1023 | 1055 | ||
1024 | if (strlen (header_expect)) { | 1056 | if (strlen (header_expect)) { |
1025 | if (!strstr (header_buf.buf, header_expect)) { | 1057 | if (!strstr (header_buf.buf, header_expect)) { |
1058 | |||
1026 | strncpy(&output_header_search[0],header_expect,sizeof(output_header_search)); | 1059 | strncpy(&output_header_search[0],header_expect,sizeof(output_header_search)); |
1060 | |||
1027 | if(output_header_search[sizeof(output_header_search)-1]!='\0') { | 1061 | if(output_header_search[sizeof(output_header_search)-1]!='\0') { |
1028 | bcopy("...",&output_header_search[sizeof(output_header_search)-4],4); | 1062 | bcopy("...",&output_header_search[sizeof(output_header_search)-4],4); |
1029 | } | 1063 | } |
1030 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sheader '%s' not found on '%s://%s:%d%s', "), msg, output_header_search, use_ssl ? "https" : "http", host_name ? host_name : server_address, server_port, server_url); | 1064 | |
1031 | result = STATE_CRITICAL; | 1065 | char tmp[DEFAULT_BUFFER_SIZE]; |
1066 | |||
1067 | snprintf (tmp, | ||
1068 | DEFAULT_BUFFER_SIZE, | ||
1069 | _("%sheader '%s' not found on '%s://%s:%d%s', "), | ||
1070 | msg, | ||
1071 | output_header_search, | ||
1072 | use_ssl ? "https" : "http", | ||
1073 | host_name ? host_name : server_address, | ||
1074 | server_port, | ||
1075 | server_url); | ||
1076 | |||
1077 | strcpy(msg, tmp); | ||
1078 | |||
1079 | result = STATE_CRITICAL; | ||
1032 | } | 1080 | } |
1033 | } | 1081 | } |
1034 | 1082 | ||
1035 | if (strlen (string_expect)) { | 1083 | if (strlen (string_expect)) { |
1036 | if (!strstr (body_buf.buf, string_expect)) { | 1084 | if (!strstr (body_buf.buf, string_expect)) { |
1085 | |||
1037 | strncpy(&output_string_search[0],string_expect,sizeof(output_string_search)); | 1086 | strncpy(&output_string_search[0],string_expect,sizeof(output_string_search)); |
1087 | |||
1038 | if(output_string_search[sizeof(output_string_search)-1]!='\0') { | 1088 | if(output_string_search[sizeof(output_string_search)-1]!='\0') { |
1039 | bcopy("...",&output_string_search[sizeof(output_string_search)-4],4); | 1089 | bcopy("...",&output_string_search[sizeof(output_string_search)-4],4); |
1040 | } | 1090 | } |
1041 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sstring '%s' not found on '%s://%s:%d%s', "), msg, output_string_search, use_ssl ? "https" : "http", host_name ? host_name : server_address, server_port, server_url); | 1091 | |
1042 | result = STATE_CRITICAL; | 1092 | char tmp[DEFAULT_BUFFER_SIZE]; |
1093 | |||
1094 | snprintf (tmp, | ||
1095 | DEFAULT_BUFFER_SIZE, | ||
1096 | _("%sstring '%s' not found on '%s://%s:%d%s', "), | ||
1097 | msg, | ||
1098 | output_string_search, | ||
1099 | use_ssl ? "https" : "http", | ||
1100 | host_name ? host_name : server_address, | ||
1101 | server_port, | ||
1102 | server_url); | ||
1103 | |||
1104 | strcpy(msg, tmp); | ||
1105 | |||
1106 | result = STATE_CRITICAL; | ||
1043 | } | 1107 | } |
1044 | } | 1108 | } |
1045 | 1109 | ||
@@ -1050,27 +1114,48 @@ GOT_FIRST_CERT: | |||
1050 | result = max_state_alt(STATE_OK, result); | 1114 | result = max_state_alt(STATE_OK, result); |
1051 | } | 1115 | } |
1052 | else if ((errcode == REG_NOMATCH && !invert_regex) || (errcode == 0 && invert_regex)) { | 1116 | else if ((errcode == REG_NOMATCH && !invert_regex) || (errcode == 0 && invert_regex)) { |
1053 | if (!invert_regex) | 1117 | if (!invert_regex) { |
1054 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spattern not found, "), msg); | 1118 | char tmp[DEFAULT_BUFFER_SIZE]; |
1055 | else | 1119 | |
1056 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spattern found, "), msg); | 1120 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%spattern not found, "), msg); |
1057 | result = STATE_CRITICAL; | 1121 | strcpy(msg, tmp); |
1058 | } | 1122 | |
1059 | else { | 1123 | } else { |
1060 | regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); | 1124 | char tmp[DEFAULT_BUFFER_SIZE]; |
1061 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sExecute Error: %s, "), msg, errbuf); | 1125 | |
1062 | result = STATE_UNKNOWN; | 1126 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%spattern found, "), msg); |
1063 | } | 1127 | strcpy(msg, tmp); |
1128 | |||
1129 | } | ||
1130 | result = STATE_CRITICAL; | ||
1131 | } else { | ||
1132 | regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); | ||
1133 | |||
1134 | char tmp[DEFAULT_BUFFER_SIZE]; | ||
1135 | |||
1136 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sExecute Error: %s, "), msg, errbuf); | ||
1137 | strcpy(msg, tmp); | ||
1138 | result = STATE_UNKNOWN; | ||
1139 | } | ||
1064 | } | 1140 | } |
1065 | 1141 | ||
1066 | /* make sure the page is of an appropriate size */ | 1142 | /* make sure the page is of an appropriate size */ |
1067 | if ((max_page_len > 0) && (page_len > max_page_len)) { | 1143 | if ((max_page_len > 0) && (page_len > max_page_len)) { |
1068 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spage size %d too large, "), msg, page_len); | 1144 | char tmp[DEFAULT_BUFFER_SIZE]; |
1069 | result = max_state_alt(STATE_WARNING, result); | 1145 | |
1070 | } else if ((min_page_len > 0) && (page_len < min_page_len)) { | 1146 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%spage size %d too large, "), msg, page_len); |
1071 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spage size %d too small, "), msg, page_len); | 1147 | |
1072 | result = max_state_alt(STATE_WARNING, result); | 1148 | strcpy(msg, tmp); |
1073 | } | 1149 | |
1150 | result = max_state_alt(STATE_WARNING, result); | ||
1151 | |||
1152 | } else if ((min_page_len > 0) && (page_len < min_page_len)) { | ||
1153 | char tmp[DEFAULT_BUFFER_SIZE]; | ||
1154 | |||
1155 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%spage size %d too small, "), msg, page_len); | ||
1156 | strcpy(msg, tmp); | ||
1157 | result = max_state_alt(STATE_WARNING, result); | ||
1158 | } | ||
1074 | 1159 | ||
1075 | /* -w, -c: check warning and critical level */ | 1160 | /* -w, -c: check warning and critical level */ |
1076 | result = max_state_alt(get_status(total_time, thlds), result); | 1161 | result = max_state_alt(get_status(total_time, thlds), result); |
@@ -1654,6 +1739,7 @@ process_arguments (int argc, char **argv) | |||
1654 | break; | 1739 | break; |
1655 | case 'R': /* regex */ | 1740 | case 'R': /* regex */ |
1656 | cflags |= REG_ICASE; | 1741 | cflags |= REG_ICASE; |
1742 | // fall through | ||
1657 | case 'r': /* regex */ | 1743 | case 'r': /* regex */ |
1658 | strncpy (regexp, optarg, MAX_RE_SIZE - 1); | 1744 | strncpy (regexp, optarg, MAX_RE_SIZE - 1); |
1659 | regexp[MAX_RE_SIZE - 1] = 0; | 1745 | regexp[MAX_RE_SIZE - 1] = 0; |
@@ -2307,37 +2393,67 @@ check_document_dates (const curlhelp_write_curlbuf *header_buf, char (*msg)[DEFA | |||
2307 | server_date = get_header_value (headers, nof_headers, "date"); | 2393 | server_date = get_header_value (headers, nof_headers, "date"); |
2308 | document_date = get_header_value (headers, nof_headers, "last-modified"); | 2394 | document_date = get_header_value (headers, nof_headers, "last-modified"); |
2309 | 2395 | ||
2310 | if (!server_date || !*server_date) { | 2396 | if (!server_date || !*server_date) { |
2311 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sServer date unknown, "), *msg); | 2397 | char tmp[DEFAULT_BUFFER_SIZE]; |
2312 | date_result = max_state_alt(STATE_UNKNOWN, date_result); | 2398 | |
2313 | } else if (!document_date || !*document_date) { | 2399 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sServer date unknown, "), *msg); |
2314 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument modification date unknown, "), *msg); | 2400 | strcpy(*msg, tmp); |
2315 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2401 | |
2402 | date_result = max_state_alt(STATE_UNKNOWN, date_result); | ||
2403 | |||
2404 | } else if (!document_date || !*document_date) { | ||
2405 | char tmp[DEFAULT_BUFFER_SIZE]; | ||
2406 | |||
2407 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sDocument modification date unknown, "), *msg); | ||
2408 | strcpy(*msg, tmp); | ||
2409 | |||
2410 | date_result = max_state_alt(STATE_CRITICAL, date_result); | ||
2411 | |||
2316 | } else { | 2412 | } else { |
2317 | time_t srv_data = curl_getdate (server_date, NULL); | 2413 | time_t srv_data = curl_getdate (server_date, NULL); |
2318 | time_t doc_data = curl_getdate (document_date, NULL); | 2414 | time_t doc_data = curl_getdate (document_date, NULL); |
2319 | if (verbose >= 2) | 2415 | if (verbose >= 2) |
2320 | printf ("* server date: '%s' (%d), doc_date: '%s' (%d)\n", server_date, (int)srv_data, document_date, (int)doc_data); | 2416 | printf ("* server date: '%s' (%d), doc_date: '%s' (%d)\n", server_date, (int)srv_data, document_date, (int)doc_data); |
2321 | if (srv_data <= 0) { | 2417 | if (srv_data <= 0) { |
2322 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sServer date \"%100s\" unparsable, "), *msg, server_date); | 2418 | char tmp[DEFAULT_BUFFER_SIZE]; |
2323 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2419 | |
2324 | } else if (doc_data <= 0) { | 2420 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sServer date \"%100s\" unparsable, "), *msg, server_date); |
2325 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument date \"%100s\" unparsable, "), *msg, document_date); | 2421 | strcpy(*msg, tmp); |
2326 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2422 | |
2327 | } else if (doc_data > srv_data + 30) { | 2423 | date_result = max_state_alt(STATE_CRITICAL, date_result); |
2328 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument is %d seconds in the future, "), *msg, (int)doc_data - (int)srv_data); | 2424 | } else if (doc_data <= 0) { |
2329 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2425 | char tmp[DEFAULT_BUFFER_SIZE]; |
2330 | } else if (doc_data < srv_data - maximum_age) { | 2426 | |
2331 | int n = (srv_data - doc_data); | 2427 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sDocument date \"%100s\" unparsable, "), *msg, document_date); |
2332 | if (n > (60 * 60 * 24 * 2)) { | 2428 | strcpy(*msg, tmp); |
2333 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sLast modified %.1f days ago, "), *msg, ((float) n) / (60 * 60 * 24)); | 2429 | |
2334 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2430 | date_result = max_state_alt(STATE_CRITICAL, date_result); |
2335 | } else { | 2431 | } else if (doc_data > srv_data + 30) { |
2336 | snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sLast modified %d:%02d:%02d ago, "), *msg, n / (60 * 60), (n / 60) % 60, n % 60); | 2432 | char tmp[DEFAULT_BUFFER_SIZE]; |
2337 | date_result = max_state_alt(STATE_CRITICAL, date_result); | 2433 | |
2338 | } | 2434 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sDocument is %d seconds in the future, "), *msg, (int)doc_data - (int)srv_data); |
2339 | } | 2435 | strcpy(*msg, tmp); |
2340 | } | 2436 | |
2437 | date_result = max_state_alt(STATE_CRITICAL, date_result); | ||
2438 | } else if (doc_data < srv_data - maximum_age) { | ||
2439 | int n = (srv_data - doc_data); | ||
2440 | if (n > (60 * 60 * 24 * 2)) { | ||
2441 | char tmp[DEFAULT_BUFFER_SIZE]; | ||
2442 | |||
2443 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sLast modified %.1f days ago, "), *msg, ((float) n) / (60 * 60 * 24)); | ||
2444 | strcpy(*msg, tmp); | ||
2445 | |||
2446 | date_result = max_state_alt(STATE_CRITICAL, date_result); | ||
2447 | } else { | ||
2448 | char tmp[DEFAULT_BUFFER_SIZE]; | ||
2449 | |||
2450 | snprintf (tmp, DEFAULT_BUFFER_SIZE, _("%sLast modified %d:%02d:%02d ago, "), *msg, n / (60 * 60), (n / 60) % 60, n % 60); | ||
2451 | strcpy(*msg, tmp); | ||
2452 | |||
2453 | date_result = max_state_alt(STATE_CRITICAL, date_result); | ||
2454 | } | ||
2455 | } | ||
2456 | } | ||
2341 | 2457 | ||
2342 | if (server_date) free (server_date); | 2458 | if (server_date) free (server_date); |
2343 | if (document_date) free (document_date); | 2459 | if (document_date) free (document_date); |
@@ -2379,7 +2495,7 @@ get_content_length (const curlhelp_write_curlbuf* header_buf, const curlhelp_wri | |||
2379 | 2495 | ||
2380 | /* TODO: is there a better way in libcurl to check for the SSL library? */ | 2496 | /* TODO: is there a better way in libcurl to check for the SSL library? */ |
2381 | curlhelp_ssl_library | 2497 | curlhelp_ssl_library |
2382 | curlhelp_get_ssl_library (CURL* curl) | 2498 | curlhelp_get_ssl_library () |
2383 | { | 2499 | { |
2384 | curl_version_info_data* version_data; | 2500 | curl_version_info_data* version_data; |
2385 | char *ssl_version; | 2501 | char *ssl_version; |
diff --git a/plugins/check_dbi.c b/plugins/check_dbi.c index ced13d05..c24ca248 100644 --- a/plugins/check_dbi.c +++ b/plugins/check_dbi.c | |||
@@ -141,21 +141,28 @@ main (int argc, char **argv) | |||
141 | if (verbose > 2) | 141 | if (verbose > 2) |
142 | printf ("Initializing DBI\n"); | 142 | printf ("Initializing DBI\n"); |
143 | 143 | ||
144 | if (dbi_initialize (NULL) < 0) { | 144 | dbi_inst *instance_p; |
145 | |||
146 | if (dbi_initialize_r(NULL, instance_p) < 0) { | ||
145 | printf ("UNKNOWN - failed to initialize DBI; possibly you don't have any drivers installed.\n"); | 147 | printf ("UNKNOWN - failed to initialize DBI; possibly you don't have any drivers installed.\n"); |
146 | return STATE_UNKNOWN; | 148 | return STATE_UNKNOWN; |
147 | } | 149 | } |
148 | 150 | ||
151 | if (instance_p == NULL) { | ||
152 | printf ("UNKNOWN - failed to initialize DBI.\n"); | ||
153 | return STATE_UNKNOWN; | ||
154 | } | ||
155 | |||
149 | if (verbose) | 156 | if (verbose) |
150 | printf ("Opening DBI driver '%s'\n", np_dbi_driver); | 157 | printf ("Opening DBI driver '%s'\n", np_dbi_driver); |
151 | 158 | ||
152 | driver = dbi_driver_open (np_dbi_driver); | 159 | driver = dbi_driver_open_r(np_dbi_driver, instance_p); |
153 | if (! driver) { | 160 | if (! driver) { |
154 | printf ("UNKNOWN - failed to open DBI driver '%s'; possibly it's not installed.\n", | 161 | printf ("UNKNOWN - failed to open DBI driver '%s'; possibly it's not installed.\n", |
155 | np_dbi_driver); | 162 | np_dbi_driver); |
156 | 163 | ||
157 | printf ("Known drivers:\n"); | 164 | printf ("Known drivers:\n"); |
158 | for (driver = dbi_driver_list (NULL); driver; driver = dbi_driver_list (driver)) { | 165 | for (driver = dbi_driver_list_r(NULL, instance_p); driver; driver = dbi_driver_list_r(driver, instance_p)) { |
159 | printf (" - %s\n", dbi_driver_get_name (driver)); | 166 | printf (" - %s\n", dbi_driver_get_name (driver)); |
160 | } | 167 | } |
161 | return STATE_UNKNOWN; | 168 | return STATE_UNKNOWN; |
@@ -426,6 +433,7 @@ process_arguments (int argc, char **argv) | |||
426 | else | 433 | else |
427 | timeout_interval = atoi (optarg); | 434 | timeout_interval = atoi (optarg); |
428 | 435 | ||
436 | break; | ||
429 | case 'H': /* host */ | 437 | case 'H': /* host */ |
430 | if (!is_host (optarg)) | 438 | if (!is_host (optarg)) |
431 | usage2 (_("Invalid hostname/address"), optarg); | 439 | usage2 (_("Invalid hostname/address"), optarg); |
diff --git a/plugins/check_fping.c b/plugins/check_fping.c index 6f5656ef..23a9e990 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c | |||
@@ -354,6 +354,7 @@ process_arguments (int argc, char **argv) | |||
354 | break; | 354 | break; |
355 | case 'I': /* sourceip */ | 355 | case 'I': /* sourceip */ |
356 | sourceif = strscpy (sourceif, optarg); | 356 | sourceif = strscpy (sourceif, optarg); |
357 | break; | ||
357 | case '4': /* IPv4 only */ | 358 | case '4': /* IPv4 only */ |
358 | address_family = AF_INET; | 359 | address_family = AF_INET; |
359 | break; | 360 | break; |
diff --git a/plugins/check_hpjd.c b/plugins/check_hpjd.c index c4b44178..c34bb082 100644 --- a/plugins/check_hpjd.c +++ b/plugins/check_hpjd.c | |||
@@ -353,6 +353,7 @@ process_arguments (int argc, char **argv) | |||
353 | usage2 (_("Port must be a positive short integer"), optarg); | 353 | usage2 (_("Port must be a positive short integer"), optarg); |
354 | else | 354 | else |
355 | port = atoi(optarg); | 355 | port = atoi(optarg); |
356 | break; | ||
356 | case 'D': /* disable paper out check*/ | 357 | case 'D': /* disable paper out check*/ |
357 | check_paper_out = 0; | 358 | check_paper_out = 0; |
358 | break; | 359 | break; |
diff --git a/plugins/check_http.c b/plugins/check_http.c index 6956a726..1288c415 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
@@ -498,6 +498,7 @@ bool process_arguments (int argc, char **argv) | |||
498 | break; | 498 | break; |
499 | case 'R': /* regex */ | 499 | case 'R': /* regex */ |
500 | cflags |= REG_ICASE; | 500 | cflags |= REG_ICASE; |
501 | // fall through | ||
501 | case 'r': /* regex */ | 502 | case 'r': /* regex */ |
502 | strncpy (regexp, optarg, MAX_RE_SIZE - 1); | 503 | strncpy (regexp, optarg, MAX_RE_SIZE - 1); |
503 | regexp[MAX_RE_SIZE - 1] = 0; | 504 | regexp[MAX_RE_SIZE - 1] = 0; |
diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index eafafdc0..49cb1008 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c | |||
@@ -199,7 +199,7 @@ setup_control_request(ntp_control_message *p, uint8_t opcode, uint16_t seq){ | |||
199 | * status is pretty much useless as syncsource_found is a global variable | 199 | * status is pretty much useless as syncsource_found is a global variable |
200 | * used later in main to check is the server was synchronized. It works | 200 | * used later in main to check is the server was synchronized. It works |
201 | * so I left it alone */ | 201 | * so I left it alone */ |
202 | int ntp_request(const char *host, double *offset, int *offset_result, double *jitter, int *stratum, int *num_truechimers){ | 202 | int ntp_request(double *offset, int *offset_result, double *jitter, int *stratum, int *num_truechimers){ |
203 | int conn=-1, i, npeers=0, num_candidates=0; | 203 | int conn=-1, i, npeers=0, num_candidates=0; |
204 | double tmp_offset = 0; | 204 | double tmp_offset = 0; |
205 | int min_peer_sel=PEER_INCLUDED; | 205 | int min_peer_sel=PEER_INCLUDED; |
@@ -585,8 +585,8 @@ int main(int argc, char *argv[]){ | |||
585 | /* set socket timeout */ | 585 | /* set socket timeout */ |
586 | alarm (socket_timeout); | 586 | alarm (socket_timeout); |
587 | 587 | ||
588 | /* This returns either OK or WARNING (See comment proceeding ntp_request) */ | 588 | /* This returns either OK or WARNING (See comment preceding ntp_request) */ |
589 | result = ntp_request(server_address, &offset, &offset_result, &jitter, &stratum, &num_truechimers); | 589 | result = ntp_request(&offset, &offset_result, &jitter, &stratum, &num_truechimers); |
590 | 590 | ||
591 | if(offset_result == STATE_UNKNOWN) { | 591 | if(offset_result == STATE_UNKNOWN) { |
592 | /* if there's no sync peer (this overrides ntp_request output): */ | 592 | /* if there's no sync peer (this overrides ntp_request output): */ |
diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c index c0ab838a..996bd875 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c | |||
@@ -632,6 +632,7 @@ process_arguments (int argc, char **argv) | |||
632 | #else | 632 | #else |
633 | usage (_("SSL support not available - install OpenSSL and recompile")); | 633 | usage (_("SSL support not available - install OpenSSL and recompile")); |
634 | #endif | 634 | #endif |
635 | // fall through | ||
635 | case 'S': | 636 | case 'S': |
636 | /* starttls */ | 637 | /* starttls */ |
637 | use_ssl = TRUE; | 638 | use_ssl = TRUE; |
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index 135bbc7c..4d8e6406 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
@@ -858,6 +858,7 @@ process_arguments (int argc, char **argv) | |||
858 | break; | 858 | break; |
859 | case 'R': /* regex */ | 859 | case 'R': /* regex */ |
860 | cflags = REG_ICASE; | 860 | cflags = REG_ICASE; |
861 | // fall through | ||
861 | case 'r': /* regex */ | 862 | case 'r': /* regex */ |
862 | cflags |= REG_EXTENDED | REG_NOSUB | REG_NEWLINE; | 863 | cflags |= REG_EXTENDED | REG_NOSUB | REG_NEWLINE; |
863 | strncpy (regex_expect, optarg, sizeof (regex_expect) - 1); | 864 | strncpy (regex_expect, optarg, sizeof (regex_expect) - 1); |
diff --git a/plugins/check_ups.c b/plugins/check_ups.c index 12bce217..68737c4b 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c | |||
@@ -89,7 +89,7 @@ char *ups_status; | |||
89 | int temp_output_c = 0; | 89 | int temp_output_c = 0; |
90 | 90 | ||
91 | int determine_status (void); | 91 | int determine_status (void); |
92 | int get_ups_variable (const char *, char *, size_t); | 92 | int get_ups_variable (const char *, char *); |
93 | 93 | ||
94 | int process_arguments (int, char **); | 94 | int process_arguments (int, char **); |
95 | int validate_arguments (void); | 95 | int validate_arguments (void); |
@@ -189,7 +189,7 @@ main (int argc, char **argv) | |||
189 | } | 189 | } |
190 | 190 | ||
191 | /* get the ups utility voltage if possible */ | 191 | /* get the ups utility voltage if possible */ |
192 | res=get_ups_variable ("input.voltage", temp_buffer, sizeof (temp_buffer)); | 192 | res=get_ups_variable ("input.voltage", temp_buffer); |
193 | if (res == NOSUCHVAR) supported_options &= ~UPS_UTILITY; | 193 | if (res == NOSUCHVAR) supported_options &= ~UPS_UTILITY; |
194 | else if (res != OK) | 194 | else if (res != OK) |
195 | return STATE_CRITICAL; | 195 | return STATE_CRITICAL; |
@@ -224,7 +224,7 @@ main (int argc, char **argv) | |||
224 | } | 224 | } |
225 | 225 | ||
226 | /* get the ups battery percent if possible */ | 226 | /* get the ups battery percent if possible */ |
227 | res=get_ups_variable ("battery.charge", temp_buffer, sizeof (temp_buffer)); | 227 | res=get_ups_variable ("battery.charge", temp_buffer); |
228 | if (res == NOSUCHVAR) supported_options &= ~UPS_BATTPCT; | 228 | if (res == NOSUCHVAR) supported_options &= ~UPS_BATTPCT; |
229 | else if ( res != OK) | 229 | else if ( res != OK) |
230 | return STATE_CRITICAL; | 230 | return STATE_CRITICAL; |
@@ -253,7 +253,7 @@ main (int argc, char **argv) | |||
253 | } | 253 | } |
254 | 254 | ||
255 | /* get the ups load percent if possible */ | 255 | /* get the ups load percent if possible */ |
256 | res=get_ups_variable ("ups.load", temp_buffer, sizeof (temp_buffer)); | 256 | res=get_ups_variable ("ups.load", temp_buffer); |
257 | if ( res == NOSUCHVAR ) supported_options &= ~UPS_LOADPCT; | 257 | if ( res == NOSUCHVAR ) supported_options &= ~UPS_LOADPCT; |
258 | else if ( res != OK) | 258 | else if ( res != OK) |
259 | return STATE_CRITICAL; | 259 | return STATE_CRITICAL; |
@@ -282,7 +282,7 @@ main (int argc, char **argv) | |||
282 | } | 282 | } |
283 | 283 | ||
284 | /* get the ups temperature if possible */ | 284 | /* get the ups temperature if possible */ |
285 | res=get_ups_variable ("ups.temperature", temp_buffer, sizeof (temp_buffer)); | 285 | res=get_ups_variable ("ups.temperature", temp_buffer); |
286 | if ( res == NOSUCHVAR ) supported_options &= ~UPS_TEMP; | 286 | if ( res == NOSUCHVAR ) supported_options &= ~UPS_TEMP; |
287 | else if ( res != OK) | 287 | else if ( res != OK) |
288 | return STATE_CRITICAL; | 288 | return STATE_CRITICAL; |
@@ -342,7 +342,7 @@ determine_status (void) | |||
342 | char *ptr; | 342 | char *ptr; |
343 | int res; | 343 | int res; |
344 | 344 | ||
345 | res=get_ups_variable ("ups.status", recv_buffer, sizeof (recv_buffer)); | 345 | res=get_ups_variable ("ups.status", recv_buffer); |
346 | if (res == NOSUCHVAR) return OK; | 346 | if (res == NOSUCHVAR) return OK; |
347 | if (res != STATE_OK) { | 347 | if (res != STATE_OK) { |
348 | printf ("%s\n", _("Invalid response received from host")); | 348 | printf ("%s\n", _("Invalid response received from host")); |
@@ -388,7 +388,7 @@ determine_status (void) | |||
388 | 388 | ||
389 | /* gets a variable value for a specific UPS */ | 389 | /* gets a variable value for a specific UPS */ |
390 | int | 390 | int |
391 | get_ups_variable (const char *varname, char *buf, size_t buflen) | 391 | get_ups_variable (const char *varname, char *buf) |
392 | { | 392 | { |
393 | /* char command[MAX_INPUT_BUFFER]; */ | 393 | /* char command[MAX_INPUT_BUFFER]; */ |
394 | char temp_buffer[MAX_INPUT_BUFFER]; | 394 | char temp_buffer[MAX_INPUT_BUFFER]; |