Проблема такая:Есть exim, ldap.
Надо чтобы пользователи отправляли почту через авторизацию:LDAPCFG = user=cn=root,dc=firma,dc=com pass=xxx connect=5
plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_condition = ${if ldapauth \
{user=${lookup ldapdn \
{LDAPCFG ldap:///ou=Mail_Users,dc=firma,dc=com?dn?sub?(uid=$2)}} \
pass=$3 connect=5 ldap:///} {true} {fail}}
server_set_id = $2Это кусок канает, НО:
Пароли в этом случае должны храниться в LDAP в открытом виде (clear), что не хорошо.
Задача: как написать этот кусок кода, чтобы он сверял пароль в LDAP который зашифрованый к примеру по ssha хешу?
К примеру если пароль в LDAP храниться в виде 123 то все канает, если в виде хеша
{SSHA}k/sDi92JshICtX8EXhHb8f0vecEV5YQ8
то не прокатит.
Судя по документации, да и по опыту, ldapauth просто биндится с указанным DN и указанным паролем к серверу и возвращает true или false в зависимости от результата (т.е. удалась авторизация или нет).Если для любого из клиентских DN проходит биндинг из, скажем, командной строки (см. утилитку ldapwhoami, например), то и из exim всё должно быть отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA, MD5 и т.д.), на результат это не влияет: пароль проверяет не exim а slapd (в случае OpenLDAP).
Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но лучше всего тогда использовать SSL/TLS)
>Судя по документации, да и по опыту, ldapauth просто биндится с указанным
>DN и указанным паролем к серверу и возвращает true или false
>в зависимости от результата (т.е. удалась авторизация или нет).
>
>Если для любого из клиентских DN проходит биндинг из, скажем, командной строки
>(см. утилитку ldapwhoami, например), то и из exim всё должно быть
>отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA,
>MD5 и т.д.), на результат это не влияет: пароль проверяет не
>exim а slapd (в случае OpenLDAP).
>
>Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с
>NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но
>лучше всего тогда использовать SSL/TLS)Чорт! Действительно выходит с SSHA. Куда я смотрел?
Спасибо друг!
>Судя по документации, да и по опыту, ldapauth просто биндится с указанным
>DN и указанным паролем к серверу и возвращает true или false
>в зависимости от результата (т.е. удалась авторизация или нет).
>
>Если для любого из клиентских DN проходит биндинг из, скажем, командной строки
>(см. утилитку ldapwhoami, например), то и из exim всё должно быть
>отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA,
>MD5 и т.д.), на результат это не влияет: пароль проверяет не
>exim а slapd (в случае OpenLDAP).
>
>Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с
>NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но
>лучше всего тогда использовать SSL/TLS)А если неизвестен dn пользователя, а известен только uid? Т.е. dn = cn=Дядя Вася, ou=Администрация, ou=Организация, ou=ru
>А если неизвестен dn пользователя, а известен только uid? Т.е. dn =
>cn=Дядя Вася, ou=Администрация, ou=Организация, ou=ruА в этом примере так и есть:
server_condition = ${if ldapauth \
{user=${lookup ldapdn {LDAPCFG ldap:///ou=Mail_Users,dc=firma,dc=com?dn?sub?(uid=$2)}} \
pass=$3 connect=5 ldap:///} \
{true} {fail}}Мы вначале ищем DN пользователя ниже базового, а потом этим найденным DN'ом биндимся.
А можно попробовать SASL. Там пользователь указывается только именем.