xpostdef revision 1.1 1 1.1 tron #!/usr/bin/perl
2 1.1 tron
3 1.1 tron # Usage: xpostdef postconf.proto >postconf.proto.new
4 1.1 tron
5 1.1 tron # Update parameter default values in postconf prototype file.
6 1.1 tron
7 1.1 tron $POSTCONF="postconf";
8 1.1 tron
9 1.1 tron # Read all the default parameter values. This also provides us with
10 1.1 tron # a list of all the parameters that postconf knows about.
11 1.1 tron
12 1.1 tron open(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF -d: !$\n";
13 1.1 tron while(<POSTCONF>) {
14 1.1 tron chop;
15 1.1 tron if (($name, $defval) = split(/\s+=\s+/, $_, 2)) {
16 1.1 tron $defval =~ s/&/\&/g;
17 1.1 tron $defval =~ s/</\</g;
18 1.1 tron $defval =~ s/>/\>/g;
19 1.1 tron $defval =~ s/\s+$//;
20 1.1 tron $defaults{$name} = $defval;
21 1.1 tron } else {
22 1.1 tron die "unexpected $POSTCONF output: $_\n";
23 1.1 tron }
24 1.1 tron }
25 1.1 tron close(POSTCONF) || die "$POSTCONF failed: $!\n";
26 1.1 tron
27 1.1 tron # Censor out default values that are system or version dependent, or
28 1.1 tron # that don't display well.
29 1.1 tron
30 1.1 tron $censored = <<EOF;
31 1.1 tron alias_database
32 1.1 tron alias_maps
33 1.1 tron command_directory
34 1.1 tron command_expansion_filter
35 1.1 tron config_directory
36 1.1 tron daemon_directory
37 1.1 tron default_database_type
38 1.1 tron default_rbl_reply
39 1.1 tron execution_directory_expansion_filter
40 1.1 tron export_environment
41 1.1 tron forward_expansion_filter
42 1.1 tron forward_path
43 1.1 tron html_directory
44 1.1 tron import_environment
45 1.1 tron mail_release_date
46 1.1 tron mail_spool_directory
47 1.1 tron mail_version
48 1.1 tron mailbox_delivery_lock
49 1.1 tron mailq_path
50 1.1 tron manpage_directory
51 1.1 tron mydomain
52 1.1 tron myhostname
53 1.1 tron mynetworks
54 1.1 tron newaliases_path
55 1.1 tron parent_domain_matches_subdomains
56 1.1 tron proxy_read_maps
57 1.1 tron queue_directory
58 1.1 tron readme_directory
59 1.1 tron sendmail_path
60 1.1 tron smtpd_expansion_filter
61 1.1 tron tls_random_source
62 1.1 tron virtual_mailbox_lock
63 1.1 tron milter_connect_macros
64 1.1 tron milter_helo_macros
65 1.1 tron milter_mail_macros
66 1.1 tron milter_rcpt_macros
67 1.1 tron milter_data_macros
68 1.1 tron milter_unknown_command_macros
69 1.1 tron milter_end_of_data_macros
70 1.1 tron EOF
71 1.1 tron
72 1.1 tron for $name (split(/\s+/, $censored)) {
73 1.1 tron $defaults{$name} = "see \"postconf -d\" output";
74 1.1 tron }
75 1.1 tron
76 1.1 tron # Process the postconf prototype file, and update default values
77 1.1 tron # with output from the postconf command. Leave alone any defaults
78 1.1 tron # that postconf didn't know about. This can happen when conditional
79 1.1 tron # features have been compile time disabled.
80 1.1 tron
81 1.1 tron $name = $defval = $text = $line = "";
82 1.1 tron
83 1.1 tron while(<>) {
84 1.1 tron if (/^%PARAM/) {
85 1.1 tron
86 1.1 tron # Print the updated parameter text. Keep the old default if
87 1.1 tron # postconf doesn't have a suitable one.
88 1.1 tron
89 1.1 tron if ($name) {
90 1.1 tron $defval = $defaults{$name} if (defined($defaults{$name}));
91 1.1 tron print "%PARAM $name $defval\n";
92 1.1 tron }
93 1.1 tron print $text;
94 1.1 tron
95 1.1 tron # Reset the parameter name, default, and accumulated text.
96 1.1 tron
97 1.1 tron $name = $defval = $text = $line = "";
98 1.1 tron
99 1.1 tron # Accumulate the parameter name and default value.
100 1.1 tron
101 1.1 tron do {
102 1.1 tron $_ =~ s/\s+$//;
103 1.1 tron $line .= " " . $_;
104 1.1 tron } while(($_ = <POSTCONF>) && /^../);
105 1.1 tron ($junk, $class, $name, $defval) = split(/\s+/, $line, 4);
106 1.1 tron } else {
107 1.1 tron
108 1.1 tron # Accumulate the text in the parameter definition.
109 1.1 tron
110 1.1 tron $_ =~ s/\s+$/\n/;
111 1.1 tron $text .= $_;
112 1.1 tron
113 1.1 tron }
114 1.1 tron }
115 1.1 tron
116 1.1 tron # Fix the last parameter.
117 1.1 tron
118 1.1 tron if ($name && $text) {
119 1.1 tron $defval = $defaults{$name} if (defined($defaults{$name}));
120 1.1 tron print "%PARAM $name $defval\n$text";
121 1.1 tron }
122