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 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 't/nntpd-tls.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; -- cgit v1.2.3-24-ge0c7