Hey all,
I'm working on configuring a mailserver that uses a PostgreSQL database
for virtual information. The database is managed by Vimbadmin.
I think I've found at least part of the problem. The
virtual_mailbox_domains setting likely isn't getting the correct output
when it is checking for an authorized domain.
I say that because when I run postmap -q on the alias file, it returns
1. Not 0.
==================
root@32cdc5546306:/# postmap -vq 'k...@raygun.zat'
pgsql:/run/secrets/postfix_db_virt_domains_maps 2>&1
postmap: name_mask: all
postmap: name_mask: host
postmap: inet_addr_local: configured 3 IPv4 addresses
postmap: inet_addr_local: configured 0 IPv6 addresses
postmap: been_here: 127.0.0.1/32: 0
postmap: been_here: 192.168.112.4/32: 0
postmap: been_here: 192.168.111.11/32: 0
postmap: mynetworks_core: 127.0.0.1/32 192.168.112.4/32 192.168.111.11/32
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps: user =
vimbadmin_user
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps:
password = password
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps: dbname
= vimbadmin
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps:
result_format = %d
postmap: cfg_get_int: /run/secrets/postfix_db_virt_domains_maps:
expansion_limit = 0
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps: query =
SELECT domain FROM domain WHERE domain = '%d' AND backupmx = false AND
active = true;
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps: domain =
postmap: cfg_get_str: /run/secrets/postfix_db_virt_domains_maps: hosts =
vimbadmin-db-pgsql:5432
postmap: dict_open: pgsql:/run/secrets/postfix_db_virt_domains_maps
postmap: dict_pgsql_get_active: attempting to connect to host
vimbadmin-db-pgsql:5432
postmap: dict_pgsql: successful connection to host vimbadmin-db-pgsql:5432
postmap: dict_pgsql: successful query from host vimbadmin-db-pgsql:5432
postmap: dict_pgsql_lookup: retrieved 1 rows
root@32cdc5546306:/# echo $?
1
=================
In main.cf:
============
virtual_mailbox_domains = pgsql:/run/secrets/postfix_db_virt_domains_maps
============
The /run/secrets/postfix_db_virt_domains_maps file:
=============
user = vimbadmin_user
hosts = vimbadmin-db-pgsql:5432
dbname = vimbadmin
query = SELECT domain FROM domain WHERE domain = '%d' AND backupmx =
false AND active = true;
password = password
result_format = %d
============
If I run the query against the database directly, it returns the
'domain' column with a value of 'raygun.zat'.
====
SELECT domain FROM domain WHERE domain = 'raygun.zat' AND backupmx =
false AND active = true
====
To further complicate matters, the virtual_alias_maps command works just
fine.
====
root@32cdc5546306:/# postmap -vq 'k...@raygun.zat'
pgsql:/run/secrets/postfix_db_virt_alias_maps 2>&1
postmap: name_mask: all
postmap: name_mask: host
postmap: inet_addr_local: configured 3 IPv4 addresses
postmap: inet_addr_local: configured 0 IPv6 addresses
postmap: been_here: 127.0.0.1/32: 0
postmap: been_here: 192.168.112.4/32: 0
postmap: been_here: 192.168.111.11/32: 0
postmap: mynetworks_core: 127.0.0.1/32 192.168.112.4/32 192.168.111.11/32
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: user =
vimbadmin_user
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: password
= password
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: dbname =
vimbadmin
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps:
result_format = %s
postmap: cfg_get_int: /run/secrets/postfix_db_virt_alias_maps:
expansion_limit = 0
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: query =
SELECT goto FROM alias WHERE address = '%s' AND active = true
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: domain =
postmap: cfg_get_str: /run/secrets/postfix_db_virt_alias_maps: hosts =
vimbadmin-db-pgsql:5432
postmap: dict_open: pgsql:/run/secrets/postfix_db_virt_alias_maps
postmap: dict_pgsql_get_active: attempting to connect to host
vimbadmin-db-pgsql:5432
postmap: dict_pgsql: successful connection to host vimbadmin-db-pgsql:5432
postmap: dict_pgsql: successful query from host vimbadmin-db-pgsql:5432
postmap: dict_pgsql_lookup: retrieved 1 rows
k...@raygun.zat
root@32cdc5546306:/# echo $?
0
====
Here is that file /run/secrets/postfix_db_virt_alias_maps;
===
user = vimbadmin_user
hosts = vimbadmin-db-pgsql:5432
dbname = vimbadmin
query = SELECT goto FROM alias WHERE address = '%s' AND active = true
password = password
====
System info:
Ubuntu 20.04 and postfix from their repos.
I am running postfix and dovecot together in a Docker container.
Postgres is in another container. Since the virtual_alias_maps work, I'm
99% certain it isn't something odd with Docker networking. Oh, and I
also am running bind in another container so I can test dns changes more
easily. I can lookup the mx record for raygun.zat from inside the
postfix/dovecot container just fine. So that shouldn't be effecting this.
As for why I'm doing it this way, well, learning mostly. :)
Anyway, any ideas why my virtual domain lookup are failing like that? Or
are they actually succeeding and I need to look elsewhere for my
misconfiguration?
Thanks in advance!
- David Reagan