From 01af7ca10ae9a33248f18be92e3251d08b94d7fb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 22 Sep 2015 10:09:43 +0000 Subject: nntp: support YYYYMMDD dates for commands RFC 3977 supports YYYYMMDD dates while retaining backwards compatibility for old YYMMDD dates. --- lib/PublicInbox/NNTP.pm | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 91b10f20..bc8d6eda 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -169,22 +169,26 @@ sub cmd_listgroup ($;$) { sub parse_time ($$;$) { my ($date, $time, $gmt) = @_; use Time::Local qw(); - my ($YY, $MM, $DD) = unpack('A2A2A2', $date); my ($hh, $mm, $ss) = unpack('A2A2A2', $time); if (defined $gmt) { $gmt =~ /\A(?:UTC|GMT)\z/i or die "GM invalid: $gmt\n"; $gmt = 1; } my @now = $gmt ? gmtime : localtime; - if ($YY > strftime('%y', @now)) { - my $cur_year = $now[5] + 1900; - $YY += int($cur_year / 1000) * 1000 - 100; + my ($YYYY, $MM, $DD); + if (length($date) == 8) { # RFC 3977 allows YYYYMMDD + ($YYYY, $MM, $DD) = unpack('A4A2A2', $date); + } else { # legacy clients send YYMMDD + ($YYYY, $MM, $DD) = unpack('A2A2A2', $date); + if ($YYYY > strftime('%y', @now)) { + my $cur_year = $now[5] + 1900; + $YYYY += int($cur_year / 1000) * 1000 - 100; + } } - if ($gmt) { - Time::Local::timegm($ss, $mm, $hh, $DD, $MM - 1, $YY); + Time::Local::timegm($ss, $mm, $hh, $DD, $MM - 1, $YYYY); } else { - Time::Local::timelocal($ss, $mm, $hh, $DD, $MM - 1, $YY); + Time::Local::timelocal($ss, $mm, $hh, $DD, $MM - 1, $YYYY); } } -- cgit v1.2.3-24-ge0c7