From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id A1FD41F458 for ; Tue, 22 Sep 2015 10:09:52 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 6/7] nntp: XHDR fixes for Message-ID lookups Date: Tue, 22 Sep 2015 10:09:47 +0000 Message-Id: <20150922100948.8160-7-e@80x24.org> In-Reply-To: <20150922100948.8160-1-e@80x24.org> References: <20150922100948.8160-1-e@80x24.org> List-Id: We'll require some modifications for HDR support, though. --- lib/PublicInbox/NNTP.pm | 13 +++++++------ t/nntpd.t | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 1286b70..c8ef01e 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -546,9 +546,10 @@ sub xhdr_message_id ($$) { # optimize XHDR Message-ID [range] for slrnpull. my $mm = $self->{ng}->mm; if (defined $range && $range =~ /\A<(.+)>\z/) { # Message-ID - my $n = $mm->num_for($range); + my $n = $mm->num_for($1); + return '430 No article with that message-id' unless $n; more($self, '221 Header follows'); - more($self, "<$range> <$range>") if defined $n; + more($self, "$range $range"); '.'; } else { # numeric range $range = $self->{article} unless defined $range; @@ -575,9 +576,9 @@ sub xhdr_xref ($$) { # optimize XHDR Xref [range] for rtin my $ng = $self->{ng}; my $mm = $ng->mm; if (defined $range && $range =~ /\A<(.+)>\z/) { # Message-ID - my $n = $mm->num_for($range); + my $n = $mm->num_for($1); more($self, '221 Header follows'); - more($self, "<$range> ".xref($ng, $n)) if defined $n; + more($self, "$range ".xref($ng, $n)) if defined $n; '.'; } else { # numeric range $range = $self->{article} unless defined $range; @@ -655,12 +656,12 @@ sub cmd_xhdr ($$;$) { sub xhdr_slow ($$$) { my ($self, $header, $range) = @_; - if (defined $range && $range =~ /\A<(.+)>\z/) { # Message-ID + if (defined $range && $range =~ /\A<.+>\z/) { # Message-ID my $r = $self->art_lookup($range, 2); return $r unless ref $r; more($self, '221 Header follows'); if (defined($r = xhdr($r, $header))) { - more($self, "<$range> $r"); + more($self, "$range $r"); } '.'; } else { # numeric range diff --git a/t/nntpd.t b/t/nntpd.t index d886e3c..090e150 100644 --- a/t/nntpd.t +++ b/t/nntpd.t @@ -95,6 +95,23 @@ EOF is_deeply($list, { $group => [ qw(1 1 n) ] }, 'LIST works'); is_deeply([$n->group($group)], [ qw(0 1 1), $group ], 'GROUP works'); + my $mid = ''; + my %xhdr = ( + 'message-id' => $mid, + 'subject' => 'hihi', + 'date' => 'Thu, 01 Jan 1970 00:00:00 +0000', + 'from' => 'Me ', + 'to' => 'You ', + 'cc' => $addr, + 'xref' => "example.com $group:1" + ); + while (my ($k, $v) = each %xhdr) { + is_deeply($n->xhdr("$k $mid"), { $mid => $v }, + "$k by message-id works"); + is_deeply($n->xhdr("$k 1"), { 1 => $v }, + "$k by article number works"); + } + # TODO: upgrades and such ok(kill('TERM', $pid), 'killed nntpd'); -- EW