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

Reply via email to