From 30a88a6629af3146f68f9fe1f13054b7633559bf Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 18 Sep 2021 09:33:30 +0000 Subject: net_reader: support imaps:// w/ socks5h:// proxy While Non-TLS IMAP worked perfectly with IO::Socket::Socks and Mail::IMAPClient; we need to wrap the IO::Socket::Socks object with IO::Socket::SSL before handing it to Mail::IMAPClient. --- lib/PublicInbox/NetReader.pm | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index 8eff847e..a5aab650 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -43,21 +43,26 @@ EOM sub mic_new ($$$$) { my ($self, $mic_arg, $sec, $uri) = @_; - my %mic_arg = %$mic_arg; + my %mic_arg = (%$mic_arg, Keepalive => 1); my $sa = $self->{cfg_opt}->{$sec}->{-proxy_cfg} || $self->{-proxy_cli}; if ($sa) { # this `require' needed for worker[1..Inf], since socks_args # only got called in worker[0] require IO::Socket::Socks; - - my %opt = %$sa; + my %opt = (%$sa, Keepalive => 1); $opt{SocksDebug} = 1 if $mic_arg{Debug}; $opt{ConnectAddr} = delete $mic_arg{Server}; $opt{ConnectPort} = delete $mic_arg{Port}; - $mic_arg{Socket} = IO::Socket::Socks->new(%opt) or die - "E: <$$uri> ".eval('$IO::Socket::Socks::SOCKS_ERROR'); + my $s = IO::Socket::Socks->new(%opt) or die + "E: <$uri> ".eval('$IO::Socket::Socks::SOCKS_ERROR'); + if ($mic_arg->{Ssl}) { # for imaps:// + require IO::Socket::SSL; + $s = IO::Socket::SSL->start_SSL($s) or die + "E: <$uri> ".(IO::Socket::SSL->errstr // ''); + } + $mic_arg{Socket} = $s; } - PublicInbox::IMAPClient->new(%mic_arg, Keepalive => 1); + PublicInbox::IMAPClient->new(%mic_arg); } sub auth_anon_cb { '' }; # for Mail::IMAPClient::Authcallback @@ -103,7 +108,6 @@ sub mic_for ($$$$) { # mic = Mail::IMAPClient my $mic_arg = { Port => $uri->port, Server => $host, - Ssl => $uri->scheme eq 'imaps', %$common, # may set Starttls, Compress, Debug .... }; $mic_arg->{Ssl} = 1 if $uri->scheme eq 'imaps'; -- cgit v1.2.3-24-ge0c7