John Massai:
> I have a Postfix instance that listens on one of many
> interfaces/addresses available on a machine.
> 
> There is one special smptd service in master.cf that I'd like to have
> listen on several addresses (but not all, so I can't use "all").
> 
> I have found that I can define the service once for every address and
> it works great, but am not having luck trying to combine them into one
> by specifying inet_interfaces (possibly because it conflicts with the
> service definition itself?

master.cf specifies information for the master daemon (fields 1-8)
and for daemon processes (the daemon command-line arguments).  The
master daemon passes daemon command line arguments to the daemon
process; it is up to the daemon processes, not the master, to
evaluate their command-line arguments.

This clear separation of concerns is basic to the Postfix architecture.
It means that some things cannot be done easily (such as groping
user files from the SMTP daemon process). That is a feature.

In your case, I suggest that you use make(1) to securely generate
master.cf from a simpler template.

Makefile:
    master.cf: master.cf.proto
            generate-new-master-cf master.cf.proto >master.cf.tmp \
                && mv master.cf.tmp master.cf

master.cf.proto:
    DEFAULT:smtp inet  n       -       n       -       -       smtpd
    pickup    unix  n       -       -       60      1       pickup
    cleanup   unix  n       -       -       -       0       cleanup
    qmgr      unix  n       -       -       300     1       qmgr
    ...

Where generate-new-master-cf expands each entry with DEFAULT into as
many master.cf entries as needed.

I am reluctant to add support for {ip1,ip2,ip3...}:smtp in master.cf.
The service name (here: {ip1,ip2,ip3...}:smtp) is also used to
generate service-dependent parameter names. With many IP addresses,
as in your use case, this could become unwieldy.

        Wietse

Reply via email to