Troquei meu hashing de senha de md5 para ssha512, agora o exim4 não aceita logins smtp

1

Alterei recentemente meu hash de senha de md5 para ssha512. Isso funciona bem com o dovecot, para que eu possa ler as mensagens recebidas sem problemas.

Não funciona tão bem para o exim4.

Saída de log do 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

(Os detalhes de identificação foram trocados por motivos de privacidade)

Isto é obviamente devido à razão que não existe nenhuma função ssha.b64 no mysql. Existe alguma maneira de consultar o mysql com a senha simples para que o mysql hashes e sais a senha do salt is tem em seu banco de dados?

Arquivos de configuração relevantes:

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

Compare com o 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'

Eu ficaria grato por ponteiros ou uma consulta mysql de trabalho. Eu sei onde está o bug, mas não consigo descobrir a consulta correta.

    
por David Mändlen 27.07.2015 / 12:24

1 resposta

1

Deveria ter melhorado a documentação.

De acordo com a documentação do exim , o exim não suporte ssha512 (ainda?).

Eu peguei o caminho mais fácil e apenas disse ao Exim para usar o dovecot para fins de autenticação, como a documentação dovecot diz a você para.

Sinto muito por ter desperdiçado seu tempo e espero que alguém se beneficie da minha experiência.

    
por 27.07.2015 / 17:10