xref: /netbsd-src/external/ibm-public/postfix/dist/mantools/xpostdef (revision 41fbaed053f8fbfdf9d2a4ee0a7386a3c83f8505)
1*41fbaed0Stron#!/usr/bin/perl
2*41fbaed0Stron
3*41fbaed0Stron# Usage: xpostdef postconf.proto >postconf.proto.new
4*41fbaed0Stron
5*41fbaed0Stron# Update parameter default values in postconf prototype file.
6*41fbaed0Stron
7*41fbaed0Stron$POSTCONF="postconf";
8*41fbaed0Stron
9*41fbaed0Stron# Read all the default parameter values. This also provides us with
10*41fbaed0Stron# a list of all the parameters that postconf knows about.
11*41fbaed0Stron
12*41fbaed0Stronopen(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF -d: !$\n";
13*41fbaed0Stronwhile(<POSTCONF>) {
14*41fbaed0Stron    chop;
15*41fbaed0Stron    if (($name, $defval) = split(/\s+=\s+/, $_, 2)) {
16*41fbaed0Stron	$defval =~ s/&/\&amp;/g;
17*41fbaed0Stron	$defval =~ s/</\&lt;/g;
18*41fbaed0Stron	$defval =~ s/>/\&gt;/g;
19*41fbaed0Stron	$defval =~ s/\s+$//;
20*41fbaed0Stron	$defaults{$name} = $defval;
21*41fbaed0Stron    } else {
22*41fbaed0Stron	die "unexpected $POSTCONF output: $_\n";
23*41fbaed0Stron    }
24*41fbaed0Stron}
25*41fbaed0Stronclose(POSTCONF) || die "$POSTCONF failed: $!\n";
26*41fbaed0Stron
27*41fbaed0Stron# Censor out default values that are system or version dependent, or
28*41fbaed0Stron# that don't display well.
29*41fbaed0Stron
30*41fbaed0Stron$censored = <<EOF;
31*41fbaed0Stronalias_database
32*41fbaed0Stronalias_maps
33*41fbaed0Stroncommand_directory
34*41fbaed0Stroncommand_expansion_filter
35*41fbaed0Stronconfig_directory
36*41fbaed0Strondaemon_directory
37*41fbaed0Strondefault_database_type
38*41fbaed0Strondefault_rbl_reply
39*41fbaed0Stronexecution_directory_expansion_filter
40*41fbaed0Stronexport_environment
41*41fbaed0Stronforward_expansion_filter
42*41fbaed0Stronforward_path
43*41fbaed0Stronhtml_directory
44*41fbaed0Stronimport_environment
45*41fbaed0Stronmail_release_date
46*41fbaed0Stronmail_spool_directory
47*41fbaed0Stronmail_version
48*41fbaed0Stronmailbox_delivery_lock
49*41fbaed0Stronmailq_path
50*41fbaed0Stronmanpage_directory
51*41fbaed0Stronmydomain
52*41fbaed0Stronmyhostname
53*41fbaed0Stronmynetworks
54*41fbaed0Stronnewaliases_path
55*41fbaed0Stronparent_domain_matches_subdomains
56*41fbaed0Stronproxy_read_maps
57*41fbaed0Stronqueue_directory
58*41fbaed0Stronreadme_directory
59*41fbaed0Stronsendmail_path
60*41fbaed0Stronsmtpd_expansion_filter
61*41fbaed0Strontls_random_source
62*41fbaed0Stronvirtual_mailbox_lock
63*41fbaed0Stronmilter_connect_macros
64*41fbaed0Stronmilter_helo_macros
65*41fbaed0Stronmilter_mail_macros
66*41fbaed0Stronmilter_rcpt_macros
67*41fbaed0Stronmilter_data_macros
68*41fbaed0Stronmilter_unknown_command_macros
69*41fbaed0Stronmilter_end_of_data_macros
70*41fbaed0StronEOF
71*41fbaed0Stron
72*41fbaed0Stronfor $name (split(/\s+/, $censored)) {
73*41fbaed0Stron    $defaults{$name} = "see \"postconf -d\" output";
74*41fbaed0Stron}
75*41fbaed0Stron
76*41fbaed0Stron# Process the postconf prototype file, and update default values
77*41fbaed0Stron# with output from the postconf command. Leave alone any defaults
78*41fbaed0Stron# that postconf didn't know about. This can happen when conditional
79*41fbaed0Stron# features have been compile time disabled.
80*41fbaed0Stron
81*41fbaed0Stron$name = $defval = $text = $line = "";
82*41fbaed0Stron
83*41fbaed0Stronwhile(<>) {
84*41fbaed0Stron    if (/^%PARAM/) {
85*41fbaed0Stron
86*41fbaed0Stron	# Print the updated parameter text. Keep the old default if
87*41fbaed0Stron	# postconf doesn't have a suitable one.
88*41fbaed0Stron
89*41fbaed0Stron	if ($name) {
90*41fbaed0Stron	    $defval = $defaults{$name} if (defined($defaults{$name}));
91*41fbaed0Stron	    print "%PARAM $name $defval\n";
92*41fbaed0Stron	}
93*41fbaed0Stron	print $text;
94*41fbaed0Stron
95*41fbaed0Stron	# Reset the parameter name, default, and accumulated text.
96*41fbaed0Stron
97*41fbaed0Stron	$name = $defval = $text = $line = "";
98*41fbaed0Stron
99*41fbaed0Stron	# Accumulate the parameter name and default value.
100*41fbaed0Stron
101*41fbaed0Stron	do {
102*41fbaed0Stron	    $_ =~ s/\s+$//;
103*41fbaed0Stron	    $line .= " " . $_;
104*41fbaed0Stron	} while(($_ = <POSTCONF>) && /^../);
105*41fbaed0Stron	($junk, $class, $name, $defval) = split(/\s+/, $line, 4);
106*41fbaed0Stron    } else {
107*41fbaed0Stron
108*41fbaed0Stron	# Accumulate the text in the parameter definition.
109*41fbaed0Stron
110*41fbaed0Stron	$_ =~ s/\s+$/\n/;
111*41fbaed0Stron	$text .= $_;
112*41fbaed0Stron
113*41fbaed0Stron    }
114*41fbaed0Stron}
115*41fbaed0Stron
116*41fbaed0Stron# Fix the last parameter.
117*41fbaed0Stron
118*41fbaed0Stronif ($name && $text) {
119*41fbaed0Stron    $defval = $defaults{$name} if (defined($defaults{$name}));
120*41fbaed0Stron    print "%PARAM $name $defval\n$text";
121*41fbaed0Stron}
122