[Dovecot] SQL field format for digest-md5?
Darren Pilgrim
list_dovecot at bluerosetech.com
Wed Dec 24 10:10:37 EET 2008
Timo Sirainen wrote:
> On Dec 23, 2008, at 11:51 PM, Darren Pilgrim wrote:
>
>> Timo Sirainen wrote:
>>> On Dec 23, 2008, at 8:57 PM, Darren Pilgrim wrote:
>>>> I'm enabling digest-md5 authentication with "user at example.com"
>>>> username and plain-text passwords stored in a MySQL database.
>>>> What should the password field contain in order to work with
>>>> digest-md5? Would the following:
>>>>
>>>> SELECT CONCAT('{digest-md5}', MD5(CONCAT(username, '::',
>>>> password))) AS password ...
>>>>
>>>> be correct?
>>> Don't try to do anything special. Just:
>>> SELECT username as user, password FROM ..
>> That's what I already have. It works for plain, login and cram-md5;
>> however, but digest-md5 fails. Reading the wiki page[1] for digest-
>> md5 says the user at example.com username format breaks because I'm not
>> using realms. My options are either set auth_realms or store
>> passwords using the DIGEST-MD5 scheme. I'm trying to do the later
>> since I can't realistically set or maintain auth_realms.
>
> So you're using Dovecot v1.0? I think issues related to this are fixed
> in v1.1 already.
I'm running v1.1.7.
> Anyway that SELECT looks correct. Have you tested that it produces the
> exact same result as when running dovecotpw -s digest-md5?
I get a different hash from dovecotpw -s digest-md5 than I do from
MySQL's MD5(CONCAT(username,'::',password)) and the md5 program:
$ dovecotpw -s digest-md5 -u brt.a at srv.twinthornes.com
<password prompts>
{DIGEST-MD5}24b21a60612e1cac3317e44e4354c219
mysql> SELECT MD5(CONCAT(username,'::',password)) AS hash FROM mailbox
WHERE username='brt.a at srv.twinthornes.com';
+----------------------------------+
| hash |
+----------------------------------+
| e422c685cfe2c9be72e2be3172003fca |
+----------------------------------+
$ echo -n "brt.a at srv.twinthornes.com::[password redacted]" | md5
e422c685cfe2c9be72e2be3172003fca
If I store the dovecotpw hash in the password column instead of the
plaintext password:
mysql> update mailbox set
password='{DIGEST-MD5}24b21a60612e1cac3317e44e4354c219' where
username='brt.a at srv.twinthornes.com';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
I still get a password mismatch:
Dec 23 23:50:23 srv dovecot: auth(default): client in: AUTH 2
DIGEST-MD5 service=smtp nologin
Dec 23 23:50:23 srv dovecot: auth(default): client out: CONT 2
cmVhbG09IiIsbm9uY2U9ImVpaEZyTFZlTUtBTEoybFphbHR0QVE9PSIscW9wPSJhdXRoIixjaGFyc2V0PSJ1dGYtOCIsYWxnb3JpdGhtPSJtZDUtc2VzcyI=
Dec 23 23:50:23 srv dovecot: auth(default): client in: CONT<hidden>
Dec 23 23:50:23 srv dovecot: auth-worker(default):
sql(brt.a at srv.twinthornes.com): query: SELECT password FROM mailbox
WHERE username = 'brt.a at srv.twinthornes.com' AND active=1
Dec 23 23:50:23 srv dovecot: auth(default):
digest-md5(brt.a at srv.twinthornes.com): password mismatch
Dec 23 23:50:25 srv dovecot: auth(default): client out: FAIL 2
user=brt.a at srv.twinthornes.com
More information about the dovecot
mailing list