Рассмотрим вариант когда вы хотите использовать несколько методов авторизации (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