From 8fd41797b24736dfdccfacc5acc473234a29758a Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 16 Jun 2020 22:31:20 +0000 Subject: daemon: use ->can to check for IO::Socket::SSL Doing a ref($obj) string comparison ties us to IO::Socket::SSL (and OpenSSL) In the future, we may support GnuTLS or other TLS implementations. This was already done in the IMAP code. --- lib/PublicInbox/DS.pm | 6 +++--- lib/PublicInbox/HTTP.pm | 2 +- lib/PublicInbox/NNTP.pm | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 01c8917e..b7753e1a 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -415,7 +415,7 @@ sub send_tmpio ($$) { } sub epbit ($$) { # (sock, default) - ref($_[0]) eq 'IO::Socket::SSL' ? PublicInbox::TLS::epollbit() : $_[1]; + $_[0]->can('stop_SSL') ? PublicInbox::TLS::epollbit() : $_[1]; } # returns 1 if done, 0 if incomplete @@ -569,7 +569,7 @@ sub msg_more ($$) { my $wbuf = $self->{wbuf}; if (MSG_MORE && (!defined($wbuf) || !scalar(@$wbuf)) && - ref($sock) ne 'IO::Socket::SSL') { + !$sock->can('stop_SSL')) { my $n = send($sock, $_[1], MSG_MORE); if (defined $n) { my $nlen = bytes::length($_[1]) - $n; @@ -619,7 +619,7 @@ sub shutdn_tls_step ($) { sub shutdn ($) { my ($self) = @_; my $sock = $self->{sock} or return; - if (ref($sock) eq 'IO::Socket::SSL') { + if ($sock->can('stop_SSL')) { shutdn_tls_step($self); } else { $self->close; diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index b73ce2d7..6ccf2059 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -59,7 +59,7 @@ sub new ($$$) { my $self = fields::new($class); my $ev = EPOLLIN; my $wbuf; - if (ref($sock) eq 'IO::Socket::SSL' && !$sock->accept_SSL) { + if ($sock->can('accept_SSL') && !$sock->accept_SSL) { return CORE::close($sock) if $! != EAGAIN; $ev = PublicInbox::TLS::epollbit(); $wbuf = [ \&PublicInbox::DS::accept_tls_step ]; diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index bffd773c..be3bddc3 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -47,7 +47,7 @@ sub new ($$$) { my $self = fields::new($class); my $ev = EPOLLIN; my $wbuf; - if (ref($sock) eq 'IO::Socket::SSL' && !$sock->accept_SSL) { + if ($sock->can('accept_SSL') && !$sock->accept_SSL) { return CORE::close($sock) if $! != EAGAIN; $ev = PublicInbox::TLS::epollbit(); $wbuf = [ \&PublicInbox::DS::accept_tls_step, \&greet ]; @@ -97,7 +97,7 @@ sub process_line ($$) { sub cmd_capabilities ($;$) { my ($self, undef) = @_; my $res = $CAPABILITIES; - if (ref($self->{sock}) ne 'IO::Socket::SSL' && + if (!$self->{sock}->can('accept_SSL') && $self->{nntpd}->{accept_tls}) { $res .= "STARTTLS\r\n"; } @@ -896,7 +896,7 @@ sub cmd_starttls ($) { my ($self) = @_; my $sock = $self->{sock} or return; # RFC 4642 2.2.1 - return r502 if (ref($sock) eq 'IO::Socket::SSL' || $self->compressed); + return r502 if ($sock->can('accept_SSL') || $self->compressed); my $opt = $self->{nntpd}->{accept_tls} or return '580 can not initiate TLS negotiation'; res($self, '382 Continue with TLS negotiation'); -- cgit v1.2.3-24-ge0c7