# Configure smtpd for local delivery. # # === Global variables # # $mail_domain: # Domain to masquerade as (envelope only). # # $mail_server: # Hostname of mail relay server. # class smtpd { if $mail_server { $relay = "smtp+tls://${mail_server}" } file { "/etc/mailer.conf": ensure => present, mode => "0644", owner => "root", group => "wheel", source => "puppet:///modules/smtpd/mailer.conf", before => Service["smtpd"], } file { "/etc/mail/smtpd.conf": ensure => present, mode => "0644", owner => "root", group => "wheel", source => "puppet:///modules/smtpd/smtpd.conf", notify => Service["smtpd"], } file { "/etc/mail/smtpd.conf.local": ensure => present, mode => "0644", owner => "root", group => "wheel", content => template("smtpd/client.conf.erb"), notify => Service["smtpd"], } service { "sendmail": ensure => stopped, enable => false, before => Service["smtpd"], } service { "smtpd": ensure => running, enable => true, start => "/usr/sbin/smtpd", } } # Configure smtpd as mail server # # === Parameters # # $maildir: # Directory in user home for INBOX. # # $local: # Boolean for whether we accept mail for local recipients. # Defaults to true. # # $domains: # Array of primary domains to accept mail for. # # $virtual: # Array of virtual domains to accept mail for. # # $ssl_key: # Source path of private key. # # $ssl_cert: # Source path of certificate. # class smtpd::server( $maildir, $local=true, $domains=undef, $virtual=undef, $ssl_key="${puppet_ssldir}/private_keys/${homename}.pem", $ssl_cert="${puppet_ssldir}/certs/${homename}.pem" ) inherits smtpd { include procmail procmail::rc { "00-default.rc": content => "MAILDIR=\$HOME/${maildir}\nDEFAULT=\$MAILDIR/INBOX\n", } $mda = "/usr/local/bin/procmail -Y -t -f %{sender}" File["/etc/mail/smtpd.conf.local"] { content => template("smtpd/server.conf.erb"), } file { "/etc/mail/certs": ensure => directory, mode => "0700", owner => "root", group => "wheel", } file { "/etc/mail/certs/server.key": ensure => present, mode => "0600", owner => "root", group => "wheel", source => $ssl_key, notify => Service["smtpd"], } file { "/etc/mail/certs/server.crt": ensure => present, mode => "0600", owner => "root", group => "wheel", source => $ssl_cert, notify => Service["smtpd"], } file { "/etc/mail/aliases": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/aliases.${::homename}", "puppet:///files/mail/aliases", ], } exec { "makemap -t aliases /etc/mail/aliases": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases"], notify => Service["smtpd"], } if $domains { smtpd::aliases { $domains: } } if $virtual { smtpd::virtual { $virtual: } } } define smtpd::aliases() { file { "/etc/mail/aliases.${name}": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/aliases.${name}", "puppet:///files/mail/aliases.${::homename}", "puppet:///files/mail/aliases", ], } exec { "makemap -t aliases /etc/mail/aliases.${name}": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases.${name}"], notify => Service["smtpd"], } } define smtpd::virtual() { file { "/etc/mail/virtual.${name}": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/virtual.${name}", "puppet:///files/mail/virtual.${::homename}", "puppet:///files/mail/virtual", ], } exec { "makemap -t aliases /etc/mail/virtual.${name}": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/virtual.${name}"], notify => Service["smtpd"], } }