From b0fd4b098a34f490c29abdbd8cecaed0ce545f83 Mon Sep 17 00:00:00 2001 From: corvid Date: Wed, 20 Jan 2010 03:16:35 +0000 Subject: cookies improve clock skew handling --- dpi/cookies.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'dpi') diff --git a/dpi/cookies.c b/dpi/cookies.c index 207e3bba..1d40ddf0 100644 --- a/dpi/cookies.c +++ b/dpi/cookies.c @@ -656,20 +656,17 @@ static time_t Cookies_expires_attr(char *value, const char *server_date) time_t server_time = Cookies_create_timestamp(server_date); if (server_time) { - time_t now = time(NULL); - time_t client_time = exptime + now - server_time; + time_t local_shift = time(NULL) - server_time; - if (server_time == exptime) { - exptime = now; - } else if ((exptime > now) == (client_time > now)) { - exptime = client_time; - } else { + if ((exptime > 0 && local_shift > 0 && (exptime + local_shift < 0)) || + (exptime < 0 && local_shift < 0 && (exptime + local_shift > 0))) { /* Don't want to wrap around at the extremes of representable * values thanks to clock skew. */ - MSG("At %ld, %ld was trying to turn into %ld\n", - (long)now, (long)exptime, - (long)client_time); + MSG("Time %ld was trying to turn into %ld\n", (long)exptime, + (long)(exptime + local_shift)); + } else { + exptime += local_shift; } } } -- cgit v1.2.3