diff --git a/manifests/postfix/sender.pp b/manifests/postfix/sender.pp new file mode 100644 index 0000000000000000000000000000000000000000..a60f7214793b1b3f80df839cfc934b8e40a6b239 --- /dev/null +++ b/manifests/postfix/sender.pp @@ -0,0 +1,48 @@ +# Many systems send emails "From" root@system-name. That causes problems when +# an email is bounced. This type is used to have Postfix change the sender +# address of an email while it is in flight. Both the From: header and the +# envelope sender are changed. +# +# Example of how to set a sender: +# +# base::postfix::sender { 'root@stanford.edu': +# ensure => 'noreply@stanford.edu' +# } +# +# Example of how to ensure there is no sender map: +# +# base::postfix::sender { 'luke': ensure => absent } +# +# Assumes that a command 'postmap hash:$file' has been defined that will +# rebuild the senders map. + +define base::postfix::sender( + $ensure, + $file = '/etc/postfix/senders' +) { + $pattern = "'^${name}'" + case $ensure { + 'absent': { + exec { "rm-sender-${name}": + command => "sed -i -e '/^${name}/d' ${file}", + onlyif => "grep ${pattern} ${file}", + notify => Exec["postmap hash:${file}"] + } + } + default: { + $line = "${name} ${ensure}" + exec { "add-sender-${name}": + command => "echo '${line}' >> ${file}", + unless => "grep ${pattern} ${file}", + require => Package['postfix'], + notify => Exec["postmap hash:${file}"], + } + exec { "fix-sender-${name}": + command => "sed -i -e 's/^${name}..*\$/${line}/' ${file}", + unless => "grep '^${line}\$' ${file}", + require => Exec["add-sender-${name}"], + notify => Exec["postmap hash:${file}"], + } + } + } +}