Steffen, If you can point me in the direction as to how to convert a column of clear text passwords to SHA512-CRYPT I will be happy to follow it and close this query, I only came here because I had spent almost two weeks trying to make the dovecot wiki work and thought someone would point out the mistakes I had made. But otherwise, I will move on, and not waste anyone's time anymore. ------------ You have a good day now, en mag jou m?re ook so wees, Carl A Jeptha On 2016-05-03 07:02, Steffen Kaiser wrote:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On Tue, 3 May 2016, Carl Jeptha wrote: > >> OK QUERY is WORKING ("password_query" relies on having a field/column >> "password', hence the addition under WHERE): >> password_query = \ >> SELECT username AS USER, \ >> IF(cryptpwd IS NULL OR cryptpwd=' ', CONCAT('{PLAIN}',clearpwd), >> cryptpwd) AS PASSWORD, \ >> '/var/vmail/%d/%n' as userdb_home, \ >> 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as >> userdb_gid \ >> FROM mailbox \ >> WHERE username = '%u' AND active = '1' AND cryptpwd = password >> ('%w') >> >> But still no happy dance, we now have a new error: >> >> dovecot: imap-login: Disconnected (auth failed, 3 attempts in 15 >> secs): user=<user at domain.tld>, method=PLAIN, rip=165.255.109.89, >> lip=10.0.0.12, TLS, session=<LywBS+0xdQCl/21Z> > > 1st) You should also enable auth debugging. > > 2nd) You are poking in the dark with SQL without understanding it, > > WHERE ... cryptpwd = password ('%w') > > ???? > > 3rd) I had the impression that you want to upgrade lower hashed > passwords into stronger hashed ones with a specific scheme and that > you therefore need to authentificate against two columns, but update > the strong hashes from the entered plain text password if missing. > > If you already have access to the clear/text passwords, hash them, put > the hashes into the database and be fine. No need for different > columns and a > post login script. > > Otherwise: Nobody answered this particular question. And I see no > evidance, that Dovecot passes an environment variable named > PLAIN_PASSWORD along. I've read the Wiki, but I see nothing like that > in the code. Did you've verified that the post login script gets the > plain password? > > If you have hashed passwords, CONCAT('{PLAIN}',clearpwd) is nonsense. > >> >> >> >> On Tue, May 3, 2016 at 11:10 AM, Carl Jeptha <cajeptha at gmail.com> wrote: >> >>> Here is what is in phpmyadmin: >>> password_query >>> SELECT >>> username as user, >>> SELECT >>> IF( >>> cryptpwd IS NULL >>> OR cryptpwd = '', >>> CONCAT('{PLAIN}', clearpwd), >>> cryptpwd >>> ) as password, >>> '/var/vmail/%d/%n' as userdb_home, >>> 'maildir:/var/vmail/%d/%n' as userdb_mail, >>> 150 as userdb_uid, >>> 8 as userdb_gid >>> FROM >>> mailbox >>> WHERE >>> username = '%u' >>> AND active = '1' >>> >>> and the error now: >>> #1064 - You have an error in your SQL syntax; check the manual that >>> corresponds to your MySQL server version for the right syntax to use >>> near >>> 'password_query >>> SELECT >>> username as user, >>> SELECT >>> IF( >>> cryptpwd IS NULL >>> ' at line 1 >>> >>> On Mon, May 2, 2016 at 2:07 PM, Gedalya <gedalya at gedalya.net> wrote: >>> >>>> On 05/02/2016 05:32 AM, Carl Jeptha wrote: >>>>> May 2 05:26:03 |****** dovecot: auth-worker(3442): Error: >>>>> sql(user at domain.tld,xxx.xxx.xxx.xxx): Password query must return a >>>>> field named 'password' >>>> I'm not sure, maybe it's checking case-sensitive. Your query returns >>>> PASSWORD. Make it lowercase. >>>> >>>>> >>>>> For testing purposes I put the query in PHPMyAdmin and it >>>>> complains this >>>>> (notice it drops "PASSWORD", but shows it in the query: >>>>> #1064 - You have an error in your SQL syntax; check the manual that >>>>> corresponds to your MySQL server version for the right syntax to use >>>> near '\ >>>>> IF(cryptpwd IS NULL OR cryptpwd='', CONCAT('{PLAIN}',clearpwd), >>>>> cryptpwd) as ' at line 1 >>>>> >>>>> >>>> It also sarts with a \ ... did you leave that in? That is specific >>>> to the >>>> dovecot config file. In PHPMyAdmin you should remove the >>>> line-continuation >>>> backslashes. >>>> >>>> Actually if you use the mysql command-line client, you would be >>>> able to >>>> paste that in with the backlashes. >>>> >>>> Make sure to put in a real value in WHERE username = '%u' <<< >>>> >>> >>> >> > > - -- Steffen Kaiser > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > > iQEVAwUBVyiFMXz1H7kL/d9rAQKnRAgAuvDfoovuWo6Pe9K0xOL7P3EDzB2KNdMH > 8Wdno9O859LH9sBFIn3//WW2oQqgqOPCWfOnkUTG/w+l4yYHkFCeVmJgDoKlWGUd > +tNlpZjFvrqBKazKlTAaJ/WBiMkyDlT3qJzrIAGMaXZv+0ycUMTN3+ulrUceB4WW > +Uk5Cvt6LEq9wuqDABje4frIfQc9WVVxI69+z8bHnW6OIq2sL2DXFFRskPbdKFTG > LTUewcpZTzBKSYLtbFfseBXTCmLy2XPazziamDr9/GWE9yBUR8VhcaTlCp4aI9VG > 0vB4qCwHF5GNZ6740vYwkVWPFHNYaZW+xZ7v9GCY2mF71A2viCP+QA=> =sXel > -----END PGP SIGNATURE-----
The script I sent you should do the job of populating your cryptpwd column with
a SHA512-CRYPT version of the clearpwd column.
The only reason why you would bother with a perl script is to get a better
quality salt from /dev/urandom
If you don't care so much about the quality of the salt, you can just run
this single query.
Make a backup of your database first!!
UPDATE mailbox set cryptpwd = ENCRYPT(clearpwd,
CONCAT('$6$',sha(RAND()))) WHERE cryptpwd IS NULL OR cryptpwd='
';
Here you are using MySQL's RAND() function to generate salt. It will do the
minimum job of making the resulting encrypted password not equal to a SHA512 of
the password itself, but the salt isn't very random. So the perl script I
sent you reads 12 bytes of better quality random data from /dev/urandom and uses
that. This means that if your database gets stolen it will be harder to decrypt
the passwords.
On 05/03/2016 11:58 AM, Carl Jeptha wrote:> Steffen,
> If you can point me in the direction as to how to convert a column of clear
text passwords to SHA512-CRYPT I will be happy to follow it and close this
query, I only came here because I had spent almost two weeks trying to make the
dovecot wiki work and thought someone would point out the mistakes I had made.
>
> But otherwise, I will move on, and not waste anyone's time anymore.
>
> ------------
> You have a good day now, en mag jou m?re ook so wees,
>
>
> Carl A Jeptha
>
> On 2016-05-03 07:02, Steffen Kaiser wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On Tue, 3 May 2016, Carl Jeptha wrote:
>>
>>> OK QUERY is WORKING ("password_query" relies on having a
field/column
>>> "password', hence the addition under WHERE):
>>> password_query = \
>>> SELECT username AS USER, \
>>> IF(cryptpwd IS NULL OR cryptpwd=' ',
CONCAT('{PLAIN}',clearpwd),
>>> cryptpwd) AS PASSWORD, \
>>> '/var/vmail/%d/%n' as userdb_home, \
>>> 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as
userdb_uid, 8 as
>>> userdb_gid \
>>> FROM mailbox \
>>> WHERE username = '%u' AND active = '1' AND
cryptpwd = password ('%w')
>>>
>>> But still no happy dance, we now have a new error:
>>>
>>> dovecot: imap-login: Disconnected (auth failed, 3 attempts in 15
>>> secs): user=<user at domain.tld>, method=PLAIN,
rip=165.255.109.89,
>>> lip=10.0.0.12, TLS, session=<LywBS+0xdQCl/21Z>
>>
>> 1st) You should also enable auth debugging.
>>
>> 2nd) You are poking in the dark with SQL without understanding it,
>>
>> WHERE ... cryptpwd = password ('%w')
>>
>> ????
>>
>> 3rd) I had the impression that you want to upgrade lower hashed
passwords into stronger hashed ones with a specific scheme and that you
therefore need to authentificate against two columns, but update the strong
hashes from the entered plain text password if missing.
>>
>> If you already have access to the clear/text passwords, hash them, put
the hashes into the database and be fine. No need for different columns and a
>> post login script.
>>
>> Otherwise: Nobody answered this particular question. And I see no
evidance, that Dovecot passes an environment variable named PLAIN_PASSWORD
along. I've read the Wiki, but I see nothing like that in the code. Did
you've verified that the post login script gets the plain password?
>>
>> If you have hashed passwords, CONCAT('{PLAIN}',clearpwd) is
nonsense.
>>
>>>
>>>
>>>
>>> On Tue, May 3, 2016 at 11:10 AM, Carl Jeptha <cajeptha at
gmail.com> wrote:
>>>
>>>> Here is what is in phpmyadmin:
>>>> password_query >>>> SELECT
>>>> username as user,
>>>> SELECT
>>>> IF(
>>>> cryptpwd IS NULL
>>>> OR cryptpwd = '',
>>>> CONCAT('{PLAIN}', clearpwd),
>>>> cryptpwd
>>>> ) as password,
>>>> '/var/vmail/%d/%n' as userdb_home,
>>>> 'maildir:/var/vmail/%d/%n' as userdb_mail,
>>>> 150 as userdb_uid,
>>>> 8 as userdb_gid
>>>> FROM
>>>> mailbox
>>>> WHERE
>>>> username = '%u'
>>>> AND active = '1'
>>>>
>>>> and the error now:
>>>> #1064 - You have an error in your SQL syntax; check the manual
that
>>>> corresponds to your MySQL server version for the right syntax
to use near
>>>> 'password_query >>>> SELECT
>>>> username as user,
>>>> SELECT
>>>> IF(
>>>> cryptpwd IS NULL
>>>> ' at line 1
>>>>
>>>> On Mon, May 2, 2016 at 2:07 PM, Gedalya <gedalya at
gedalya.net> wrote:
>>>>
>>>>> On 05/02/2016 05:32 AM, Carl Jeptha wrote:
>>>>>> May 2 05:26:03 |****** dovecot: auth-worker(3442):
Error:
>>>>>> sql(user at domain.tld,xxx.xxx.xxx.xxx): Password query
must return a
>>>>>> field named 'password'
>>>>> I'm not sure, maybe it's checking case-sensitive.
Your query returns
>>>>> PASSWORD. Make it lowercase.
>>>>>
>>>>>>
>>>>>> For testing purposes I put the query in PHPMyAdmin and
it complains this
>>>>>> (notice it drops "PASSWORD", but shows it in
the query:
>>>>>> #1064 - You have an error in your SQL syntax; check the
manual that
>>>>>> corresponds to your MySQL server version for the right
syntax to use
>>>>> near '\
>>>>>> IF(cryptpwd IS NULL OR cryptpwd='',
CONCAT('{PLAIN}',clearpwd),
>>>>>> cryptpwd) as ' at line 1
>>>>>>
>>>>>>
>>>>> It also sarts with a \ ... did you leave that in? That is
specific to the
>>>>> dovecot config file. In PHPMyAdmin you should remove the
line-continuation
>>>>> backslashes.
>>>>>
>>>>> Actually if you use the mysql command-line client, you
would be able to
>>>>> paste that in with the backlashes.
>>>>>
>>>>> Make sure to put in a real value in WHERE username =
'%u' <<<
>>>>>
>>>>
>>>>
>>>
>>
>> - -- Steffen Kaiser
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1
>>
>> iQEVAwUBVyiFMXz1H7kL/d9rAQKnRAgAuvDfoovuWo6Pe9K0xOL7P3EDzB2KNdMH
>> 8Wdno9O859LH9sBFIn3//WW2oQqgqOPCWfOnkUTG/w+l4yYHkFCeVmJgDoKlWGUd
>> +tNlpZjFvrqBKazKlTAaJ/WBiMkyDlT3qJzrIAGMaXZv+0ycUMTN3+ulrUceB4WW
>> +Uk5Cvt6LEq9wuqDABje4frIfQc9WVVxI69+z8bHnW6OIq2sL2DXFFRskPbdKFTG
>> LTUewcpZTzBKSYLtbFfseBXTCmLy2XPazziamDr9/GWE9yBUR8VhcaTlCp4aI9VG
>> 0vB4qCwHF5GNZ6740vYwkVWPFHNYaZW+xZ7v9GCY2mF71A2viCP+QA=>> =sXel
>> -----END PGP SIGNATURE-----
Thank you,
Due to changes I had to make to let password_query work, I think your
"quick" version should be like this my setup:
UPDATE mailbox set password = ENCRYPT(clearpwd,
CONCAT('$6$',sha(RAND()))) WHERE password IS NULL OR password='
';
------------
You have a good day now, en mag jou m?re ook so wees,
Carl A Jeptha
On 2016-05-03 18:10, Gedalya wrote:> The script I sent you should do the job of populating your cryptpwd column
with a SHA512-CRYPT version of the clearpwd column.
> The only reason why you would bother with a perl script is to get a better
quality salt from /dev/urandom
> If you don't care so much about the quality of the salt, you can just
run this single query.
> Make a backup of your database first!!
>
> UPDATE mailbox set cryptpwd = ENCRYPT(clearpwd,
CONCAT('$6$',sha(RAND()))) WHERE cryptpwd IS NULL OR cryptpwd='
';
>
> Here you are using MySQL's RAND() function to generate salt. It will do
the minimum job of making the resulting encrypted password not equal to a SHA512
of the password itself, but the salt isn't very random. So the perl script I
sent you reads 12 bytes of better quality random data from /dev/urandom and uses
that. This means that if your database gets stolen it will be harder to decrypt
the passwords.
>
>
> On 05/03/2016 11:58 AM, Carl Jeptha wrote:
>> Steffen,
>> If you can point me in the direction as to how to convert a column of
clear text passwords to SHA512-CRYPT I will be happy to follow it and close this
query, I only came here because I had spent almost two weeks trying to make the
dovecot wiki work and thought someone would point out the mistakes I had made.
>>
>> But otherwise, I will move on, and not waste anyone's time anymore.
>>
>> ------------
>> You have a good day now, en mag jou m?re ook so wees,
>>
>>
>> Carl A Jeptha
>>
>> On 2016-05-03 07:02, Steffen Kaiser wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> On Tue, 3 May 2016, Carl Jeptha wrote:
>>>
>>>> OK QUERY is WORKING ("password_query" relies on
having a field/column
>>>> "password', hence the addition under WHERE):
>>>> password_query = \
>>>> SELECT username AS USER, \
>>>> IF(cryptpwd IS NULL OR cryptpwd=' ',
CONCAT('{PLAIN}',clearpwd),
>>>> cryptpwd) AS PASSWORD, \
>>>> '/var/vmail/%d/%n' as userdb_home, \
>>>> 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as
userdb_uid, 8 as
>>>> userdb_gid \
>>>> FROM mailbox \
>>>> WHERE username = '%u' AND active = '1'
AND cryptpwd = password ('%w')
>>>>
>>>> But still no happy dance, we now have a new error:
>>>>
>>>> dovecot: imap-login: Disconnected (auth failed, 3 attempts in
15
>>>> secs): user=<user at domain.tld>, method=PLAIN,
rip=165.255.109.89,
>>>> lip=10.0.0.12, TLS, session=<LywBS+0xdQCl/21Z>
>>> 1st) You should also enable auth debugging.
>>>
>>> 2nd) You are poking in the dark with SQL without understanding it,
>>>
>>> WHERE ... cryptpwd = password ('%w')
>>>
>>> ????
>>>
>>> 3rd) I had the impression that you want to upgrade lower hashed
passwords into stronger hashed ones with a specific scheme and that you
therefore need to authentificate against two columns, but update the strong
hashes from the entered plain text password if missing.
>>>
>>> If you already have access to the clear/text passwords, hash them,
put the hashes into the database and be fine. No need for different columns and
a
>>> post login script.
>>>
>>> Otherwise: Nobody answered this particular question. And I see no
evidance, that Dovecot passes an environment variable named PLAIN_PASSWORD
along. I've read the Wiki, but I see nothing like that in the code. Did
you've verified that the post login script gets the plain password?
>>>
>>> If you have hashed passwords, CONCAT('{PLAIN}',clearpwd) is
nonsense.
>>>
>>>>
>>>>
>>>> On Tue, May 3, 2016 at 11:10 AM, Carl Jeptha <cajeptha at
gmail.com> wrote:
>>>>
>>>>> Here is what is in phpmyadmin:
>>>>> password_query >>>>> SELECT
>>>>> username as user,
>>>>> SELECT
>>>>> IF(
>>>>> cryptpwd IS NULL
>>>>> OR cryptpwd = '',
>>>>> CONCAT('{PLAIN}', clearpwd),
>>>>> cryptpwd
>>>>> ) as password,
>>>>> '/var/vmail/%d/%n' as userdb_home,
>>>>> 'maildir:/var/vmail/%d/%n' as userdb_mail,
>>>>> 150 as userdb_uid,
>>>>> 8 as userdb_gid
>>>>> FROM
>>>>> mailbox
>>>>> WHERE
>>>>> username = '%u'
>>>>> AND active = '1'
>>>>>
>>>>> and the error now:
>>>>> #1064 - You have an error in your SQL syntax; check the
manual that
>>>>> corresponds to your MySQL server version for the right
syntax to use near
>>>>> 'password_query >>>>> SELECT
>>>>> username as user,
>>>>> SELECT
>>>>> IF(
>>>>> cryptpwd IS NULL
>>>>> ' at line 1
>>>>>
>>>>> On Mon, May 2, 2016 at 2:07 PM, Gedalya <gedalya at
gedalya.net> wrote:
>>>>>
>>>>>> On 05/02/2016 05:32 AM, Carl Jeptha wrote:
>>>>>>> May 2 05:26:03 |****** dovecot: auth-worker(3442):
Error:
>>>>>>> sql(user at domain.tld,xxx.xxx.xxx.xxx): Password
query must return a
>>>>>>> field named 'password'
>>>>>> I'm not sure, maybe it's checking
case-sensitive. Your query returns
>>>>>> PASSWORD. Make it lowercase.
>>>>>>
>>>>>>> For testing purposes I put the query in PHPMyAdmin
and it complains this
>>>>>>> (notice it drops "PASSWORD", but shows it
in the query:
>>>>>>> #1064 - You have an error in your SQL syntax; check
the manual that
>>>>>>> corresponds to your MySQL server version for the
right syntax to use
>>>>>> near '\
>>>>>>> IF(cryptpwd IS NULL OR cryptpwd='',
CONCAT('{PLAIN}',clearpwd),
>>>>>>> cryptpwd) as ' at line 1
>>>>>>>
>>>>>>>
>>>>>> It also sarts with a \ ... did you leave that in? That
is specific to the
>>>>>> dovecot config file. In PHPMyAdmin you should remove
the line-continuation
>>>>>> backslashes.
>>>>>>
>>>>>> Actually if you use the mysql command-line client, you
would be able to
>>>>>> paste that in with the backlashes.
>>>>>>
>>>>>> Make sure to put in a real value in WHERE username =
'%u' <<<
>>>>>>
>>>>>
>>> - -- Steffen Kaiser
>>> -----BEGIN PGP SIGNATURE-----
>>> Version: GnuPG v1
>>>
>>> iQEVAwUBVyiFMXz1H7kL/d9rAQKnRAgAuvDfoovuWo6Pe9K0xOL7P3EDzB2KNdMH
>>> 8Wdno9O859LH9sBFIn3//WW2oQqgqOPCWfOnkUTG/w+l4yYHkFCeVmJgDoKlWGUd
>>> +tNlpZjFvrqBKazKlTAaJ/WBiMkyDlT3qJzrIAGMaXZv+0ycUMTN3+ulrUceB4WW
>>> +Uk5Cvt6LEq9wuqDABje4frIfQc9WVVxI69+z8bHnW6OIq2sL2DXFFRskPbdKFTG
>>> LTUewcpZTzBKSYLtbFfseBXTCmLy2XPazziamDr9/GWE9yBUR8VhcaTlCp4aI9VG
>>> 0vB4qCwHF5GNZ6740vYwkVWPFHNYaZW+xZ7v9GCY2mF71A2viCP+QA=>>>
=sXel
>>> -----END PGP SIGNATURE-----