[monitoring-plugins] using curl_getdate instead of local ...
Andreas Baumann
git at monitoring-plugins.org
Wed Apr 19 21:20:12 CEST 2017
Module: monitoring-plugins
Branch: feature_check_curl
Commit: 92f0f83a93ed718bded7153e0f5daa2f941a8834
Author: Andreas Baumann <mail at andreasbaumann.cc>
Date: Wed Apr 19 21:12:23 2017 +0200
URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=92f0f83
using curl_getdate instead of local parse_time_string, added verbose debug code for -M<d>
---
plugins/check_curl.c | 99 +++-------------------------------------------------
1 file changed, 4 insertions(+), 95 deletions(-)
diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index f7c7596..b002637 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -184,7 +184,6 @@ int curlhelp_parse_statusline (const char*, curlhelp_statusline *);
void curlhelp_free_statusline (curlhelp_statusline *);
char *perfd_time_ssl (double microsec);
char *get_header_value (const struct phr_header* headers, const size_t nof_headers, const char* header);
-static time_t parse_time_string (const char *string);
int check_document_dates (const curlhelp_write_curlbuf *, char (*msg)[DEFAULT_BUFFER_SIZE]);
void remove_newlines (char *);
@@ -1563,98 +1562,6 @@ get_header_value (const struct phr_header* headers, const size_t nof_headers, co
return NULL;
}
-/* TODO: use CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); here */
-static time_t
-parse_time_string (const char *string)
-{
- struct tm tm;
- time_t t;
- memset (&tm, 0, sizeof(tm));
-
- /* Like this: Tue, 25 Dec 2001 02:59:03 GMT */
-
- if (isupper (string[0]) && /* Tue */
- islower (string[1]) &&
- islower (string[2]) &&
- ',' == string[3] &&
- ' ' == string[4] &&
- (isdigit(string[5]) || string[5] == ' ') && /* 25 */
- isdigit (string[6]) &&
- ' ' == string[7] &&
- isupper (string[8]) && /* Dec */
- islower (string[9]) &&
- islower (string[10]) &&
- ' ' == string[11] &&
- isdigit (string[12]) && /* 2001 */
- isdigit (string[13]) &&
- isdigit (string[14]) &&
- isdigit (string[15]) &&
- ' ' == string[16] &&
- isdigit (string[17]) && /* 02: */
- isdigit (string[18]) &&
- ':' == string[19] &&
- isdigit (string[20]) && /* 59: */
- isdigit (string[21]) &&
- ':' == string[22] &&
- isdigit (string[23]) && /* 03 */
- isdigit (string[24]) &&
- ' ' == string[25] &&
- 'G' == string[26] && /* GMT */
- 'M' == string[27] && /* GMT */
- 'T' == string[28]) {
-
- tm.tm_sec = 10 * (string[23]-'0') + (string[24]-'0');
- tm.tm_min = 10 * (string[20]-'0') + (string[21]-'0');
- tm.tm_hour = 10 * (string[17]-'0') + (string[18]-'0');
- tm.tm_mday = 10 * (string[5] == ' ' ? 0 : string[5]-'0') + (string[6]-'0');
- tm.tm_mon = (!strncmp (string+8, "Jan", 3) ? 0 :
- !strncmp (string+8, "Feb", 3) ? 1 :
- !strncmp (string+8, "Mar", 3) ? 2 :
- !strncmp (string+8, "Apr", 3) ? 3 :
- !strncmp (string+8, "May", 3) ? 4 :
- !strncmp (string+8, "Jun", 3) ? 5 :
- !strncmp (string+8, "Jul", 3) ? 6 :
- !strncmp (string+8, "Aug", 3) ? 7 :
- !strncmp (string+8, "Sep", 3) ? 8 :
- !strncmp (string+8, "Oct", 3) ? 9 :
- !strncmp (string+8, "Nov", 3) ? 10 :
- !strncmp (string+8, "Dec", 3) ? 11 :
- -1);
- tm.tm_year = ((1000 * (string[12]-'0') +
- 100 * (string[13]-'0') +
- 10 * (string[14]-'0') +
- (string[15]-'0'))
- - 1900);
-
- tm.tm_isdst = 0; /* GMT is never in DST, right? */
-
- if (tm.tm_mon < 0 || tm.tm_mday < 1 || tm.tm_mday > 31)
- return 0;
-
- /*
- This is actually wrong: we need to subtract the local timezone
- offset from GMT from this value. But, that's ok in this usage,
- because we only comparing these two GMT dates against each other,
- so it doesn't matter what time zone we parse them in.
- */
-
- t = mktime (&tm);
- if (t == (time_t) -1) t = 0;
-
- if (verbose) {
- const char *s = string;
- while (*s && *s != '\r' && *s != '\n')
- fputc (*s++, stdout);
- printf (" ==> %lu\n", (unsigned long) t);
- }
-
- return t;
-
- } else {
- return 0;
- }
-}
-
int
check_document_dates (const curlhelp_write_curlbuf *header_buf, char (*msg)[DEFAULT_BUFFER_SIZE])
{
@@ -1680,8 +1587,10 @@ check_document_dates (const curlhelp_write_curlbuf *header_buf, char (*msg)[DEFA
snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument modification date unknown, "), *msg);
date_result = max_state_alt(STATE_CRITICAL, date_result);
} else {
- time_t srv_data = parse_time_string (server_date);
- time_t doc_data = parse_time_string (document_date);
+ time_t srv_data = curl_getdate (server_date, NULL);
+ time_t doc_data = curl_getdate (document_date, NULL);
+ if (verbose >= 2)
+ printf ("* server date: '%s' (%d), doc_date: '%s' (%d)\n", server_date, srv_data, document_date, doc_data);
if (srv_data <= 0) {
snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sServer date \"%100s\" unparsable, "), *msg, server_date);
date_result = max_state_alt(STATE_CRITICAL, date_result);
More information about the Commits
mailing list