This note discusses some user-interface issues with upcoming
postconf(1) features that will be used to manage the content of
master.cf files.
User-interface consistency is important, especially for people who
work a lot with Postfix: fewer things to remember means fewer
mistakes to make (it's also important for implementors, because it
leads to similar code for similar operations and opportunities to
use code that already exists, meaning fewer mistakes to make).
In particular, it would be desirable that postconf(1) uses similar
command syntax for similar operations on main.cf and master.cf.
First I will review a few commands that already exist, and then
I'll introduce some commands that are likely to be implemented.
The first two examples are already implemented:
postconf -M inet
Show all TCP services in master.cf
postconf -M inet.submission
Show the submission-over-TCP service in master.cf
Next, a few examples that are likely to be implemented:
postconf -M# service-type ...
postconf -M# service-type.service-name ...
postconf -MX service-type ...
postconf -MX service-type.service-name ...
Delete (or comment) out the specified services.
These commands are analogous to "postconf -# parameter(s)" (comment
out main.cf parameter settings) and "postconf -X parameter(s)"
(remove main.cf parameter settings). Therefore they should have
similar syntax. I don't expect that these commands will be used
much, but they will make the postconf command more consistent.
I am contemplating a new class of master.cf operations that operate
column-wise. These currently have no main.cf equivalent.
postconf -Mu chroot=n inet unix fifo pass
Update the "chroot" column to "n" for all services.
postconf -Mu type=unix fifo
Update all "fifo" services so that they use UNIX-domain
sockets. This is more laptop-friendly as it avoids MTIME
updates.
Obviously, this command is powerful but it can also inflict a great
deal of damage.
And finally, a more complicated example:
postconf -Me 'text of complete master.cf entry'
Replace the specified master.cf service or add a new service.
Each postconf(1) command-line argument contains the text
of a complete master.cf entry. The new entry is line-wrapped
as with "postconf -Mf".
This command syntax is consistent with existing "postconf -e"
commands, where each postconf(1) command-line argument contains the
text of a complete main.cf entry.
However, the syntax differs from "postconf -M" commands that can
target multiple services, such as "postconf -M inet" or "postconf
-Mu chroot=n inet". There, a service is better specified as
service-type or service-type.service-name.
Considering the difference between specifying the complete content
of a master.cf entry versus a patterm that can select multiple
master.cf entries, it makes sense to have this difference in command
syntax.
Wietse