From: Jo-Philipp Wich Date: Thu, 12 Apr 2018 08:51:51 +0000 (+0200) Subject: options: treat time strings as UTC times X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=commitdiff_plain;h=0e77bf296648c5db92c269c678d27f6846de4e9f;hp=b45e162eca2c6e913318c4552643aae2a973ae3a options: treat time strings as UTC times When parsing user supplied time strings, calculate an UTC time instant by substracting the current zone offset from the result of mktime(3), then use gmtime_r(3) to turn the time_t value back into a sanitized time structure. This ensures that user supplied dates are not interpreted as local time. Fixes FS#1483. Signed-off-by: Jo-Philipp Wich --- diff --git a/options.c b/options.c index b5d5c02..087aa63 100644 --- a/options.c +++ b/options.c @@ -641,6 +641,7 @@ fw3_parse_date(void *ptr, const char *val, bool is_list) { unsigned int year = 1970, mon = 1, day = 1, hour = 0, min = 0, sec = 0; struct tm tm = { 0 }; + time_t ts; char *p; year = strtoul(val, &p, 10); @@ -685,9 +686,11 @@ ret: tm.tm_min = min; tm.tm_sec = sec; - if (mktime(&tm) >= 0) + ts = mktime(&tm) - timezone; + + if (ts >= 0) { - *((struct tm *)ptr) = tm; + gmtime_r(&ts, (struct tm *)ptr); return true; }