Il crypteq di Exim4 con la ricerca di MySQL non riesce mai

Ho ricevuto un server Exim 4.80 su Ubuntu 14.04. Voglio passare da Dovecot Auth a MySQL. Le password sono memorizzate come crypt (con sha256, a partire da $ 5 $). L'espansione sembra così:

server_condition = $ {if crypteq {$ 3} {$ {cerca mysql {SELECT password FROM account SINISTRA COMUNE domini ON accounts.domain = domains.id AND domains.domain = '$ {quote_mysql: $ {domain: $ 2}}' where account .name = '$ {quote_mysql: $ {local_part: $ 2}}'}}} {yes} {no}}

Quando accendo la logging del debug, ho qualcosa di simile:

10 sobject = $ 5 $ fBzbQG0FRF1Lt2QI $ Nhmrw5gKq62vmHDD8Eov9WCoGRPkk —– RIDUTTATO —-

10 criptato = $ 5 $ fBzbQG0FRF1Lt2QI $ Nhmrw5gKq62vmHDD8Eov9WCoGRPkk —– RIDUTTATO —-

Entrambi RIDUTTATI sono esattamente uguali. Quindi avviene quanto segue:

10 string espansa: no

Ho scavato nel codice sorgente di Exim e ho scoperto che il codice seguente è responsabile del messaggio di debug e del risultato di crypteq

#define STR(s) # s #define XSTR(s) STR(s) DEBUG(D_auth) debug_printf("crypteq: using %s()\n" " subject=%s\n crypted=%s\n", (which == 0)? XSTR(DEFAULT_CRYPT) : (which == 1)? "crypt" : "crypt16", coded, sub[1]); #undef STR #undef XSTR /* If the encrypted string contains fewer than two characters (for the salt), force failure. Otherwise we get false positives: with an empty string the yield of crypt() is an empty string! */ tempcond = (Ustrlen(sub[1]) < 2)? FALSE : (Ustrcmp(coded, sub[1]) == 0); } 

Quindi subject = è la variabile codificata, generata dalla function criptata, mentre crypted = è il sub [1]. Questi sono entrambi gli stessi. Il successo dell'operatore dipende solo dal tempo sub [1] è più lungo di due caratteri (che apparentemente è vero) e sono gli stessi (che DOVREBBE anche essere vero).

Qualcuno sa perché questo accade?

Modifica: non accade se inserisco un hash direttamente nelle parentesi senza la ricerca di MySQL. Sembra che ci sia un errore di espansione con MySQL.

  • Come impostare l'authorization di gruppo predefinita in Ubuntu per www-data (utente di apache)?
  • Come posso usare etckeeper tramite sudo con diversi utenti e avere l'utente corretto nel messaggio di commit?
  • Rimuovere l'utente dal gruppo root
  • Qual è lo scopo di kslowd?
  • Account di vsftpd di authentication utilizzando l'utente LDAP remoto
  • segfault in timeout.rb utilizzando la gem con l'edizione ruby ​​enterprise (ree-1.8.7)
  • cambiando il formato dei file system da xfs a ext4 senza perdere i dati
  • default ubuntu installare, è hackable?
  • One Solution collect form web for “Il crypteq di Exim4 con la ricerca di MySQL non riesce mai”

    Ok, quindi per chiunque altro inciampa su questo problema: l'espansione di MySQL in qualche modo aggiunge spazio (anche se nel database non sono chiaramente nessuno). Per risolvere il problema, incapsulare l'espansione MySQL all'interno di un substr con la lunghezza dei hash. Un esempio per gli hash di sha256-crypt sarebbe:

    $ {substr {0} {63} {$ {cerca mysql {

    Allora dovrebbe funzionare.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.