From: Roy T. Fielding Date: Thu, 26 Aug 1999 14:53:24 +0000 (+0000) Subject: This evil little change modifies the interface to ap_parseHTTPdate() X-Git-Tag: PRE_APR_CHANGES~30 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5a36ee6c221a0158bc8f2da38a330b9c9da74b9;p=apache This evil little change modifies the interface to ap_parseHTTPdate() for no good reason. It'll be backed out real soon. Submitted by: pthreads leftovers git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@83772 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/util_date.h b/include/util_date.h index 8e2051024e..beb68e9534 100644 --- a/include/util_date.h +++ b/include/util_date.h @@ -76,7 +76,7 @@ extern "C" { API_EXPORT(int) ap_checkmask(const char *data, const char *mask); API_EXPORT(time_t) ap_tm2sec(const struct tm *t); -API_EXPORT(time_t) ap_parseHTTPdate(const char *date); +API_EXPORT(time_t) ap_parseHTTPdate(const char *date, time_t * retval); #ifdef __cplusplus } diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 8617a66467..531047f06c 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -425,10 +425,12 @@ API_EXPORT(int) ap_meets_conditions(request_rec *r) */ if_unmodified = ap_table_get(r->headers_in, "If-Unmodified-Since"); if (if_unmodified != NULL) { - time_t ius = ap_parseHTTPdate(if_unmodified); - - if ((ius != BAD_DATE) && (mtime > ius)) { - return HTTP_PRECONDITION_FAILED; + /* ZZZ we are changing time funcs to AP time thread funcs. + and we need to check return values of ap_parseHTTPdate. */ + time_t ius ; + if (ap_parseHTTPdate(if_unmodified, &ius) == 1 + && (mtime > ius)) { + return HTTP_PRECONDITION_FAILED; } } } @@ -478,9 +480,12 @@ API_EXPORT(int) ap_meets_conditions(request_rec *r) else if ((r->method_number == M_GET) && ((if_modified_since = ap_table_get(r->headers_in, "If-Modified-Since")) != NULL)) { - time_t ims = ap_parseHTTPdate(if_modified_since); - - if ((ims >= mtime) && (ims <= r->request_time)) { + time_t ims; + if (ap_parseHTTPdate(if_modified_since, &ims) != 1) { + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, + r->server, "bogus if-modified-since-header"); + } + else if ((ims >= mtime) && (ims <= r->request_time)) { return HTTP_NOT_MODIFIED; } } diff --git a/server/util_date.c b/server/util_date.c index 5111a600f0..43d322eea0 100644 --- a/server/util_date.c +++ b/server/util_date.c @@ -214,7 +214,7 @@ API_EXPORT(time_t) ap_tm2sec(const struct tm * t) * but many changes since then. * */ -API_EXPORT(time_t) ap_parseHTTPdate(const char *date) +API_EXPORT(time_t) ap_parseHTTPdate(const char *date, time_t * retval) { struct tm ds; int mint, mon; @@ -228,7 +228,7 @@ API_EXPORT(time_t) ap_parseHTTPdate(const char *date) ('S' << 16) | ('e' << 8) | 'p', ('O' << 16) | ('c' << 8) | 't', ('N' << 16) | ('o' << 8) | 'v', ('D' << 16) | ('e' << 8) | 'c'}; - if (!date) + if (!date) /* ZZZ return AP_FAILURE on all errors. */ return BAD_DATE; while (*date && ap_isspace(*date)) /* Find first non-whitespace char */ @@ -317,5 +317,7 @@ API_EXPORT(time_t) ap_parseHTTPdate(const char *date) ds.tm_mon = mon; - return ap_tm2sec(&ds); + /* ZZZ return AP_SUCCESS. use AP Implode time func for this. */ + *retval = ap_tm2sec(&ds); + return 1; } diff --git a/server/util_script.c b/server/util_script.c index 012896d7c2..4c300d2a29 100644 --- a/server/util_script.c +++ b/server/util_script.c @@ -588,10 +588,11 @@ API_EXPORT(int) ap_scan_script_header_err_core(request_rec *r, char *buffer, * pass it on blindly because of restrictions on future values. */ else if (!strcasecmp(w, "Last-Modified")) { - time_t mtime = ap_parseHTTPdate(l); - - ap_update_mtime(r, mtime); - ap_set_last_modified(r); + time_t mtime; + if (ap_parseHTTPdate(l, &mtime) == 1) { + ap_update_mtime(r, mtime); + ap_set_last_modified(r); + } } else if (!strcasecmp(w, "Set-Cookie")) { ap_table_add(cookie_table, w, l);