122 lines
2.7 KiB
Perl
Executable File
122 lines
2.7 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
# Usage: xpostdef postconf.proto >postconf.proto.new
|
|
|
|
# Update parameter default values in postconf prototype file.
|
|
|
|
$POSTCONF="postconf";
|
|
|
|
# Read all the default parameter values. This also provides us with
|
|
# a list of all the parameters that postconf knows about.
|
|
|
|
open(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF -d: !$\n";
|
|
while(<POSTCONF>) {
|
|
chop;
|
|
if (($name, $defval) = split(/\s+=\s+/, $_, 2)) {
|
|
$defval =~ s/&/\&/g;
|
|
$defval =~ s/</\</g;
|
|
$defval =~ s/>/\>/g;
|
|
$defval =~ s/\s+$//;
|
|
$defaults{$name} = $defval;
|
|
} else {
|
|
die "unexpected $POSTCONF output: $_\n";
|
|
}
|
|
}
|
|
close(POSTCONF) || die "$POSTCONF failed: $!\n";
|
|
|
|
# Censor out default values that are system or version dependent, or
|
|
# that don't display well.
|
|
|
|
$censored = <<EOF;
|
|
alias_database
|
|
alias_maps
|
|
command_directory
|
|
command_expansion_filter
|
|
config_directory
|
|
daemon_directory
|
|
default_database_type
|
|
default_rbl_reply
|
|
execution_directory_expansion_filter
|
|
export_environment
|
|
forward_expansion_filter
|
|
forward_path
|
|
html_directory
|
|
import_environment
|
|
mail_release_date
|
|
mail_spool_directory
|
|
mail_version
|
|
mailbox_delivery_lock
|
|
mailq_path
|
|
manpage_directory
|
|
mydomain
|
|
myhostname
|
|
mynetworks
|
|
newaliases_path
|
|
parent_domain_matches_subdomains
|
|
proxy_read_maps
|
|
queue_directory
|
|
readme_directory
|
|
sendmail_path
|
|
smtpd_expansion_filter
|
|
tls_random_source
|
|
virtual_mailbox_lock
|
|
milter_connect_macros
|
|
milter_helo_macros
|
|
milter_mail_macros
|
|
milter_rcpt_macros
|
|
milter_data_macros
|
|
milter_unknown_command_macros
|
|
milter_end_of_data_macros
|
|
EOF
|
|
|
|
for $name (split(/\s+/, $censored)) {
|
|
$defaults{$name} = "see \"postconf -d\" output";
|
|
}
|
|
|
|
# Process the postconf prototype file, and update default values
|
|
# with output from the postconf command. Leave alone any defaults
|
|
# that postconf didn't know about. This can happen when conditional
|
|
# features have been compile time disabled.
|
|
|
|
$name = $defval = $text = $line = "";
|
|
|
|
while(<>) {
|
|
if (/^%PARAM/) {
|
|
|
|
# Print the updated parameter text. Keep the old default if
|
|
# postconf doesn't have a suitable one.
|
|
|
|
if ($name) {
|
|
$defval = $defaults{$name} if (defined($defaults{$name}));
|
|
print "%PARAM $name $defval\n";
|
|
}
|
|
print $text;
|
|
|
|
# Reset the parameter name, default, and accumulated text.
|
|
|
|
$name = $defval = $text = $line = "";
|
|
|
|
# Accumulate the parameter name and default value.
|
|
|
|
do {
|
|
$_ =~ s/\s+$//;
|
|
$line .= " " . $_;
|
|
} while(($_ = <POSTCONF>) && /^../);
|
|
($junk, $class, $name, $defval) = split(/\s+/, $line, 4);
|
|
} else {
|
|
|
|
# Accumulate the text in the parameter definition.
|
|
|
|
$_ =~ s/\s+$/\n/;
|
|
$text .= $_;
|
|
|
|
}
|
|
}
|
|
|
|
# Fix the last parameter.
|
|
|
|
if ($name && $text) {
|
|
$defval = $defaults{$name} if (defined($defaults{$name}));
|
|
print "%PARAM $name $defval\n$text";
|
|
}
|