php ldap search user

ldap_search — Поиск по LDAP дереву

Описание

Список параметров

Базовое DN для каталога.

Поисковый фильтр может быть простым или расширенным, используя булевы операторы в формате, описанном в документации LDAP (см. » Netscape Directory SDK для полной информации о фильтрах).

Массив необходимых атрибутов, например, array(«mail», «sn», «cn»). Обратите внимание, что «dn» всегда возвращается, независимо от того, какие типы атрибутов требуются.

Использование этого параметра намного более эффективно, чем действие по умолчанию (которое должно возвратить все атрибуты и присвоенные им значения). Поэтому использование этого параметра нужно считать хорошей практикой.

Должен быть равен 1, если требуются типы атрибута. Если равен 0, то, по умолчанию, выбираются и типы атрибутов и значения.

Позволяет ограничить количество выбранных записей. Установка этого параметра равным 0 означает, что ограничение отсутствует.

Этот параметр НЕ может переопределять предустановку sizelimit на стороне сервера. Хотя его можно установить ниже.

Некоторые хосты серверов каталогов будут сконфигурированы так, чтобы возвратить не больше, чем предварительно установленное число записей. Если это произойдет, то сервер укажет, что только возвратил частичный набор результатов. Это также происходит, если Вы используете этот параметр, чтобы ограничить количество выбранных записей.

Устанавливает число секунд, ограничивающее процесс поиска. Установка этого параметра равным 0 означает, что ограничение отсутствует.

Этот параметр НЕ может переопределять предустановку timelimit на стороне сервера. Хотя его можно установить ниже.

Возвращаемые значения

Возвращает идентификатор результата поиска или FALSE в случае ошибки.

Примеры

Пример #1 LDAP поиск

Источник

How search and update user data from Active Directory using LDAP in php?

I using php 5.6 and i try search user in Active Directory by LDAP in php. Example search:

I successfully get user data, but userPassword does not exist in returned fields. I need user password for compare password from Active Data and password entered by user.

How i can get user password from Active Data or how compare password entered by user and password in Active Directory without getting?

By the way, also, i need update user data in Active Directory. For example update name and email fields. How i can do that?

Thank you for answers.

php ldap search user. Смотреть фото php ldap search user. Смотреть картинку php ldap search user. Картинка про php ldap search user. Фото php ldap search user

2 Answers 2

If you only want to compare the password the user provided in a login interface with the password stored in LDAP/Active Directory you should use the ldap_bind command for that with the users dn and the password. It returns true when password and username/DN match and false when not.

To get the DN you’d typically bind with a known user that has read access to the ldap, search for the user by its username and then bind again with the returned users DN and the password. There is a gist that illustrates that at https://gist.github.com/heiglandreas/5689592

If you also want to set the users password you’d want to bind with the user as well as usually only the user (and admin accounts) are allowed to read (and write) the users password. So you’d also want to proceed as before but then add a call to update the users password-attribute. For a solution and more in depth knowledge have a look at f.e. http://www.letu.edu/people/markroedel/netcccu/activedirectorypasswordchanges.htm

Updating other userdata than password will also be done using ldap_modify or ldap_mod_replace

Use ldap_modify to update an ldap entry. It’s pretty simple :

userPassword is an operational attribute.

An operational attribute is used internally by the server. Generally, it is readable but can’t be modified by a user.

In order to retrieve an operational attribute, you have to require it explicitely or request all of them using the special attribute + (like you did with * to request all user attributes).

You can also request all (both user and operational) attributes with :

Here an example of how to manually generate a hash based on a clear text password :

=> This is not straightforward and a match is not guaranteed even if the input string is correct since you may encounter interoperability issues between ldap implementations and/or systems/OSs (hash/salt functions can differ from one to another, especially using crypt library that is system dependant).

If you want to test user authentication directly against AD, just use ldap_bind :

But if, for example, users credentials are to be checked both against an existing openLdap server and AD, it would require to constantly sync/replicate user entries, instead it is better to keep one single authentication backend. In such case you would have to use Pass-Through Authentication using the dedicated scheme in the 1st backend (openLDAP in this example) : With this configuration, Cyrus SASL is used as a password handler and delegates password verification to any back-end server with SASL supports for checking passwords (AD in your case but it could be Kerberos or an IMAP server).

