Fix inconsistent alias domain catchall behaviour

Postfix lookups for catchall case on non-alias domain:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> no match
   - custom virtual_alias_maps -> no match
2. user -> not relevant
3. @domain
   - virtual_alias_maps.cf -> **match**, lookup ends here

With an alias domain the behaviour was:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> **match**, lookup ends here

In this case custom virtual_alias_maps are ignored.

With this change the behaviour is:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> no match
   - custom virtual_alias_maps -> no match
2. user -> not relevant
3. @domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> **match**, lookup ends here

The change removes virtual_alias_domain_catchall_maps.cf entirely and
rewrites virtual_alias_domain_maps.cf to also work for catchall lookups.
This commit is contained in:
Julian Rother 2025-08-28 00:21:21 +02:00
parent e116d74fb7
commit d544011b66
Signed by: julian
GPG key ID: C19B924C0CD13341
4 changed files with 2 additions and 7 deletions

View file

@ -1,4 +1,4 @@
dbname = postfixadmin
user = postfix
hosts = unix:/var/run/postgresql
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '%u' || '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' AND alias_domain.target_domain = alias.domain AND left(alias.address, -length(alias.domain)) || alias_domain.alias_domain = '%s' AND left(alias.address, -length(alias.domain)) || alias.domain = alias.address AND alias.active = true AND alias_domain.active = true