Dovecot (scrambler-plugin) mysql password & user query fails

В настоящее время я пытаюсь обновить свой почтовый сервер, чтобы зашифровать все почтовые ящики, используя плагин скремблера posteo .

У меня следующая база данных mysql:

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    |                |

Мой стандартный запрос (без шифрования) ) работает и выглядит следующим образом (/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;

Нет. Я пытался изменить запросы, следуя этому шаблону :

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;

При попытке подключиться через

openssl s_client -connect localhost:993

В системном журнале появляется следующая ошибка:

dovecot: auth: Fatal: sql /etc/dovecot/dovecot-sql.conf: Error in configuration file /etc/dovecot/dovecot-sql.conf line 32: Expecting '='

Где строка 32 - это

WHERE accounts.username = .... 

в user_query.

Я проверил дважды, но не могу найти ошибку. Любая помощь была бы замечательной.

0
задан 16 May 2017 в 23:30
1 ответ

После следующей строки отсутствует обратная косая черта:

SELECT concat('*:storage=', quota, 'M') AS quota_rule,

, которая должна быть

SELECT concat('*:storage=', quota, 'M') AS quota_rule, \

. По этой причине Dovecot начинает анализировать оставшийся запрос SQL как конфигурацию Dovecot. Поскольку все оставшиеся строки объединяются в одну (т. Е. Удаляются их символы новой строки), Dovecot не понимает, что что-то сломано, до конца запроса.

0
ответ дан 24 November 2019 в 04:35

Теги

Похожие вопросы