From c43fa4d90f13d3f1bef77cc01eb4dfc1c8eaaa46 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sat, 19 Jan 2008 06:51:26 +0000 Subject: [PATCH] Aha! Finally found the culprit. Someone (possibly me) at some point in the past decided to set the TZ environment variable to UTC if it was empty. This is wrong because an empty TZ causes libc to discover the timezone by other means. As a result, hosts that were in other timezones were getting their times changed to UTC. --- webcit/fmt_date.c | 92 ++++++++++++++++++++-------------------------- webcit/webserver.c | 3 -- 2 files changed, 40 insertions(+), 55 deletions(-) diff --git a/webcit/fmt_date.c b/webcit/fmt_date.c index c01f8778e..af694a8c6 100644 --- a/webcit/fmt_date.c +++ b/webcit/fmt_date.c @@ -1,27 +1,23 @@ /* * $Id$ */ -/** - * \defgroup FormatDates Miscellaneous routines formating dates - * \ingroup Calendaring - */ -/*@{*/ + #include "webcit.h" #include "webserver.h" -typedef unsigned char byte; /**< a byte. */ +typedef unsigned char byte; #define FALSE 0 /**< no. */ #define TRUE 1 /**< yes. */ -/** - * \brief Wrapper around strftime() or strftime_l() - * depending upon how our build is configured. +/* + * Wrapper around strftime() or strftime_l() + * depending upon how our build is configured. * - * \param s String target buffer - * \param max Maximum size of string target buffer - * \param format strftime() format - * \param tm Input date/time + * s String target buffer + * max Maximum size of string target buffer + * format strftime() format + * tm Input date/time */ size_t wc_strftime(char *s, size_t max, const char *format, const struct tm *tm) { @@ -38,11 +34,8 @@ size_t wc_strftime(char *s, size_t max, const char *format, const struct tm *tm) } -/** - * \brief Format a date/time stamp for output - * \param buf the output buffer - * \param thetime time to convert to string - * \param brief do we want compact view????? +/* + * Format a date/time stamp for output */ void webcit_fmt_date(char *buf, time_t thetime, int brief) { @@ -50,7 +43,7 @@ void webcit_fmt_date(char *buf, time_t thetime, int brief) struct tm today_tm; time_t today_timet; int time_format; - + time_format = get_time_format_cached (); today_timet = time(NULL); localtime_r(&today_timet, &today_tm); @@ -59,7 +52,7 @@ void webcit_fmt_date(char *buf, time_t thetime, int brief) if (brief) { - /** If date == today, show only the time */ + /* If date == today, show only the time */ if ((tm.tm_year == today_tm.tm_year) &&(tm.tm_mon == today_tm.tm_mon) &&(tm.tm_mday == today_tm.tm_mday)) { @@ -68,14 +61,14 @@ void webcit_fmt_date(char *buf, time_t thetime, int brief) else wc_strftime(buf, 32, "%l:%M%p", &tm); } - /** Otherwise, for messages up to 6 months old, show the month and day, and the time */ + /* Otherwise, for messages up to 6 months old, show the month and day, and the time */ else if (today_timet - thetime < 15552000) { if (time_format == WC_TIMEFORMAT_24) wc_strftime(buf, 32, "%b %d %k:%M", &tm); else wc_strftime(buf, 32, "%b %d %l:%M%p", &tm); } - /** older than 6 months, show only the date */ + /* older than 6 months, show only the date */ else { wc_strftime(buf, 32, "%b %d %Y", &tm); } @@ -89,8 +82,8 @@ void webcit_fmt_date(char *buf, time_t thetime, int brief) } -/** - * \brief learn the users timeformat preference. +/* + * learn the users timeformat preference. */ int get_time_format_cached (void) { @@ -108,10 +101,10 @@ int get_time_format_cached (void) return *time_format_cache; } -/** - * \brief Format TIME ONLY for output - * \param buf the output buffer - * \param thetime time to format into buf +/* + * Format TIME ONLY for output + * buf the output buffer + * thetime time to format into buf */ void fmt_time(char *buf, time_t thetime) { @@ -143,13 +136,11 @@ void fmt_time(char *buf, time_t thetime) -/** - * \brief Break down the timestamp used in HTTP headers +/* + * Break down the timestamp used in HTTP headers * Should read rfc1123 and rfc850 dates OK - * \todo FIXME won't read asctime + * FIXME won't read asctime * Doesn't understand timezone, but we only should be using GMT/UTC anyway - * \param buf time to parse - * \return the time found in buf */ time_t httpdate_to_timestamp(char *buf) { @@ -168,62 +159,62 @@ time_t httpdate_to_timestamp(char *buf) for (; *c != ' ' && *c != '-'; c++); c++; - /** Get month */ + /* Get month */ switch (*c) { - case 'A': /** April, August */ + case 'A': /* April, August */ tt.tm_mon = (c[1] == 'p') ? 3 : 7; break; - case 'D': /** December */ + case 'D': /* December */ tt.tm_mon = 11; break; - case 'F': /** February */ + case 'F': /* February */ tt.tm_mon = 1; break; - case 'M': /** March, May */ + case 'M': /* March, May */ tt.tm_mon = (c[2] == 'r') ? 2 : 4; break; - case 'J': /** January, June, July */ + case 'J': /* January, June, July */ tt.tm_mon = (c[2] == 'n') ? ((c[1] == 'a') ? 0 : 5) : 6; break; - case 'N': /** November */ + case 'N': /* November */ tt.tm_mon = 10; break; - case 'O': /** October */ + case 'O': /* October */ tt.tm_mon = 9; break; - case 'S': /** September */ + case 'S': /* September */ tt.tm_mon = 8; break; default: return 42; - break; /** NOTREACHED */ + break; /* NOTREACHED */ } c += 4; tt.tm_year = 0; - /** Get year */ + /* Get year */ tt.tm_year = atoi(c); for (; *c != ' '; c++); c++; if (tt.tm_year >= 1900) tt.tm_year -= 1900; - /** Get hour */ + /* Get hour */ tt.tm_hour = atoi(c); for (; *c != ':'; c++); c++; - /** Get minute */ + /* Get minute */ tt.tm_min = atoi(c); for (; *c != ':'; c++); c++; - /** Get second */ + /* Get second */ tt.tm_sec = atoi(c); for (; *c && *c != ' '; c++); - /** Got everything; let's go */ - /** First, change to UTC */ + /* Got everything; let's go */ + /* First, change to UTC */ if (getenv("TZ")) snprintf(tz, 256, "TZ=%s", getenv("TZ")); else @@ -237,6 +228,3 @@ time_t httpdate_to_timestamp(char *buf) } - - -/*@}*/ diff --git a/webcit/webserver.c b/webcit/webserver.c index 91dc4d12e..2bb927030 100644 --- a/webcit/webserver.c +++ b/webcit/webserver.c @@ -670,9 +670,6 @@ int main(int argc, char **argv) strcpy(uds_listen_path, ""); - if (getenv("TZ") == NULL) - putenv("TZ=UTC"); - /* Parse command line */ #ifdef HAVE_OPENSSL while ((a = getopt(argc, argv, "h:i:p:t:x:dD:cfs")) != EOF) -- 2.39.2