Я переключил свое хеширование пароля от md5 до ssha512, теперь exim4 не примет smtp-логины

Я недавно переключил свое хеширование пароля от md5 до ssha512. Это хорошо работает с голубятней, таким образом, я могу считать входящую корреспонденцию без проблем.

Это не работает также на 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 (set_id=USER@DOMAIN.TLD): 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)='USER@DOMAIN.TLD' and users.password=ssha.b64('SECRETPASSWORD')" gave DEFER: MYSQL: query failed: FUNCTION ssha.b64 does not exist

(Деталями идентификации обменялись по причинам конфиденциальности),

Это происходит очевидно из-за причины, что нет никакой ssha.b64-функции в mysql. Там какой-либо путь состоит в том, чтобы запросить mysql с простым паролем так, чтобы mysql хешировал и посолил пароль от соли, имеет в ее базе данных?

Соответствующие файлы конфигурации:

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

Сравните с голубятней:

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

1
задан 27 July 2015 в 15:29
1 ответ

Надо было лучше изучить документацию.

Согласно документации exim , exim не поддерживает ssha512 (пока?).

выход и просто сказал exim использовать dovecot для целей аутентификации, как документация dovecot говорит вам об этом.

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

1
ответ дан 4 December 2019 в 00:03

Теги

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