Le 08/01/2013 22:00, Wietse Venema a écrit : > 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
I like the "mib" syntax of main.cf. so I'd prefer something like postconf -e service.submission.chroot=n (or false|no|whatever) and then, I would love to have that in main.cf. more precisely, it would be nice to control master.cf things from main.cf: service.submission.disable = (true|false) so I could disable a service without removing it (the old pattern: active vs undefined) service.submission.chroot = false and then a service.all.chroot = false would disable all chrooting, which would be helpful when we suspect that a problem is due to a chroot. service.submission.class = smtpd service.submission.address = 0.0.0.0 service.submission.port = 587 service.submission.name = submission with this, we would have submission_recipient_restrictions = mumble dee service.submission.logname = postmumble/submission service.submission.options = joe=jim foo=bar ... this would add -o joe=jim etc. for all but "well known options". if you go that road, then at one time, master.cf would become a "service definition" file. > > 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