- my %xn = map { $_ => $mod->can($_) } qw(refresh post_accept);
- $xn{tlsd} = $mod->new if $mod->can('refresh_groups'); #!HTTPD
- my $tlsd = $xn{tlsd};
- $xn{refresh} //= sub { $tlsd->refresh_groups(@_) };
- $xn{post_accept} //= sub { $modc->new($_[0], $tlsd) };
- $xn{af_default} = 'httpready' if $modc eq 'PublicInbox::HTTP';
+ my %xn;
+ my $tlsd = $xn{tlsd} = $mod->new;
+ my %env = map {
+ substr($_, length('env.')) => $opt->{$_}->[-1];
+ } grep(/\Aenv\./, keys %$opt);
+ $xn{refresh} = sub {
+ my ($sig) = @_;
+ local @ENV{keys %env} = values %env;
+ $tlsd->refresh_groups($sig);
+ };
+ $xn{post_accept} = $tlsd->can('post_accept_cb') ?
+ $tlsd->post_accept_cb : sub { $modc->new($_[0], $tlsd) };
+ my @paths = qw(out err);
+ if ($modc eq 'PublicInbox::HTTP') {
+ @paths = qw(err);
+ $xn{af_default} = 'httpready';
+ if (my $p = $opt->{psgi}) {
+ die "multiple psgi= options specified\n" if @$p > 1;
+ check_absolute('psgi=', $p->[0]) if $daemonize;
+ $tlsd->{psgi} = $p->[0];
+ }
+ }
+ for my $f (@paths) {
+ my $p = $opt->{$f} or next;
+ die "multiple $f= options specified\n" if @$p > 1;
+ check_absolute("$f=", $p->[0]) if $daemonize;
+ $p = File::Spec->canonpath($p->[0]);
+ open_log_path(my $fh, $p);
+ $tlsd->{$f} = $logs{$p} = $fh;
+ }