LINUX.ORG.RU

ldap_connect ведёт себя неожиданно

 ,


0

1

Здравствуйте, мои дорогие любители убогонького недоязычка.

Мне потребовалось сделать авторизацию по LDAP. Читаем документацию.

http://www.php.net/ldap_connect

Returns a positive LDAP link identifier on success, or FALSE on error.

Думаю, что отсутствие в сети LDAP-сервера с указанным именем хоста является ошибкой (специально подставил несуществующий, дабы обработать эту ситуацию). Однако вышеуказанная функция вернула не FALSE, а ID ресурса.

Гугление мало помогло.

★☆☆

Последнее исправление: r_asian (всего исправлений: 1)

Как специалист по LDAP, и горе-специалист по php - перечитал 2 раза, так и не понял, что тебе не нравится.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Не нравится, что lpad_connect ведёт себя не так как в документации, и вместо FALSE в заведомо ошибочной ситуации возвращает ID ресурса.

r_asian ★☆☆
() автор топика

можно же в исходниках php посмотреть, что там эта ldap_connect() у себя внутри творит

Harald ★★★★★
()
Ответ на: комментарий от r_asian

Из документации

When OpenLDAP 2.x.x is used, ldap_connect() will always return a resource as it does not actually connect but just initializes the connecting parameters. The actual connect happens with the next calls to ldap_* funcs, usually with ldap_bind().

Ну обьясни

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

When OpenLDAP 2.x.x is used, ldap_connect() will always return a resource as it does not actually connect but just initializes the connecting parameters. The actual connect happens with the next calls to ldap_* funcs, usually with ldap_bind().

Ценное дополнение

Вся проблема в том, чтобы определить жив ли вообще LDAP-сервер до того, как станем передавать ему данные для авторизации тем же ldap_bind. Можно это сделать и общесетевыми функциями, но не очень хочется, особенно с учетом, что они позволят лишь понять принимает ли хост соединения по указанному порту. А вдруг там и не LDAP вовсе?

Returns a positive LDAP link identifier on success, or FALSE on error.

А вот это - ни в звезду ни в Красную Армию.

r_asian ★☆☆
() автор топика
Ответ на: комментарий от r_asian

жив ли вообще LDAP-сервер до того, как станем передавать ему данные для авторизации тем же ldap_bind

Не факт, что протокол такое позволяет. В любом случае это расширение просто дергает функции сишной либы ldap.

А вот это - ни в звезду ни в Красную Армию.

А что не так? Функция возвращает false в случае ошибки.

goingUp ★★★★★
()
Ответ на: комментарий от r_asian

Можно это сделать и общесетевыми функциями, но не очень хочется, особенно с учетом, что они позволят лишь понять принимает ли хост соединения по указанному порту. А вдруг там и не LDAP вовсе?

На одном из проектов я так и делал. Не помню почему не стал заморачиваться с поиском других решений, но заказчика это вполне устроило.

Hater ★★
()
Ответ на: комментарий от goingUp

А что не так? Функция возвращает false в случае ошибки.

Так в том то и дело, что FALSE оно не возвращает, даже если в качестве хоста указать заведомо несуществующий.

r_asian ★☆☆
() автор топика
Ответ на: комментарий от r_asian

Поскольку соединения на этом этапе не происходит, это не ошибка) Можно попробовать сделать ldap_bind() анонимный и посмотреть ldap_errno().

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Поскольку соединения на этом этапе не происходит

Забавный каламбур. При вызове функции connect, коннекта, собственно, и не происходит :-).

Это же Адъ и ПиздецЪ

r_asian ★☆☆
() автор топика
Ответ на: комментарий от r_asian

Может вернуть, если ты в limits не уложился и новый ресурс нет возможности создать. Короче, в исходниках, как правильно сказали, больше инфы будет, когда эта тварь возвращает то, что нужно.

GateKeeper ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.