diff options
author | Eric Wong <e@80x24.org> | 2015-09-19 02:03:40 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-09-19 04:18:44 +0000 |
commit | b9e80e83a18bb139f02e598576b2596b340b6ebe (patch) | |
tree | 9b91913f7dfd970a06e0b5477b31d6a6d4a44677 /lib/PublicInbox/NNTP.pm | |
parent | 0ab6aa2a5a3aa95bf9946611c25e8ac4254e37fb (diff) | |
download | public-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/PublicInbox/NNTP.pm')
-rw-r--r-- | lib/PublicInbox/NNTP.pm | 19 |
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; |