From 5769d488526b88a394b4b6741e77dd0e7441d248 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 30 Jun 2019 04:27:55 +0000 Subject: nntp: add support for CAPABILITIES command Some clients may rely on this for STARTTLS support. --- t/nntpd-tls.t | 18 ++++++++++++++++++ t/nntpd.t | 5 +++++ 2 files changed, 23 insertions(+) (limited to 't') diff --git a/t/nntpd-tls.t b/t/nntpd-tls.t index 82b63f3e..4cf53daa 100644 --- a/t/nntpd-tls.t +++ b/t/nntpd-tls.t @@ -128,6 +128,8 @@ for my $args ( my $c = Net::NNTP->new($nntps_addr, %o, SSL => 1); my $list = $c->list; is_deeply($list, $expect, 'NNTPS LIST works'); + unlike(get_capa($c), qr/\bSTARTTLS\r\n/, + 'STARTTLS not advertised for NNTPS'); is($c->command('QUIT')->response(), Net::Cmd::CMD_OK(), 'QUIT works'); is(0, sysread($c, my $buf, 1), 'got EOF after QUIT'); @@ -139,6 +141,8 @@ for my $args ( is($c->code, 382, 'got 382 for STARTTLS'); $list = $c->list; is_deeply($list, $expect, 'LIST works after STARTTLS'); + unlike(get_capa($c), qr/\bSTARTTLS\r\n/, + 'STARTTLS not advertised after STARTTLS'); # Net::NNTP won't let us do dumb things, but we need to test # dumb things, so use Net::Cmd directly: @@ -149,6 +153,7 @@ for my $args ( # STARTTLS with bad hostname $o{SSL_hostname} = $o{SSL_verifycn_name} = 'server.invalid'; $c = Net::NNTP->new($starttls_addr, %o); + like(get_capa($c), qr/\bSTARTTLS\r\n/, 'STARTTLS advertised'); $list = $c->list; is_deeply($list, $expect, 'plain LIST works again'); ok(!$c->starttls, 'STARTTLS fails with bad hostname'); @@ -217,4 +222,17 @@ for my $args ( } } done_testing(); + +sub get_capa { + my ($sock) = @_; + syswrite($sock, "CAPABILITIES\r\n"); + my $capa = ''; + do { + my $r = sysread($sock, $capa, 8192, length($capa)); + die "unexpected: $!" unless defined($r); + die 'unexpected EOF' if $r == 0; + } until $capa =~ /\.\r\n\z/; + $capa; +} + 1; diff --git a/t/nntpd.t b/t/nntpd.t index 0e59de07..1c5ae8d7 100644 --- a/t/nntpd.t +++ b/t/nntpd.t @@ -143,6 +143,11 @@ EOF 'got greeting'); $s->autoflush(1); + syswrite($s, "CAPABILITIES\r\n"); + $buf = read_til_dot($s); + like($buf, qr/\r\nVERSION 2\r\n/s, 'CAPABILITIES works'); + unlike($buf, qr/STARTTLS/s, 'STARTTLS not advertised'); + syswrite($s, "NEWGROUPS 19990424 000000 GMT\r\n"); $buf = read_til_dot($s); like($buf, qr/\A231 list of /, 'newgroups OK'); -- cgit v1.2.3-24-ge0c7