Источник

Создаём WEB адресный справочник PHP + LDAP

Так случилось, что у (относительно) большой кампании было много отдалённых офисов, в которых находилось приличное количество пользователей. Все офисы соединены в одну сеть с общим доменом, каждый офис был определён в Active Directory (далее по тексту AD) как Organization Unit (OU), в котором уже заводились пользователи.

Необходимо было дать пользователям возможность быстро и без особенных усилий получать контактные данные необходимого сотрудника из AD, а системных администраторов освободить от рутины редактирования текстового файла, который играл роль адресной книги.

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

Начнём с того, что для начала нужно определиться что использовать, это просто — итоговый справочник должен быть доступен всем пользователям домена посредством браузера. Первое, что приходит на ум это PHP в связке с ldap, их и будем использовать. Большим плюсом использования PHP я считаю его относительную простоту — любой хоть немного понимающий системный администратор сможет внести, при необходимости, нужные правки в код, не особенно напрягаясь.

Итак, начнём. для начала зададим параметры подключения к домену:

Если же мы определили OU, тогда приступаем к дальнейшим действиям: начинаем рисовать пользователю страницу справочника:

Включаем стили для более приятного внешнего вида (да, их можно было подключить как css-файл, однако некоторые версии IE не хотят воспринимать стили, заданные таким образом, поэтому приходится писать прямо в скрипт):

Со стилями покончено, теперь пишем заголовок вкладки и рисуем удобную ссылку возврата на главную страницу:

Определяем поисковые фильтры по AD, и получаем данные об OU:

Далее оформляем верхнюю часть страницы:

Далее получаем в цикле и обрабатываем данные пользователей, при этом, чтобы скрыть некоторые (например служебные) учётные записи, просто прописываем «hide» в поле «комната» в реквизитах пользователя в AD, такие пользователи не будут отображаться в справочнике:

Кстати, если вам потребуется получить значение другого атрибута, то помните (это важно):
в запросе передаём имя атрибута строчными буквами, иначе не заработает.

И вставляем полученные данные в таблицу:

Далее мы закрываем подключение по ldap, или выводим сообщение о невозможности подключения к серверу:

Файл «main_table.html» изнутри себя представляет простую html страницу с ссылками, и выглядит примерно так:

Если кому-либо поможет мой код — я буду рад, пользуйтесь!

Также можете свободно редактировать его как вам угодно (улучшать/ухудшать) и распространять любыми методами.

Источник

ldap_search

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_search — Поиск по LDAP дереву

Описание

Список параметров

Базовое DN для каталога.

Поисковый фильтр может быть простым или расширенным, используя булевы операторы в формате, описанном в документации LDAP (смотрите » Netscape Directory SDK или » RFC4515 для полной информации о фильтрах).

Использование этого параметра намного более эффективно, чем действие по умолчанию (которое должно возвратить все атрибуты и присвоенные им значения). Поэтому использование этого параметра считается хорошей практикой.

Должен быть равен 1, если требуются только типы атрибута. Если равен 0, то, по умолчанию, выбираются и типы атрибутов и значения.

Позволяет ограничить количество выбранных записей. Установка этого параметра равным 0 означает, что ограничение отсутствует.

Этот параметр НЕ может переопределять предустановку sizelimit на стороне сервера. Хотя его можно установить ниже.

Некоторые хосты серверов каталогов будут сконфигурированы так, чтобы возвратить не больше, чем предварительно установленное число записей. Если это произойдёт, то сервер укажет, что возвратил только частичный набор результатов. Это также происходит, если Вы используете этот параметр чтобы ограничить количество выбранных записей.

Устанавливает число секунд, ограничивающее процесс поиска. Установка этого параметра равным 0 означает, что ограничение отсутствует.

Этот параметр НЕ может переопределять предустановку timelimit на стороне сервера. Хотя его можно установить ниже.

Массив управляющих констант LDAP для отправки в запросе.

Возвращаемые значения

Возвращает идентификатор результата поиска или false в случае возникновения ошибки.

Список изменений

Примеры

Пример #1 LDAP поиск

User Contributed Notes 34 notes

