about summary refs log tree commit homepage
diff options
context:
space:
mode:
-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;