# HG changeset patch # User corvid # Date 1263957395 0 # Node ID 03752405e0a918659451c9839eef5acca4d81f8a # Parent e7571ffc35e1545aa8999de1fc790f1d96a04d96 cookies improve clock skew handling diff -r e7571ffc35e1 -r 03752405e0a9 dpi/cookies.c --- a/dpi/cookies.c Wed Jan 20 00:08:25 2010 +0000 +++ b/dpi/cookies.c Wed Jan 20 03:16:35 2010 +0000 @@ -656,20 +656,17 @@ 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; } } }