我最近把我的密码哈希从md5切换到ssha512。 这对dovecot正常工作,所以我可以读取传入的邮件没有问题。
这对exim4来说并不适用。
来自exim4的日志输出:
less /var/log/exim4/rejectlog 2015-07-27 13:36:42 fixed_plain authenticator failed for CURRENT_LOCATION (loki) [212.71.209.15]: 435 Unable to authenticate at present ([email protected]): lookup of "select concat(users.username,'@',domains.domain_name) from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)='[email protected]' and users.password=ssha.b64('SECRETPASSWORD')" gave DEFER: MYSQL: query failed: FUNCTION ssha.b64 does not exist
(由于隐私原因,标识的细节已被交换)
这显然是由于mysql中没有ssha.b64函数的原因。 有没有办法用简单的密码查询mysql,以便从数据库中得到salt的salt哈希码和salt密码?
相关的configuration文件:
cat /etc/exim4/conf.d/auth/25_exim4-dave-virtmail fixed_plain: driver = plaintext public_name = PLAIN # old query, still using md5 (not working anymore) server_condition = ${lookup mysql{select concat(users.username,'@',domains.domain_name) from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)='$2' and users.password=md5('$3')}{1}fail} # obviously wrong query, test # server_condition = ${lookup mysql{select concat(users.username,'@',domains.domain_name) from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)='$2' and users.password=ssha.b64('$3')}{1}fail} server_set_id = $2 fixed_login: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" # old query, still using md5 (not working anymore) server_condition = ${lookup mysql{select concat(users.username,'@',domains.domain_name) from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)='$1' and users.password=md5('$2')}{1}fail} # obviously wrong query, test # server_condition = ${lookup mysql{select concat(users.username,'@',domains.domain_name) from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)='$1' and users.password=ssha.b64('$2')}{1}fail} server_set_id = $1
与dovecot比较:
cat /etc/dovecot/dovecot-sql.conf.ext|grep password_query password_query = select users.username AS username, domains.domain_name AS domain, concat("{SSHA512.BASE64}", users.password) AS password from users left join sites on sites.site_id=users.site_id left join domains on domains.site_id=sites.site_id where concat(users.username,'@',domains.domain_name)= '%u'
我会感谢指针或工作的MySQL查询。 我知道错误在哪里,但我无法弄清楚正确的查询。
应该更好地看文档。
根据exim文档 ,exim不支持ssha512(还?)。
我采取了简单的方法,只是告诉exim使用dovecot进行身份validation,就像dovecot文档告诉你的一样。
我很抱歉浪费你的时间,我希望有人会从我的经验中受益。