Здравствуйте.Помогите пож настроить сабж, если пароли в поле password храняться шифрованными mysql-фукцией PASSWORD.
cat authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME exim
MYSQL_PASSWORD exim
MYSQL_PORT 3306
#MYSQL_OPT 0
MYSQL_DATABASE exim
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 26
MYSQL_GID_FIELD 6
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD CONCAT('/var/mail/exim/','')
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD CONCAT('/var/mail/exim/',maildir)
MYSQL_QUOTA_FIELD quotatail -f /var/log/maillog
Jun 20 21:35:14 mail pop3d: LOGIN FAILED, user=senigor, ip=[193.232.248.53]
Как настроить? Задолбался уже :(
Добрый день.>Помогите пож настроить сабж, если пароли в поле password храняться шифрованными mysql-фукцией PASSWORD.
я лично шифрую пароли при помощи md5 и все проходит на ура
>Добрый день.
>
>>Помогите пож настроить сабж, если пароли в поле password храняться шифрованными mysql-фукцией PASSWORD.
>я лично шифрую пароли при помощи md5 и все проходит на ура
>Это понятно, у меня с авторизацией на курьере тоже никогда не возникало проблем если пароли лежали в мд5 или в клеартексте, но сейчас в наследство досталась база позователей пароли которых ширвованы ф-ей PASSWORD и как теперь быть? Подскажите мож кто сталкивался.
DEBUG_LOGIN=2 поставь и дай лог
>DEBUG_LOGIN=2 поставь и дай лог
Jun 21 11:08:37 mail pop3d: Connection, ip=[xxx.xxx.xxx.xx]
Jun 21 11:08:37 mail authdaemond: received auth request, service=pop3, authtype=login
Jun 21 11:08:37 mail authdaemond: authmysql: trying this module
Jun 21 11:08:37 mail authdaemond: SQL query: SELECT username, password, "", 26, 6, CONCAT('/var/mail/exim/',''), CONCAT('/var/mail/exim/',maildir), quota, name, "" FROM mailbox WHERE username = "senigor"
Jun 21 11:08:37 mail authdaemond: supplied password 'nthvbyfk2' does not match encrypted password '1de4a0e000e61314'
Jun 21 11:08:37 mail authdaemond: authmysql: REJECT - try next module
Jun 21 11:08:37 mail authdaemond: FAIL, all modules rejected
Jun 21 11:08:45 mail pop3d: Disconnected, ip=[193.232.248.53]ну вот о чем я и говорю. Т.е. клиент пытаеться передать пароль "nthvbyfk2" а он ес-но не совпадает с криптованным тем же паролем 1de4a0e000e61314 который в поле password.
Как быть?
Неужели нет решения?
кто-нибудь может что нибудь посоветовать? гугл молчит. Если в поле пароля прописывать clearpasswd и устанавливать MYSQL_CLEAR_PWFIELD, то все работает. Но как быть в моей ситуации? HELP !!!!!!!
OK. Может можно как-то преобразовать пароли 1de4a0e000e61314 к cleartext ???
Кто нибудь ответит?
>OK. Может можно как-то преобразовать пароли 1de4a0e000e61314 к cleartext ???
>Кто нибудь ответит?АУУУУУУУУУУУУУУУУУУУ !!!
Кто нибудь поможет?
>АУУУУУУУУУУУУУУУУУУУ !!!
>Кто нибудь поможет?
да не суетись ты... нибудь-чего придумаем... :-)
>>OK. Может можно как-то преобразовать пароли 1de4a0e000e61314 к cleartext ???
>>Кто нибудь ответит?
>
>АУУУУУУУУУУУУУУУУУУУ !!!
>Кто нибудь поможет?MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD mail
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 125
MYSQL_GID_FIELD 6
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/var/mail/virtual/'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quotaУ меня так выглядит. Все работает. пароли зашифрованы функцией CRYPT
решение найдено наполовину :)Это использование cyrus_imapd + pwcheck_mysql, который
is a an authentication module for the Cyrus IMAP server. It allows IMAP mail users to be authenticated against a MySQL database. This is nice because it allows you to have IMAP mail users without having regular UNIX accounts. There are probably many caveats to using this module including:
o Passwords will show up in the MySQL log if you have logging on your MySQL server, this is the default. Although this module is designed to encrypt passwords as they are stored in the database, they can still be seen in plain text in the SQL logs this is due to the fact that I am using password () in my SQL statement, a MySQL specific function. If anyone knows how to encrypt the password before doing the "select" statement, that would be great.Но не хочеться использовать этот cyrus. Хочеться курьер-имап. Может кто знает похожий модуль для курьер-имапа?
Если не ошибаюсь, то тебе поможет dovecot.
>Если не ошибаюсь, то тебе поможет dovecot.Спасибо тебе огромное!!! Именно то что нужно:
If the passwords are in some special format in the SQL server that Dovecot doesn't recognize, it's still possible to use them. Change the SQL query to return NULL as the password and return the row only if the password matches. The password is in %w variable.
For example:
# NOTE: '\' line splitting is used only for readability, currently Dovecot doesn't support it
password_query = SELECT NULL AS password, userid AS user FROM users WHERE userid = '%u' AND mysql_pass = password('%w')Вот решение проблемы !!!
>Вот решение проблемы !!!Решение проблемы - достаточно прямые руки.
>>Вот решение проблемы !!!
>
>Решение проблемы - достаточно прямые руки.Что же вы молчали 4 дня, пряморукий Вы наш. Ну вообще-то еще не поздно, я с удовольствием узнаю решение этой проблемы от Вас для курьер-имапа. Я весь во внимании.
>Что же вы молчали 4 дня, пряморукий Вы наш. Ну вообще-то еще
>не поздно, я с удовольствием узнаю решение этой проблемы от Вас
>для курьер-имапа. Я весь во внимании.Мне теперь нужно поставить Courier, чтобы вам помочь? Чтобы решить проблему, нужно пытаться это сделать, а не подходить кардинально, устанавливая Dovecot. Уж поверьте, если бы возможности доставать криптованные пароли из базы не было бы, такая функция не была бы включена в конфиг. Уж будьте уверены, если я возьмусь за решение данного вопроса, я сделаю. Однако решать за вас ваши же проблемы я не намерен.
>>Что же вы молчали 4 дня, пряморукий Вы наш. Ну вообще-то еще
>>не поздно, я с удовольствием узнаю решение этой проблемы от Вас
>>для курьер-имапа. Я весь во внимании.
>
>Мне теперь нужно поставить Courier, чтобы вам помочь? Чтобы решить проблему, нужно
>пытаться это сделать, а не подходить кардинально, устанавливая Dovecot. Уж поверьте,
>если бы возможности доставать криптованные пароли из базы не было бы,
>такая функция не была бы включена в конфиг.OK. Скажите мне пожалуйста ф-цию которая достает криптованный мускульной ф-цией PASSWORD пароль и сравнивает его с паролем полученным в PLAIN от клиента. Курьер-аузлиб просто этого не может.
>Уж будьте уверены,
>если я возьмусь за решение данного вопроса, я сделаю. Однако решать
>за вас ваши же проблемы я не намерен.Не сомневаюсь, вы попросили дебаг, я вам предоставил...
>OK. Скажите мне пожалуйста ф-цию которая достает криптованный мускульной ф-цией PASSWORD пароль
>и сравнивает его с паролем полученным в PLAIN от клиента. Курьер-аузлиб
>просто этого не может.Да, признаю:
MYSQL_CRYPT_PWFIELD - name of the field containing the crypt-ed password (either MYSQL_CRYPT_PWFIELD or MYSQL_CLEAR_PWFIELD is required). NOTE: this password must be crypt-ed using the operating system's crypt function, NOT MySQL's crypt function. MySQL's crypt() function is non-standard and is not generally compatible with the operating system's crypt function.Только путем напильника эту проблему решить можно.
Так же, весьма интересно, чтоENCRYPT(str[,salt])
Шифрует аргумент str, используя вызов системной функции кодирования crypt() из Unix.
Если функция crypt() в данной операционной системе недоступна, функция ENCRYPT() всегда возвращает NULL. Функция ENCRYPT() игнорирует все символы в аргументе str, за исключением первых восьми, по крайней мере в некоторых операционных системах - это определяется тем, как реализован системный вызов базовой функции crypt().
Вопрос в том, почему, если ENCRYPT использует "системную функцию кодирования crypt() из Unix", то "MySQL's crypt() function is non-standard and is not generally compatible with the operating system's crypt function"? Чего-то я не понимаю.
>Так же, весьма интересно, что
>ENCRYPT(str[,salt])
>Шифрует аргумент str, используя вызов системной функции кодирования crypt() из Unix.
>Если функция crypt() в данной операционной системе недоступна, функция ENCRYPT() всегда возвращает
>NULL. Функция ENCRYPT() игнорирует все символы в аргументе str, за исключением
>первых восьми, по крайней мере в некоторых операционных системах - это
>определяется тем, как реализован системный вызов базовой функции crypt().
>Вопрос в том, почему, если ENCRYPT использует "системную функцию кодирования crypt() из
>Unix", то "MySQL's crypt() function is non-standard and is not generally
>compatible with the operating system's crypt function"? Чего-то я не понимаю.
>
Скорее всего когда они писали "MySQL's crypt() function is non-standard ..." они не подразумевали системную crypt(). А хотели сказать типа что ф--ция криптования мускула, не такая как системная. Ну решили так выразить свою мысль наверно:) Короче хез :) Факт остаеться то что ф-ция мускула PASSWORD криптует не так как системная crypt()
> Факт остаеться то что ф-ция мускула PASSWORD
> криптует не так как системная crypt()
естественно, об этом написано в документации