1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-08 15:02:10 +03:00

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
This commit is contained in:
Roy T. Fielding
1999-08-26 14:53:24 +00:00
parent 1fa9e10844
commit c5a36ee6c2
4 changed files with 23 additions and 15 deletions

View File

@@ -76,7 +76,7 @@ extern "C" {
API_EXPORT(int) ap_checkmask(const char *data, const char *mask); 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_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 #ifdef __cplusplus
} }

View File

@@ -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_unmodified = ap_table_get(r->headers_in, "If-Unmodified-Since");
if (if_unmodified != NULL) { if (if_unmodified != NULL) {
time_t ius = ap_parseHTTPdate(if_unmodified); /* ZZZ we are changing time funcs to AP time thread funcs.
and we need to check return values of ap_parseHTTPdate. */
if ((ius != BAD_DATE) && (mtime > ius)) { time_t ius ;
return HTTP_PRECONDITION_FAILED; 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) else if ((r->method_number == M_GET)
&& ((if_modified_since = && ((if_modified_since =
ap_table_get(r->headers_in, "If-Modified-Since")) != NULL)) { ap_table_get(r->headers_in, "If-Modified-Since")) != NULL)) {
time_t ims = ap_parseHTTPdate(if_modified_since); time_t ims;
if (ap_parseHTTPdate(if_modified_since, &ims) != 1) {
if ((ims >= mtime) && (ims <= r->request_time)) { 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; return HTTP_NOT_MODIFIED;
} }
} }

View File

@@ -214,7 +214,7 @@ API_EXPORT(time_t) ap_tm2sec(const struct tm * t)
* but many changes since then. * 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; struct tm ds;
int mint, mon; 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', ('S' << 16) | ('e' << 8) | 'p', ('O' << 16) | ('c' << 8) | 't',
('N' << 16) | ('o' << 8) | 'v', ('D' << 16) | ('e' << 8) | 'c'}; ('N' << 16) | ('o' << 8) | 'v', ('D' << 16) | ('e' << 8) | 'c'};
if (!date) if (!date) /* ZZZ return AP_FAILURE on all errors. */
return BAD_DATE; return BAD_DATE;
while (*date && ap_isspace(*date)) /* Find first non-whitespace char */ 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; 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;
} }

View File

@@ -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. * pass it on blindly because of restrictions on future values.
*/ */
else if (!strcasecmp(w, "Last-Modified")) { else if (!strcasecmp(w, "Last-Modified")) {
time_t mtime = ap_parseHTTPdate(l); time_t mtime;
if (ap_parseHTTPdate(l, &mtime) == 1) {
ap_update_mtime(r, mtime); ap_update_mtime(r, mtime);
ap_set_last_modified(r); ap_set_last_modified(r);
}
} }
else if (!strcasecmp(w, "Set-Cookie")) { else if (!strcasecmp(w, "Set-Cookie")) {
ap_table_add(cookie_table, w, l); ap_table_add(cookie_table, w, l);