Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / conf / postfix-wrapper
blob138fd1453df463fcb9fa42ae28810393edc9242a
1 #!/bin/sh
2 # $NetBSD$
5 #++
6 # NAME
7 # postfix-wrapper 1
8 # SUMMARY
9 # trivial but useful multi-instance manager
10 # SYNOPSIS
11 # postfix command
12 # DESCRIPTION
13 # Postfix versions 2.6 and later provide support for multiple
14 # Postfix instances. Instances share executable files and
15 # documentation, but have their own directories for configuration,
16 # queue and data files. In many cases different instances
17 # have different myhostname and inet_interfaces settings,
18 # though this is not always necessary.
20 # This command implements a trivial Postfix multi-instance
21 # manager. It simply applies commands such as "postfix start"
22 # to all the applicable Postfix instances.
23 # MANAGING MULTIPLE INSTANCES
24 # .ad
25 # .fi
26 # To hook the postfix-wrapper multi-instance manager into
27 # Postfix, see the POSTFIX-WRAPPER INITIALIZATION section
28 # below. To create a new Postfix instance, see the CREATING
29 # A NEW POSTFIX INSTANCE section below.
31 # To start, stop, get status, etc., with multiple Postfix
32 # instances, use:
34 # .nf
35 # # postfix command
36 # .fi
38 # For example, to find out what Postfix instances are configured:
40 # .nf
41 # # postfix status
42 # .fi
44 # The postfix(1) command invokes the postfix-wrapper command.
45 # This in turn applies the postfix(1) command to the default
46 # Postfix instance, and to each instance specified with the
47 # default main.cf file's multi_instance_directories parameter
48 # value.
50 # The postfix-wrapper command will start, stop, reload, etc.,
51 # only Postfix instances that have "multi_instance_enable =
52 # yes" in their main.cf files. When an instance is disabled,
53 # postfix-wrapper replaces "start" commands by "check" so
54 # that problems will still be reported.
56 # The startup order is taken from the multi_instance_directories
57 # parameter; the default instance is prepended to the list.
58 # The startup order is used for all postfix(1) commands,
59 # except for commands that stop Postfix instances. In those
60 # cases the order is reversed.
61 # MANAGING INDIVIDUAL INSTANCES
62 # .ad
63 # .fi
64 # To manage an individual Postfix instance, use:
66 # .nf
67 # # postfix -c /path/to/config_directory command
68 # .fi
70 # This is also needed to manage the default Postfix instance,
71 # after you turn on multi-instance support.
73 # To use the Postfix sendmail command with a non-default
74 # Postfix instance, use:
76 # .nf
77 # # sendmail -C /path/to/config_directory ...
78 # .fi
80 # Note 1: that's capital C, not lower-case c.
82 # Note 2: only the default Postfix instance will check or
83 # update the shared Postfix files, including the executable
84 # files and documentation.
85 # POSTFIX-WRAPPER INITIALIZATION
86 # .ad
87 # .fi
88 # To hook this program into Postfix, execute the command
89 # shown below.
91 # This command should be entered as one line.
93 # In the example, replace /etc/postfix with the default Postfix
94 # configuration directory, and replace /usr/libexec/postfix
95 # with the daemon directory pathname of the default Postfix
96 # instance.
98 # .nf
99 # # postconf -c /etc/postfix -e
100 # "multi_instance_enable=yes"
101 # "multi_instance_wrapper=/usr/libexec/postfix/postfix-wrapper"
102 # .fi
103 # CREATING A NEW POSTFIX INSTANCE
104 # .ad
105 # .fi
106 # To create a Postfix instance called "postfix-test", start
107 # with generic main.cf and master.cf files and customize the
108 # locations of the queue and data directories with the commands
109 # shown below. The last command updates main.cf and creates
110 # any directories that Postfix will need.
112 # Each command below should be entered as one line.
114 # In the example, replace /etc/postfix with the default Postfix
115 # configuration directory, and replace /usr/libexec/postfix
116 # with the daemon directory pathname of the default Postfix
117 # instance.
119 # .nf
120 # # mkdir /etc/postfix-test
121 # # cp /usr/libexec/postfix/main.cf /etc/postfix-test
122 # # cp /usr/libexec/postfix/master.cf /etc/postfix-test
123 # # postconf -c /etc/postfix-test -e
124 # "multi_instance_name=postfix-test"
125 # # postfix -c /etc/postfix post-install
126 # "config_directory=/etc/postfix-test"
127 # "queue_directory=/var/spool/postfix-test"
128 # "data_directory=/var/lib/postfix-test"
129 # create-missing
130 # .fi
132 # Register this Postfix instance with the default instance.
133 # This command should be entered as one line.
135 # .nf
136 # # postconf -e "multi_instance_directories=`postconf
137 # -h multi_instance_directories` /etc/postfix-test"
138 # .fi
140 # Edit the myhostname and inet_interfaces main.cf parameters,
141 # so that they will not conflict with the default Postfix
142 # instance, and change whatever else needs to be changed.
144 # Test the instance with:
146 # .nf
147 # # postfix -c /etc/postfix-test start
148 # # postfix -c /etc/postfix-test status
149 # [ other tests ... ]
150 # .fi
152 # When everything is working satisfactorily, enable start/stop/etc.
153 # by the multi-instance manager:
155 # .nf
156 # # postconf -c /etc/postfix-test -e multi_instance_enable=yes
157 # DIAGNOSTICS
158 # .ad
159 # .fi
160 # When an operation fails, the affected Postfix instance logs
161 # a message, and the multi-instance manager skips to the next
162 # instance.
163 # BUGS
164 # Support for the multi_instance_group feature is not implemented.
165 # SEE ALSO
166 # postfix(1) Postfix control program
167 # postfix-wrapper(5) multi-instance manager API
168 # postmulti(1) full-blown multi-instance manager
169 # LICENSE
170 # .ad
171 # .fi
172 # The Secure Mailer license must be distributed with this software.
173 # AUTHOR(S)
174 # Wietse Venema
175 # IBM T.J. Watson Research
176 # P.O. Box 704
177 # Yorktown Heights, NY 10598, USA
180 # Sanity checks.
182 : ${command_directory?"do not invoke this command directly"}
183 : ${daemon_directory?"do not invoke this command directly"}
185 # Readability.
187 POSTCONF=$command_directory/postconf
188 POSTFIX=$command_directory/postfix
190 # Canonicalize the instance directory list. The list is specified
191 # in startup order.
193 instance_dirs=`$POSTCONF -h multi_instance_directories | sed 's/,/ /'` ||
194 exit 1
196 case "$1" in
197 stop|quick-stop|abort|drain)
198 all_dirs=
199 for dir in $config_directory $instance_dirs
201 all_dirs="$dir $all_dirs"
202 done;;
203 *) all_dirs="$config_directory $instance_dirs";;
204 esac
206 # Execute the command on all applicable instances. When a Postfix
207 # instance is disabled, replace "postfix start" by "postfix check"
208 # so that problems will still be reported.
210 err=0
211 for dir in $all_dirs
213 case "$1" in
214 start)
215 test "`$POSTCONF -c $dir -h multi_instance_enable`" = yes || {
216 $POSTFIX -c $dir check || err=$?
217 continue
219 stop|abort|drain|flush|reload)
220 test "`$POSTCONF -c $dir -h multi_instance_enable`" = yes ||
221 continue;;
222 esac
223 $POSTFIX -c $dir "$@" || err=$?
224 done
226 exit $err