The basic idea is to permit more than one action in an access(5) or header_checks(5) table lookup result or SMTPD policy response:
A few examples to clarify: /etc/postfix/access: # The new multi-action form. 1.2.3.4 { prepend header text... } other actions... /etc/postfix/header_checks: # "prepend"+"ignore" should be equivalent to "replace". /foo/ { prepend replacement header text... } ignore policy service: # The new multi-action form. action = { prepend new header text... } other actions... In all cases the historical one-action form still works as before. Remember that Postfix access maps and policy service replies may contain the same things that are used in smtpd_mumble_restrictions? With the above syntax means we can now also use all the access(5) map results in smtpd_mumble_restrictions: /etc/postfix/main.cf: smtpd_mumble_restrictions = ... { defer text... } smtpd_mumble_restrictions = ... { defer_if_permit text... } ... Why not use the form "command { arguments... }"? The reason is that historically, commands like "defer" and "reject" have no arguments when used in smtpd_mumble_restrictions. In order to give those commands arguments we need the form "{ command arguments... }". This way we avoid breaking the compatibility of core Postfix features such as defer" and "reject". For consistency, the same "{ command args.. }" form must then be used in access(5) or header_checks(5) table lookup results, and in SMTPD policy responses. Wietse