NetBSD/gnu/dist/postfix/mantools/xpostdef
2006-07-19 01:16:27 +00:00

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/&/\&amp;/g;
$defval =~ s/</\&lt;/g;
$defval =~ s/>/\&gt;/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";
}