Рассмотрим вариант когда вы хотите использовать несколько методов авторизации (plain, login, cram-md5) через dovecot или напрямую в базу.
Тестовый стенд: Exim 4.7, dovecot 2.0
Обязательное условие для обеих методов – пароль в базе хранится в открытом виде. Примечательно, что первый способ работает быстрее второго, но зато во втором методе мы имеем единый центр авторизации – dovecot
1) Авторизация без участия dovecot’a.
В раздел авторизации добавляем такой кусок кода:
plain_login: driver = plaintext public_name = PLAIN server_condition = ${lookup mysql{SELECT '1' FROM users \ WHERE username = '${quote_mysql:$2}' \ AND clear = '${quote_mysql:$3}'} {yes}{no}} server_set_id = $2 fixed_login: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" server_condition = ${lookup mysql{SELECT '1' FROM users \ WHERE username = '${quote_mysql:$1}' \ AND clear = '${quote_mysql:$2}'} {yes}{no}} server_set_id = $1 fixed_cram: driver = cram_md5 public_name = CRAM-MD5 server_secret = ${lookup mysql{SELECT clear FROM users \ WHERE username = '${quote_mysql:$1}'}{$value}fail} server_set_id = $1
2) Авторизация через dovecot
В dovecot’e делаем такие изменения:
файл dovecot-sql.conf:
default_pass_scheme = CLEARTEXT
‘
password_query = SELECT clear AS password FROM users WHERE username = '%n@%d' AND enabled = '1
файл 10-auth.conf:
auth_mechanisms = plain login cram-md5 digest-md5
файл 10-master.conf:
service auth { unix_listener auth-master { mode = 0600 user = _exim group = _exim } unix_listener auth-client { mode = 0660 user = _exim group = _exim } }
В exim’e делаем такие изменения – в раздел авторизации добавляем такой кусок кода:
auth_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1