Назад | Перейти на главную страницу

Dovecot (скремблер-плагин) пароль MySQL и запрос пользователя не работают

В настоящее время я пытаюсь обновить свой почтовый сервер, чтобы зашифровать все почтовые ящики, используя 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.

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

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

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

который должен быть

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

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