// config
$ldapserver = ‘svr.domain.com’ ;
$ldapuser = ‘administrator’ ;
$ldappass = ‘PASSWORD_HERE’ ;
$ldaptree = «OU=SBSUsers,OU=Users,OU=MyBusiness,DC=myDomain,DC=local» ;

// SHOW ALL DATA
echo ‘

Dump all data

// iterate over array and print data for each entry
echo ‘

Show me the users

» ;
> else <
echo «Email: None

It might be useful to list here the operators that work:

Be careful of special characters when generating filters from user input.

*, (, ), \ and NUL should be backslash-escaped. See section 4 of RFC 2254 (I found it here:
http://www.cis.ohio-state.edu/htbin/rfc/rfc2254.html)

Here are a couple of resources for proper construction of filters.

Before finding these I had been stumped for hours on how to do something like «all users starting with «a» except those from OU ‘foo'»

it seems that all fields must be used in lower case even if they are mixed case in the ldapsearch output.

gidNumber: 1010
homeDirectory: /home/dnt

I have been working on a script where I needed to get all the users who were member of a specific MS AD group. Because of PHP bug #42060 ( http://bugs.php.net/bug.php?id=42060 ) I could not get all the users back who were member of the group.
After googling for a day I found an article and a patch but it required that I downloaded the source code for php 5.1.6 or 5.2.10 run the patch and than recompile the code to fix the problem.
Problem was
1) I am not a Linux goeroe so I was not very comfortable doing this.
2) I am running the script on a production machine with other code using PHP and did not know what the consequence would bee for that code.
3) I could not update PHP anymore because in newer versions this patch would probably not work any more.

But yesterday I saw the light and wrote some code to get around this problem, maybe other people can use it that have the same problem.

FYI, for those doing LDAP searches on Exchange servers, there seems to be some preference in Exchange to disallow searches that aren’t initial searches (i.e. only x* will work, not * or *x). I’d been going nuts trying to figure out why I kept getting errors doing * searches.

The internal attributes (like createTimestamp, modifyTimestamp, etc), don’t come by default (when the optional parameter attributes is not set). You have to specify it:

Example of parallel search :

When searching for BINARY data (such as an Active Directory objectGUID) you need to escape each hexadecimal character with a backslash.

In PHP, you need to escape the escape for the backslash:
ldap_search($ds,»dc=blahblah,dc=com», «(objectGUID=\\AE\\C3\\23\\35\\F7)»);

In order to perform the searches on Windows 2003 Server Active Directory you have to set the LDAP_OPT_REFERRALS option to 0:

ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

As opposed to Windows 2000 Server, where this option was optional and only increased the performance.

If you are searching active directory and are experiencing lag or time outs, it may be that you are being given ldap referrals from the ldap server. The following code will disable this.

Источник

php ldap search: no such object

I’m new to LDAP so I will try to explain correctly
I have a hostname «energia.sise»

I need to get all users which are located in energia.sise/nej/users

could you advise me how to do that?

in this code, I tried to get my record based on my email but it errors
Warning: ldap_search(): Search: No such object

php ldap search user. Смотреть фото php ldap search user. Смотреть картинку php ldap search user. Картинка про php ldap search user. Фото php ldap search user

3 Answers 3

Except the unnecessary filter component CN=*, as already noted by Terry Gardner, your filter seems to be correct. As such, I suspect that there are other possible problems you have with your code:

Use ldap v3 protocol in Active Directory whenever possible. This should be set before you bind:

I recommend that you also turn off referrals handling for ldap v3 as it causes some strange behaviour for AD sometimes:

When performing a search operation like this, the «No such object» error usually refers to the fact that the base DN does not exist. If there were no users to match your filter, the server would return an empty resultset.

Before writing code, use a known good tool like ldapsearch to determine if the desired request parameters are correct:

If the above displays the error indicating the base object does not exist, then locate the correct base object and try again.

As a side note, unrelated to the problem of the base object not existing, the filter component cn=* is not necessary, and will result in an increased search time because cn=* is a present filter, meaning entries that contain a cn attribute will match the search criteria. Unless I am mistaken, the cn attribute is required by the User objectClass, so using a & filter with both objectClass=User and cn=* does nothing but cause the server to spend more time on the search.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *