svn commit: r263021 - head/lib/libfetch

Bryan Drewery bdrewery at FreeBSD.org
Tue Mar 11 13:47:12 UTC 2014


Author: bdrewery
Date: Tue Mar 11 13:47:11 2014
New Revision: 263021
URL: http://svnweb.freebsd.org/changeset/base/263021

Log:
  Support Last-Modified behind proxies which return UTC instead of GMT.
  
  The standard states that GMT must be used, but that UTC is equivalent. Still
  parse UTC as otherwise this causes problems for pkg(8). It will refetch
  the repository every time 'pkg update' or other remote operations
  are used behind these proxies.
  
  RFC2616: "All HTTP date/time stamps MUST be represented in Greenwich Mean
  Time (GMT), without exception. For the purposes of HTTP, GMT is exactly equal
  to UTC (Coordinated Universal Time).""
  
  Approved by:	bapt (mentor)
  Reviewed by:	des, peter
  Sponsored by:	EMC / Isilon Storage Division
  MFC after:	1 week

Modified:
  head/lib/libfetch/http.c

Modified: head/lib/libfetch/http.c
==============================================================================
--- head/lib/libfetch/http.c	Tue Mar 11 13:16:03 2014	(r263020)
+++ head/lib/libfetch/http.c	Tue Mar 11 13:47:11 2014	(r263021)
@@ -876,6 +876,12 @@ http_parse_mtime(const char *p, time_t *
 	strncpy(locale, setlocale(LC_TIME, NULL), sizeof(locale));
 	setlocale(LC_TIME, "C");
 	r = strptime(p, "%a, %d %b %Y %H:%M:%S GMT", &tm);
+	/*
+	 * Some proxies use UTC in response, but it should still be
+	 * parsed. RFC2616 states GMT and UTC are exactly equal for HTTP.
+	 */
+	if (r == NULL)
+		r = strptime(p, "%a, %d %b %Y %H:%M:%S UTC", &tm);
 	/* XXX should add support for date-2 and date-3 */
 	setlocale(LC_TIME, locale);
 	if (r == NULL)


More information about the svn-src-head mailing list