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) = @_;
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 $@;
$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
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('');
}
}
$l =~ s!\A([^:]+)://!!;
my $scheme = $1 // '';
my $xn = $xnetd->{$l} // $xnetd->{''};
- if ($scheme =~ m!\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;