about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-09-19 02:03:40 +0000
committerEric Wong <e@80x24.org>2015-09-19 04:18:44 +0000
commitb9e80e83a18bb139f02e598576b2596b340b6ebe (patch)
tree9b91913f7dfd970a06e0b5477b31d6a6d4a44677 /lib
parent0ab6aa2a5a3aa95bf9946611c25e8ac4254e37fb (diff)
downloadpublic-inbox-b9e80e83a18bb139f02e598576b2596b340b6ebe.tar.gz
Lynx seems to rely on this behavior for "ARTICLE <message-id>"

Tested with Lynx Version 2.8.8dev.12 (22 Feb 2012) on Debian wheezy.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/NNTP.pm19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 80adb65c..d513953a 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -330,7 +330,7 @@ sub cmd_quit ($) {
 
 sub art_lookup ($$$) {
         my ($self, $art, $set_headers) = @_;
-        my $ng = $self->{ng} or return '412 no newsgroup has been selected';
+        my $ng = $self->{ng};
         my ($n, $mid);
         my $err;
         if (defined $art) {
@@ -339,10 +339,18 @@ sub art_lookup ($$$) {
                         $n = int($art);
                         goto find_mid;
                 } elsif ($art =~ /\A<([^>]+)>\z/) {
-                        $err = '430 no such article found';
                         $mid = $1;
-                        $n = $ng->mm->num_for($mid);
-                        defined $mid or return $err;
+                        $err = '430 no such article found';
+                        $n = $ng->mm->num_for($mid) if $ng;
+                        goto found if defined $n;
+                        foreach my $g (values %{$self->{nntpd}->{groups}}) {
+                                $n = $g->mm->num_for($mid);
+                                if (defined $n) {
+                                        $ng = $g;
+                                        goto found;
+                                }
+                        }
+                        return $err;
                 } else {
                         return r501;
                 }
@@ -351,10 +359,11 @@ sub art_lookup ($$$) {
                 $n = $self->{article};
                 defined $n or return $err;
 find_mid:
+                $ng or return '412 no newsgroup has been selected';
                 $mid = $ng->mm->mid_for($n);
                 defined $mid or return $err;
         }
-
+found:
         my $o = 'HEAD:' . mid2path($mid);
         my $s = eval { Email::Simple->new($ng->gcf->cat_file($o)) };
         return $err unless $s;