From 4f22f69766f0001402f216a07ff7db7e71fb15ff Mon Sep 17 00:00:00 2001 From: Ossi Salmi Date: Tue, 30 Jul 2013 20:18:52 +0300 Subject: [PATCH] smtpd: Added support for gecos aliases --- smtpd/files/generate-smtpd-gecos.sh | 10 ++++++ smtpd/manifests/init.pp | 53 ++++++++++++++++++++++++----- 2 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 smtpd/files/generate-smtpd-gecos.sh diff --git a/smtpd/files/generate-smtpd-gecos.sh b/smtpd/files/generate-smtpd-gecos.sh new file mode 100644 index 0000000..24a1ac1 --- /dev/null +++ b/smtpd/files/generate-smtpd-gecos.sh @@ -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 diff --git a/smtpd/manifests/init.pp b/smtpd/manifests/init.pp index 35eb16a..02923c8 100644 --- a/smtpd/manifests/init.pp +++ b/smtpd/manifests/init.pp @@ -67,6 +67,10 @@ class smtpd { # Boolean for whether we accept mail for local recipients. # Defaults to true. # +# $gecos: +# Boolean for whether to enable gecos aliases. +# Defaults to false. +# # $domains: # Array of primary domains to accept mail for. # @@ -82,6 +86,7 @@ class smtpd { class smtpd::server( $maildir, $local=true, + $gecos=false, $domains=undef, $virtual=undef, $ssl_key="${puppet_ssldir}/private_keys/${homename}.pem", @@ -131,6 +136,21 @@ class smtpd::server( 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": ensure => present, mode => "0644", @@ -141,15 +161,26 @@ class smtpd::server( "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, + cwd => "/etc/mail", path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases"], - notify => Service["smtpd"], + before => Service["smtpd"], } 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 { @@ -159,7 +190,7 @@ class smtpd::server( } -define smtpd::aliases() { +define smtpd::aliases($gecos) { file { "/etc/mail/aliases.${name}": ensure => present, @@ -172,11 +203,16 @@ define smtpd::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, + cwd => "/etc/mail", path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases.${name}"], - notify => Service["smtpd"], + before => Service["smtpd"], } } @@ -195,11 +231,12 @@ define smtpd::virtual() { "puppet:///files/mail/virtual", ], } - exec { "makemap -t aliases /etc/mail/virtual.${name}": + exec { "makemap virtual.${name}": refreshonly => true, + cwd => "/etc/mail", path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/virtual.${name}"], - notify => Service["smtpd"], + before => Service["smtpd"], } }