about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-09-22 10:09:47 +0000
committerEric Wong <e@80x24.org>2015-09-22 22:12:20 +0000
commitb25ee445c9c66d8e41b889196668bf2b26a54d53 (patch)
treeea4324d6667672c9a5a3ce12b901deef9fdc7b0f
parent3c37d760722019323168cf2cd6425c0fddd76b0c (diff)
downloadpublic-inbox-b25ee445c9c66d8e41b889196668bf2b26a54d53.tar.gz
We'll require some modifications for HDR support, though.
-rw-r--r--lib/PublicInbox/NNTP.pm13
-rw-r--r--t/nntpd.t17
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 1286b706..c8ef01e2 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 d886e3c6..090e1500 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 = '<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');