X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FDaemon.pm;h=bceae6e5699f5d13412f7cdc4e544074b58fd1d7;hb=6d01d5b60dbfc3319092cebdda7c3a371eafbbc6;hp=13cce1ec51abcf3499363e388b359db6bd7f4a1a;hpb=93a7b219d58aad86438cbf3cbf4318a889831ac1;p=public-inbox.git diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 13cce1ec..bceae6e5 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -32,8 +32,8 @@ my %tls_opt; # scheme://sockname => args for IO::Socket::SSL->start_SSL my $reexec_pid; my ($uid, $gid); my ($default_cert, $default_key); -my %KNOWN_TLS = ( 443 => 'https', 563 => 'nntps', 993 => 'imaps' ); -my %KNOWN_STARTTLS = ( 119 => 'nntp', 143 => 'imap' ); +my %KNOWN_TLS = (443 => 'https', 563 => 'nntps', 993 => 'imaps', 995 =>'pop3s'); +my %KNOWN_STARTTLS = (110 => 'pop3', 119 => 'nntp', 143 => 'imap'); sub accept_tls_opt ($) { my ($opt_str) = @_; @@ -77,7 +77,7 @@ sub accept_tls_opt ($) { sub load_mod ($) { my ($scheme) = @_; - my $modc = "PublicInbox::\U$1"; + my $modc = "PublicInbox::\U$scheme"; my $mod = $modc.'D'; eval "require $mod"; # IMAPD|HTTPD|NNTPD|POP3D die $@ if $@; @@ -155,7 +155,7 @@ EOF $tls_opt{"$scheme://$l"} = accept_tls_opt($1); } elsif (defined($default_cert)) { $tls_opt{"$scheme://$l"} = accept_tls_opt(''); - } elsif ($scheme =~ /\A(?:https|imaps|imaps)\z/) { + } elsif ($scheme =~ /\A(?:https|imaps|nntps|pop3s)\z/) { die "$orig specified w/o cert=\n"; } $scheme =~ /\A(http|imap|nntp|pop3)/ and @@ -204,9 +204,11 @@ EOF for my $sockname (@inherited_names) { $sockname =~ /:([0-9]+)\z/ or next; if (my $scheme = $KNOWN_TLS{$1}) { + $xnetd->{$sockname} = load_mod(substr($scheme, 0, -1)); $tls_opt{"$scheme://$sockname"} ||= accept_tls_opt(''); } elsif (($scheme = $KNOWN_STARTTLS{$1})) { - next if $tls_opt{"$scheme://$sockname"}; + $xnetd->{$sockname} = load_mod($scheme); + $tls_opt{"$scheme://$sockname"} ||= accept_tls_opt(''); $tls_opt{''} ||= accept_tls_opt(''); } } @@ -618,9 +620,9 @@ sub daemon_loop ($) { while (my ($k, $v) = each %tls_opt) { my $l = $k; $l =~ s!\A([^:]+)://!!; - my $scheme = $1; + my $scheme = $1 // ''; my $xn = $xnetd->{$l} // $xnetd->{''}; - if ($scheme =~ s!\A(?:https|imaps|nntps)!!) { + if ($scheme =~ m!\A(?:https|imaps|nntps|pop3s)!) { $post_accept{$l} = tls_start_cb($v, $xn->{post_accept}); } elsif ($xn->{tlsd}) { # STARTTLS, $k eq '' is OK $xn->{tlsd}->{accept_tls} = $v;