I currently try to update my mailserver to encrypt all mailboxes, using the posteo scrambler plugin.
I have the following mysql DB:
mysql> describe accounts;
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(64) | NO | MUL | NULL | |
| domain | varchar(255) | NO | MUL | NULL | |
| password | varchar(255) | NO | | NULL | |
| quota | int(10) unsigned | YES | | 100 | |
| enabled | tinyint(1) | YES | | 1 | |
| sendonly | tinyint(1) | YES | | 0 | |
| TLSenforce | tinyint(1) | YES | | 1 | |
mysql> describe user_keys;
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| uid | int(10) unsigned | NO | MUL | NULL | |
| enabled_encryp | tinyint(1) | NO | | 1 | |
| public_key | varchar(8191) | NO | | NULL | |
| private_key | varchar(8191) | NO | | NULL | |
| private_key_salt | varchar(255) | NO | | NULL | |
| private_key_iterations | int(11) | YES | | 5000 | |
My standard-query (without encryption) works, and is the following (/etc/dovecot/dovecot-sql.conf)
password_query = SELECT username AS user, domain, password FROM accounts WHERE username = '%n' AND domain = '%d' and enabled = true;
user_query = SELECT concat('*:storage=', quota, 'M') AS quota_rule FROM accounts WHERE username = '%n' AND domain = '%d' AND sendonly = false;
iterate_query = SELECT username, domain FROM accounts where sendonly = false;
No I tried to modify the querys, following this template:
password_query = \
SELECT username AS user, \
password, \
REPLACE('%w', '%%', '%%%%') AS userdb_scrambler_plain_password, \
user_keys.enabled_encryp AS userdb_scrambler_enabled, \
user_keys.public_key AS userdb_scrambler_public_key, \
user_keys.private_key AS userdb_scrambler_private_key, \
user_keys.private_key_salt AS userdb_scrambler_private_key_salt, \
user_keys.private_key_iterations AS userdb_scrambler_private_key_iterations \
FROM accounts \
LEFT OUTER JOIN user_keys ON accounts.id = user_keys.id \
WHERE accounts.username = '%n' AND accounts.domain = '%d' AND user_keys.enabled_encryp = true;
user_query = \
SELECT concat('*:storage=', quota, 'M') AS quota_rule,
user_keys.enabled_encryp AS scrambler_enabled, \
user_keys.public_key AS scrambler_public_key, \
user_keys.private_key AS scrambler_private_key, \
user_keys.private_key_salt AS scrambler_private_key_salt, \
user_keys.private_key_iterations AS scrambler_private_key_iterations \
FROM accounts \
LEFT OUTER JOIN user_keys ON accounts.id = user_keys.id \
WHERE accounts.username = '%n' AND accounts.domain = '%d' AND accounts.sendonly = false;
While trying to connect via
openssl s_client -connect localhost:993
I get the following error in syslog:
dovecot: auth: Fatal: sql /etc/dovecot/dovecot-sql.conf: Error in configuration file /etc/dovecot/dovecot-sql.conf line 32: Expecting '='
Where line 32 is the
WHERE accounts.username = ....
in the user_query.
I checked double, but can't find the error. Any help would be awesome.