]> Sergey Matveev's repositories - public-inbox.git/commitdiff
nntp: XHDR fixes for Message-ID lookups
authorEric Wong <e@80x24.org>
Tue, 22 Sep 2015 10:09:47 +0000 (10:09 +0000)
committerEric Wong <e@80x24.org>
Tue, 22 Sep 2015 22:12:20 +0000 (22:12 +0000)
We'll require some modifications for HDR support, though.

lib/PublicInbox/NNTP.pm
t/nntpd.t

index 1286b706e9fed021d78da48a9c4aa8113a2921f3..c8ef01e29c00e718aafd1f3eedabaa8699db55cf 100644 (file)
@@ -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
index d886e3c65e71949996decace5456859ea5fa5162..090e150029cf3fd671ad79e3b45cea181fdc2c9a 100644 (file)
--- 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 = '<nntp@example.com>';
+       my %xhdr = (
+               'message-id' => $mid,
+               'subject' => 'hihi',
+               'date' => 'Thu, 01 Jan 1970 00:00:00 +0000',
+               'from' => 'Me <me@example.com>',
+               'to' => 'You <you@example.com>',
+               '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');