Skip to content

Commit ffeaba2

Browse files
Merge pull request #195 from NethServer/bug-7552
fix(postfix): groups/alias/userforwards expansion Refs NethServer/dev#7552 NethServer/dev#7553
2 parents bc0d115 + dc38425 commit ffeaba2

File tree

13 files changed

+283
-102
lines changed

13 files changed

+283
-102
lines changed

postfix/etc/postfix/aliases.cf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
# aliases -- virtual alias map
33
#
44
# Expand an address to multiple user/group destinations.
5-
# Other email addresses are expanded by aliases-other.cf.
5+
# Wildcard address expansion has lower priority than
6+
# exact-domain match, and they are mutually-exclusive
7+
# (see NOT EXISTS clause).
68
#
79

810
dbpath = /srv/pcdb.sqlite

postfix/usr/local/bin/reload-config

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,10 @@ fi
3838
S='$' # to escape $ in template
3939

4040
if [ -n "${POSTFIX_ORIGIN}" ]; then
41-
tmpl_transport_maps="inline:{ ${POSTFIX_ORIGIN}=lmtp:unix:/var/lib/umail/lmtp }"
4241
tmpl_virtual_mailbox_domains=${POSTFIX_ORIGIN}
43-
tmpl_virtual_mailbox_maps='proxy:ldap:$meta_directory/laddusers-origin.cf'
42+
tmpl_virtual_mailbox_maps="inline:{{ vmail@${POSTFIX_ORIGIN} = vmail }}, "'proxy:ldap:$meta_directory/laddusers-origin.cf'
4443
tmpl_myorigin=${POSTFIX_ORIGIN}
4544
else
46-
tmpl_transport_maps=
4745
tmpl_virtual_mailbox_domains=
4846
tmpl_virtual_mailbox_maps=
4947
tmpl_myorigin='$myhostname'
@@ -55,14 +53,26 @@ tmpl_myhostname="${POSTFIX_HOSTNAME:-$(hostname -f)}"
5553
tmpl_debug_peer_list="${POSTFIX_DEBUG_PEERS:-\$mynetworks}"
5654
tmpl_relay_domains=$(pcdbquery "SELECT group_concat(domain || '=' || transport) FROM domains WHERE transport LIKE '_mtp:%'")
5755
tmpl_virtual_alias_domains=$(pcdbquery "SELECT group_concat(domain) FROM domains WHERE transport IS NULL AND domain NOT IN ('*', '${POSTFIX_ORIGIN}')")
58-
if [ -n "$(pcdbquery "SELECT 1 FROM domains WHERE domain='${POSTFIX_ORIGIN}' AND addusers = 1")" ]; then
56+
origin_flags="$(pcdbquery "SELECT addusers + (addgroups * 2) AS origin_flags FROM domains WHERE domain='${POSTFIX_ORIGIN}'")"
57+
if [ "${origin_flags}" == 1 ]; then
58+
# addusers flag: reject groups and vmail, accept users and aliases
59+
tmpl_reject_internal_myorigin="check_recipient_access inline:{{ vmail@${POSTFIX_ORIGIN} = REJECT access denied }}",'check_recipient_access pipemap:{proxy:ldap:$meta_directory/laddgroupmembers.cf,static:{REJECT access denied}}'
60+
elif [ "${origin_flags}" == 2 ]; then
61+
# addgroups flag: reject users and vmail, accept groups and aliases
62+
tmpl_reject_internal_myorigin="check_recipient_access inline:{{ vmail@${POSTFIX_ORIGIN} = REJECT access denied }}",'check_recipient_access pipemap:{proxy:ldap:$meta_directory/laddusers-origin.cf,static:{REJECT access denied}}'
63+
elif [ "${origin_flags}" == 3 ]; then
64+
# addusers+addgroups flag: reject vmail only, accept everything else
5965
tmpl_reject_internal_myorigin="check_recipient_access inline:{{ vmail@${POSTFIX_ORIGIN} = REJECT access denied }}"
66+
elif [ "${origin_flags}" == 0 ]; then
67+
# domain has no flags: reject users, groups, and vmail, accept aliases
68+
tmpl_reject_internal_myorigin="check_recipient_access inline:{{ vmail@${POSTFIX_ORIGIN} = REJECT access denied }}",'check_recipient_access pipemap:{unionmap:{proxy:ldap:$meta_directory/laddusers-origin.cf,proxy:ldap:$meta_directory/laddgroupmembers.cf},static:{REJECT access denied}}'
6069
else
70+
# reject everything because the domain not defined
6171
tmpl_reject_internal_myorigin="check_recipient_access inline:{{ ${POSTFIX_ORIGIN} = REJECT access denied }}"
6272
fi
6373
tmpl_domain_catchall_map=$(pcdbquery "SELECT 'inline:{' || group_concat('{@' || domain || '=' || catchall || '@${tmpl_myorigin}}', ', ') || '}' FROM domains WHERE length(catchall) > 0 AND domain != '*'")
64-
tmpl_laddgroups_domains=$(pcdbquery "SELECT group_concat(domain, ' ') FROM domains WHERE addgroups = 1")
65-
tmpl_laddusers_domains=$(pcdbquery "SELECT group_concat(domain, ' ') FROM domains WHERE addusers = 1")
74+
tmpl_laddgroups_domains=$(pcdbquery "SELECT group_concat(domain, ' ') FROM (SELECT domain FROM domains WHERE addgroups = 1 UNION SELECT '${POSTFIX_ORIGIN}' AS domain)")
75+
tmpl_laddusers_domains=$(pcdbquery "SELECT group_concat(domain, ' ') FROM (SELECT domain FROM domains WHERE addusers = 1 UNION SELECT '${POSTFIX_ORIGIN}' AS domain)")
6676
tmpl_ldap_bind_dn="${POSTFIX_LDAP_USER}"
6777
tmpl_ldap_bind_pw="${POSTFIX_LDAP_PASS}"
6878
tmpl_ldap_host="${POSTFIX_LDAP_HOST}"
@@ -85,11 +95,10 @@ set +a
8595
envsubst >/etc/postfix/main.cf <"${TEMPLATES_DIR:?}/main.cf"
8696
envsubst >/etc/postfix/master.cf <"${TEMPLATES_DIR:?}/master.cf"
8797
envsubst >/etc/postfix/laddusers.cf <"${TEMPLATES_DIR:?}/laddusers-${ldap_schema}.cf"
88-
envsubst >/etc/postfix/laddgroups.cf <"${TEMPLATES_DIR:?}/laddgroups-${ldap_schema}.cf"
89-
envsubst >/etc/postfix/lgroupmembers.cf <"${TEMPLATES_DIR:?}/lgroupmembers-${ldap_schema}.cf"
98+
envsubst >/etc/postfix/userforwards.cf <"${TEMPLATES_DIR:?}/userforwards.cf"
9099
envsubst >/etc/postfix/laddgroupmembers.cf <"${TEMPLATES_DIR:?}/laddgroupmembers-${ldap_schema}.cf"
91100
envsubst <"${TEMPLATES_DIR:?}/laddusers-${ldap_schema}.cf" | \
92-
sed "s/^domain = .*/domain = ${tmpl_myorigin}/" >/etc/postfix/laddusers-origin.cf
101+
sed "s/^domain = .*/domain = ${tmpl_myorigin}/ ; /^# just/ d" >/etc/postfix/laddusers-origin.cf
93102

