From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 15F261F560 for ; Tue, 3 Oct 2023 06:43:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1696315433; bh=JX1sMRc64d4zK8wTkZYFrV+56XM1L9JvgyJHlWaJpFc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=5jno+9RZrsOv1XMvPQL3BdnvbW9RL4aVImm0YGNAU6CsDa50bX/6EbWgjMo/SGGSn 7d2MdgxodXbsZaB1SY3fsxGh5kLlN46OWAtCeR1M2ykKhz/JoDK2aHZY9kBoHTLKLW UMjqClWbV4tNcB9o9XMgnFj/zil2b3YnUP/LKqRQ= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/8] net_reader: bail out on NNTP SOCKS connection failure Date: Tue, 3 Oct 2023 06:43:45 +0000 Message-ID: <20231003064352.2902298-2-e@80x24.org> In-Reply-To: <20231003064352.2902298-1-e@80x24.org> References: <20231003064352.2902298-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: It takes some effort to get Net::NNTP and IO::Socket::Socks to place nice together, but we don't want the setsockopt call to fail on an undefined value. So die with an error that tries to show various possible error sources. $SOCKS_ERROR is a special variable, so even using `//' (defined-or) operator isn't enough to squelch warnings about using it in its uninitialized state. --- lib/PublicInbox/NetNNTPSocks.pm | 10 ++++++---- lib/PublicInbox/NetReader.pm | 3 +-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/PublicInbox/NetNNTPSocks.pm b/lib/PublicInbox/NetNNTPSocks.pm index fcd2e580..5b15dd59 100644 --- a/lib/PublicInbox/NetNNTPSocks.pm +++ b/lib/PublicInbox/NetNNTPSocks.pm @@ -17,16 +17,18 @@ sub new_socks { local %OPT = map {; defined($opt{$_}) ? ($_ => $opt{$_}) : () } @SOCKS_KEYS; - Net::NNTP->new(%opt); # this calls our new() below: + no warnings 'uninitialized'; # needed for $SOCKS_ERROR + Net::NNTP->new(%opt) // die "errors: \$!=$! SOCKS=", + eval('$IO::Socket::Socks::SOCKS_ERROR // ""'), + ', SSL=', + (eval('IO::Socket::SSL->errstr') // ''), "\n"; } # called by Net::NNTP->new sub new { my ($self, %opt) = @_; @OPT{qw(ConnectAddr ConnectPort)} = @opt{qw(PeerAddr PeerPort)}; - my $ret = $self->SUPER::new(%OPT) or - die 'SOCKS error: '.eval('$IO::Socket::Socks::SOCKS_ERROR'); - $ret; + $self->SUPER::new(%OPT); } 1; diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index 6802fa72..32e4c20f 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -180,8 +180,7 @@ sub nn_new ($$$) { if (defined $nn_arg->{ProxyAddr}) { require PublicInbox::NetNNTPSocks; $nn_arg->{SocksDebug} = 1 if $nn_arg->{Debug}; - eval { $nn = PublicInbox::NetNNTPSocks->new_socks(%$nn_arg) }; - die "E: <$uri> $@\n" if $@; + $nn = PublicInbox::NetNNTPSocks->new_socks(%$nn_arg) or return; } else { $nn = Net::NNTP->new(%$nn_arg) or return; }