smtpd: Added support for gecos aliases

This commit is contained in:
Ossi Salmi 2013-07-30 20:18:52 +03:00
parent baf347204b
commit 4f22f69766
2 changed files with 55 additions and 8 deletions

View file

@ -0,0 +1,10 @@
#!/bin/sh
echo "# Generated" > /etc/mail/gecos
/usr/bin/awk -F : '{
if($3 != "0" && $7 != "/sbin/nologin") {
gsub(/[[:space:]]+/, ".", $5);
print tolower($5)":"$1;
}
}' /etc/passwd >> /etc/mail/gecos

View file

@ -67,6 +67,10 @@ class smtpd {
# Boolean for whether we accept mail for local recipients. # Boolean for whether we accept mail for local recipients.
# Defaults to true. # Defaults to true.
# #
# $gecos:
# Boolean for whether to enable gecos aliases.
# Defaults to false.
#
# $domains: # $domains:
# Array of primary domains to accept mail for. # Array of primary domains to accept mail for.
# #
@ -82,6 +86,7 @@ class smtpd {
class smtpd::server( class smtpd::server(
$maildir, $maildir,
$local=true, $local=true,
$gecos=false,
$domains=undef, $domains=undef,
$virtual=undef, $virtual=undef,
$ssl_key="${puppet_ssldir}/private_keys/${homename}.pem", $ssl_key="${puppet_ssldir}/private_keys/${homename}.pem",
@ -131,6 +136,21 @@ class smtpd::server(
notify => Service["smtpd"], notify => Service["smtpd"],
} }
if $gecos == true {
file { "/usr/local/sbin/generate-smtpd-gecos.sh":
ensure => present,
mode => "0700",
owner => "root",
group => "wheel",
source => "puppet:///modules/smtpd/generate-smtpd-gecos.sh",
}
exec { "/usr/local/sbin/generate-smtpd-gecos.sh":
unless => "/bin/test /etc/mail/gecos -nt /etc/passwd",
require => File["/usr/local/sbin/generate-smtpd-gecos.sh"],
notify => Exec["makemap aliases"],
}
}
file { "/etc/mail/aliases": file { "/etc/mail/aliases":
ensure => present, ensure => present,
mode => "0644", mode => "0644",
@ -141,15 +161,26 @@ class smtpd::server(
"puppet:///files/mail/aliases", "puppet:///files/mail/aliases",
], ],
} }
exec { "makemap -t aliases /etc/mail/aliases": exec { "makemap aliases":
command => $gecos ? {
false => "makemap aliases",
true => "cat aliases gecos > aliases.gecos && makemap -o aliases.db aliases.gecos",
},
refreshonly => true, refreshonly => true,
cwd => "/etc/mail",
path => "/bin:/usr/bin:/sbin:/usr/sbin", path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/aliases"], subscribe => File["/etc/mail/aliases"],
notify => Service["smtpd"], before => Service["smtpd"],
} }
if $domains { if $domains {
smtpd::aliases { $domains: } smtpd::aliases { $domains:
gecos => $gecos,
subscribe => $gecos ? {
false => undef,
true => Exec["/usr/local/sbin/generate-smtpd-gecos.sh"],
},
}
} }
if $virtual { if $virtual {
@ -159,7 +190,7 @@ class smtpd::server(
} }
define smtpd::aliases() { define smtpd::aliases($gecos) {
file { "/etc/mail/aliases.${name}": file { "/etc/mail/aliases.${name}":
ensure => present, ensure => present,
@ -172,11 +203,16 @@ define smtpd::aliases() {
"puppet:///files/mail/aliases", "puppet:///files/mail/aliases",
], ],
} }
exec { "makemap -t aliases /etc/mail/aliases.${name}": exec { "makemap aliases.${name}":
command => $gecos ? {
false => "makemap aliases.${name}",
true => "cat aliases.${name} gecos > aliases.${name}.gecos && makemap -o aliases.${name}.db aliases.${name}.gecos",
},
refreshonly => true, refreshonly => true,
cwd => "/etc/mail",
path => "/bin:/usr/bin:/sbin:/usr/sbin", path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/aliases.${name}"], subscribe => File["/etc/mail/aliases.${name}"],
notify => Service["smtpd"], before => Service["smtpd"],
} }
} }
@ -195,11 +231,12 @@ define smtpd::virtual() {
"puppet:///files/mail/virtual", "puppet:///files/mail/virtual",
], ],
} }
exec { "makemap -t aliases /etc/mail/virtual.${name}": exec { "makemap virtual.${name}":
refreshonly => true, refreshonly => true,
cwd => "/etc/mail",
path => "/bin:/usr/bin:/sbin:/usr/sbin", path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/virtual.${name}"], subscribe => File["/etc/mail/virtual.${name}"],
notify => Service["smtpd"], before => Service["smtpd"],
} }
} }