94103
if [ -z "${tmpl_sasl_commentout}" ] ; then
95104
cat /etc/postfix/dovecot-sasl.cf >> /etc/postfix/main.cf

postfix/usr/local/lib/templates/laddgroupmembers-ad.cf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# lsenderlogin.cf (rfc2307) -- group members expansion
2+
# laddgroupmembers.cf (rfc2307) -- group members expansion
33
# just for domains with addgroups flag
44
#
55

postfix/usr/local/lib/templates/laddgroupmembers-rfc2307.cf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# lsenderlogin.cf (rfc2307) -- group members expansion
2+
# laddgroupmembers.cf (rfc2307) -- group members expansion
33
# just for domains with addgroups flag
44
#
55

postfix/usr/local/lib/templates/laddgroups-ad.cf

Lines changed: 0 additions & 14 deletions
This file was deleted.

postfix/usr/local/lib/templates/laddgroups-rfc2307.cf

Lines changed: 0 additions & 14 deletions
This file was deleted.

postfix/usr/local/lib/templates/lgroupmembers-ad.cf

Lines changed: 0 additions & 15 deletions
This file was deleted.

postfix/usr/local/lib/templates/lgroupmembers-rfc2307.cf

Lines changed: 0 additions & 13 deletions
This file was deleted.

postfix/usr/local/lib/templates/main.cf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ message_size_limit = 100000000
4747
virtual_alias_domains = ${tmpl_virtual_alias_domains}
4848
virtual_alias_maps =
4949
sqlite:${S}meta_directory/aliases.cf
50-
proxy:ldap:${S}meta_directory/laddgroups.cf
51-
proxy:ldap:${S}meta_directory/laddusers.cf
52-
proxy:ldap:${S}meta_directory/lgroupmembers.cf
5350
sqlite:${S}meta_directory/userforwards.cf
51+
proxy:ldap:${S}meta_directory/laddgroupmembers.cf
52+
proxy:ldap:${S}meta_directory/laddusers.cf
5453
${tmpl_domain_catchall_map}
5554
virtual_mailbox_domains = ${tmpl_virtual_mailbox_domains}
5655
virtual_mailbox_maps = ${tmpl_virtual_mailbox_maps}
56+
virtual_transport = lmtp:unix:/var/lib/umail/lmtp
5757
relay_domains = ${tmpl_relay_domains}
58-
transport_maps = ${tmpl_transport_maps}, sqlite:${S}meta_directory/relaydest.cf,
58+
transport_maps = sqlite:${S}meta_directory/relaydest.cf
5959
recipient_delimiter = +
6060
myorigin = ${tmpl_myorigin}
6161

@@ -106,8 +106,8 @@ smtpd_relay_restrictions =
106106
permit_mynetworks,
107107
permit_sasl_authenticated,
108108
reject_unauth_destination,
109-
${tmpl_reject_internal_myorigin},
110109
check_recipient_access sqlite:${S}meta_directory/internal_access.cf,
110+
${tmpl_reject_internal_myorigin},
111111

112112
smtpd_recipient_restrictions =
113113
reject_non_fqdn_recipient,

postfix/etc/postfix/userforwards.cf renamed to postfix/usr/local/lib/templates/userforwards.cf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ dbpath = /srv/pcdb.sqlite
66
query =
77
SELECT dest
88
FROM userforwards
9-
WHERE user = '%s'
9+
WHERE user = '%u'
10+
domain = ${tmpl_myorigin}

0 commit comments

Comments
 (0)