diff options
author | Eric Wong <e@80x24.org> | 2019-06-30 22:37:00 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-06-30 22:37:00 +0000 |
commit | 0f1da9d213e16946371b5c140b1c55b7231a8cd5 (patch) | |
tree | ce3c88f954f861b3e09c61a076f0d4685afb2bdd /lib/PublicInbox | |
parent | 15f98820ca5434f40410a6fceed1e37e50ab68a7 (diff) | |
parent | 5769d488526b88a394b4b6741e77dd0e7441d248 (diff) | |
download | public-inbox-0f1da9d213e16946371b5c140b1c55b7231a8cd5.tar.gz |
* origin/nntp: nntp: add support for CAPABILITIES command nntp: remove DISABLED hash checks
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/NNTP.pm | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 26bc679f..d106e315 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -31,9 +31,14 @@ my @OVERVIEW = qw(Subject From Date Message-ID References Xref); my $OVERVIEW_FMT = join(":\r\n", @OVERVIEW, qw(Bytes Lines)) . ":\r\n"; my $LIST_HEADERS = join("\r\n", @OVERVIEW, qw(:bytes :lines Xref To Cc)) . "\r\n"; - -# disable commands with easy DoS potential: -my %DISABLED; # = map { $_ => 1 } qw(xover list_overview_fmt newnews xhdr); +my $CAPABILITIES = <<""; +101 Capability list:\r +VERSION 2\r +READER\r +NEWNEWS\r +LIST ACTIVE ACTIVE.TIMES NEWSGROUPS OVERVIEW.FMT\r +HDR\r +OVER\r my $EXPMAP; # fd -> [ idle_time, $self ] my $expt; @@ -105,10 +110,9 @@ sub process_line ($$) { my ($self, $l) = @_; my ($req, @args) = split(/[ \t]/, $l); return 1 unless defined($req); # skip blank line - $req = lc($req); $req = eval { no strict 'refs'; - $req = $DISABLED{$req} ? undef : *{'cmd_'.$req}{CODE}; + *{'cmd_'.lc($req)}{CODE}; }; return res($self, '500 command not recognized') unless $req; return res($self, r501) unless args_ok($req, scalar @args); @@ -125,6 +129,17 @@ sub process_line ($$) { res($self, $res); } +# The keyword argument is not used (rfc3977 5.2.2) +sub cmd_capabilities ($;$) { + my ($self, undef) = @_; + my $res = $CAPABILITIES; + if (ref($self->{sock}) ne 'IO::Socket::SSL' && + $self->{nntpd}->{accept_tls}) { + $res .= "STARTTLS\r\n"; + } + $res .= '.'; +} + sub cmd_mode ($$) { my ($self, $arg) = @_; $arg = uc $arg; @@ -187,7 +202,6 @@ sub cmd_list ($;$$) { my $arg = shift @args; $arg =~ tr/A-Z./a-z_/; $arg = "list_$arg"; - return r501 if $DISABLED{$arg}; $arg = eval { no strict 'refs'; |