#!/usr/bin/perl
-# By Simon Tatham
+# Originally by Simon Tatham
+# Modified by Richard Kettlewell, Colin Watson, Ian Jackson
require 5.002;
use Socket;
$verbose=1, shift @ARGV if $ARGV[0] eq "-v";
-die "usage: nntpid messageid\n" if !defined $ARGV[0];
-$mid = $ARGV[0];
-$mid =~ s/^<//;
-$mid =~ s/>$//;
-$mid = "<$mid>";
-
$ns=$ENV{'NNTPSERVER'};
if (!defined $ns or !length $ns) {
$ns = `cat /etc/nntpserver`;
&docmd("MODE READER");
# some servers require a GROUP before an ARTICLE command
&docmd("GROUP misc.misc");
-&docmd("ARTICLE $mid");
-while (1) {
- &getline;
- s/[\r\n]//g;
- last if /^\.$/;
- s/^\.//;
- print STDOUT "$_\n";
+
+if(@ARGV == 0) {
+ while(<>) {
+ s/(^\s+|\s+$)//gs;
+ lookup($_);
+ }
+} else {
+ while (@ARGV) {
+ my $item = shift @ARGV;
+ if($item !~ /[\@:]/ and not defined $group) {
+ # maybe a bare group followed by an article number
+ die unless @ARGV;
+ my $number = shift @ARGV;
+ $item = "$item $number";
+ }
+ lookup($item);
+ }
}
+
&docmd("QUIT");
close S;
+sub lookup {
+ my $mid = shift;
+
+ if($mid !~ /\@/ and $mid =~ /^(.*)[: ](\d+)$/) {
+ my ($g, $n) = ($1, $2);
+ &docmd("GROUP $g");
+ &docmd("ARTICLE $n");
+ } else {
+ $mid =~ s/.*\<//;
+ $mid =~ s/\>.*//;
+ &docmd("ARTICLE <$mid>");
+ }
+
+ my $fh= 'STDOUT';
+ if (-t $fh) {
+ my $lesscmd= $ENV{'NNTPID_PAGER'};
+ $lesscmd= 'less' unless defined $lesscmd;
+ open LESS, "|-", 'sh','-c',$lesscmd or die $!;
+ $fh= 'LESS';
+ }
+
+ while (1) {
+ &getline;
+ s/[\r\n]//g;
+ last if /^\.$/;
+ s/^\.//;
+ print $fh "$_\n";
+ }
+
+ if ($fh ne 'STDOUT') {
+ close $fh or die "$? $!";
+ }
+}
+
sub putline {
my ($line) = @_;
print STDERR ">>> $line\n" if $verbose;
sub docmd {
my ($cmd) = @_;
- while (1) {
+ for my $n (0,1) {
&putline($cmd);
&getline;
if ($code eq "480") { &auth; } else { last; }