Содержание
- ldap_search
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- User Contributed Notes 34 notes
- Dump all data
- Show me the users
- Error: ldap_search(): Search: Operations error #7562
- Comments
- Please confirm you have done the following before posting your bug report:
- not added email from LDAP to Recipient. What is wrong? #7297
- Comments
- ldap_errno
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- User Contributed Notes 2 notes
ldap_search
(PHP 4, PHP 5, PHP 7, PHP 
ldap_search — Поиск по LDAP дереву
Описание
Выполняет поиск для указанного фильтра в директории с границами LDAP_SCOPE_SUBTREE . Эквивалентно поиску по всему каталогу.
Также можно выполнять параллельный поиск. В этом случае первым аргументом должен быть массив экземпляров LDAPConnection , а не один экземпляр. Если поиск не должен использовать один и тот же базовый DN и фильтр, в качестве аргументов можно передать массив базовых DN и/или массив фильтров. Количество элементов в массивах должно совпадать с количеством экземпляров LDAPConnection , поскольку первые записи массивов используются для одного поиска, вторые — для другого и так далее. При параллельном поиске возвращается массив экземпляров LDAPResult , за исключением возникновения ошибки, когда возвращается значение false .
Список параметров
Базовое DN для каталога.
Поисковый фильтр может быть простым или расширенным, используя булевы операторы в формате, описанном в документации LDAP (смотрите » Netscape Directory SDK или » RFC4515 для полной информации о фильтрах).
Массив необходимых атрибутов, например, array(«mail», «sn», «cn») . Обратите внимание, что «dn» всегда возвращается, независимо от того, какие типы атрибутов требуются.
Использование этого параметра намного более эффективно, чем действие по умолчанию (которое должно возвратить все атрибуты и присвоенные им значения). Поэтому использование этого параметра считается хорошей практикой.
Должен быть равен 1, если требуются только типы атрибута. Если равен 0, то, по умолчанию, выбираются и типы атрибутов и значения.
Позволяет ограничить количество выбранных записей. Установка этого параметра равным 0 означает, что ограничение отсутствует.
Этот параметр НЕ может переопределять предустановку sizelimit на стороне сервера. Хотя его можно установить ниже.
Некоторые хосты серверов каталогов будут сконфигурированы так, чтобы возвратить не больше, чем предварительно установленное число записей. Если это произойдёт, то сервер укажет, что возвратил только частичный набор результатов. Это также происходит, если Вы используете этот параметр чтобы ограничить количество выбранных записей.
Устанавливает число секунд, ограничивающее процесс поиска. Установка этого параметра равным 0 означает, что ограничение отсутствует.
Этот параметр НЕ может переопределять предустановку timelimit на стороне сервера. Хотя его можно установить ниже.
Определяет как псевдонимы должны быть обработаны во время поиска. Может быть одним из следующих:
- LDAP_DEREF_NEVER — (по умолчанию) псевдонимы никогда не разыменовываются.
- LDAP_DEREF_SEARCHING — псевдонимы должны быть разыменованы во время поиска, но не при определении местоположения базового объекта поиска.
- LDAP_DEREF_FINDING — псевдонимы должны быть разыменованы при определении местоположения базового объекта, но не во время поиска.
- LDAP_DEREF_ALWAYS — псевдонимы должны разыменовываться всегда.
Массив управляющих констант LDAP для отправки в запросе.
Возвращаемые значения
Возвращает экземпляр LDAPResult , массив экземпляров LDAPResult или false в случае возникновения ошибки.
Список изменений
| Версия | Описание |
|---|---|
| 8.1.0 | Параметр ldap теперь ожидает экземпляр LDAPConnection ; ранее ожидался ресурс (resource). |
| 8.1.0 | Возвращает экземпляр LDAPResult ; ранее возвращался ресурс (resource). |
| 8.0.0 | controls теперь допускает значение null; ранее значение по умолчанию было [] . |
| 7.3.0 | Добавлена поддержка параметра controls |
Примеры
Пример ниже получает организационную единицу, фамилию, имя и адрес электронной почты для всех людей в «My Company», где фамилия или имя содержат подстроку $person . Этот пример использует логический фильтр, чтобы сказать серверу, что нужно искать информацию больше, чем в одном атрибуте.
Пример #1 LDAP поиск
// $ds допустимый экземпляр LDAPConnection
// $person всё или часть имени человека, н-р «Jo»
$dn = «o=My Company, c=US» ;
$filter = «(|(sn= $person *)(givenname= $person *))» ;
$justthese = array( «ou» , «sn» , «givenname» , «mail» );
$sr = ldap_search ( $ds , $dn , $filter , $justthese );
$info = ldap_get_entries ( $ds , $sr );
echo $info [ «count» ]. » записей возвращеноn» ;
?>
User Contributed Notes 34 notes
It might be useful to list here the operators that work:
= — matches exact value
=*xxx — matches values ending xxx
=xxx* — matches values beginning xxx
=*xxx* — matches values containing xxx
=* — matches all values (if set — NULLS are not returned)
>=xxx — matches everthing from xxx to end of directory
( 30 );
error_reporting ( E_ALL );
ini_set ( ‘error_reporting’ , E_ALL );
ini_set ( ‘display_errors’ , 1 );
// config
$ldapserver = ‘svr.domain.com’ ;
$ldapuser = ‘administrator’ ;
$ldappass = ‘PASSWORD_HERE’ ;
$ldaptree = «OU=SBSUsers,OU=Users,OU=MyBusiness,DC=myDomain,DC=local» ;
// connect
$ldapconn = ldap_connect ( $ldapserver ) or die( «Could not connect to LDAP server.» );
if( $ldapconn ) <
// binding to ldap server
$ldapbind = ldap_bind ( $ldapconn , $ldapuser , $ldappass ) or die ( «Error trying to bind: » . ldap_error ( $ldapconn ));
// verify binding
if ( $ldapbind ) <
echo «LDAP bind successful.
$result = ldap_search ( $ldapconn , $ldaptree , «(cn=*)» ) or die ( «Error in search query: » . ldap_error ( $ldapconn ));
$data = ldap_get_entries ( $ldapconn , $result );
// SHOW ALL DATA
echo ‘
Dump all data
// iterate over array and print data for each entry
echo ‘
Show me the users
‘ ;
for ( $i = 0 ; $i $data [ «count» ]; $i ++) <
//echo «dn is: «. $data[$i][«dn»] .»
«;
echo «User: » . $data [ $i ][ «cn» ][ 0 ] . «
» ;
if(isset( $data [ $i ][ «mail» ][ 0 ])) <
echo «Email: » . $data [ $i ][ «mail» ][ 0 ] . «
» ;
> else <
echo «Email: None
» ;
>
>
// print number of entries found
echo «Number of entries found: » . ldap_count_entries ( $ldapconn , $result );
> else <
echo «LDAP bind failed. » ;
>
// all done? clean up
ldap_close ( $ldapconn );
?>
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’»
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)
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.
= «(&(memberOf=» . $ADGroup . «))» ;
$startResults = ldap_search ( $ldapconnect , $userBase , $startFilter , $attr );
$countResult = ldap_count_entries ( $ldapconnect , $startResults );
IF( $countResult == 1000 OR $countResult == 1500 )
<
// loop trough the number 97-122 (ASCII number for the characters a-z)
For( $a = 97 ; $a 122 ; $a ++)
<
// translate the number to a character
$character = chr ( $a );
// the new search filter withs returns all users with a last name starting with $character
$filter = «(&(sn= $character *)(memberOf= $ADGroup ))» ;
$results = ldap_search ( $ldapconnect , $userBase , $filter , $attr );
$countResult2 = ldap_count_entries ( $ldapconnect , $results );
// See if the search for all users starting with a specific character still hits the search limit
// if so than do a new search to find all the users where the last name starts with «aa» and
// than with «ab», «ac» etc. etc
// In the best case we can now find 675.324 users per group when the search limit is 1000
// ((26 * 999 for the fist character) * 26 for the second character)
// and 1.013.324 when the search limit is 1500
If( $countResult2 == 1000 or $countResult2 == 1500 )
<
For( $b = 97 ; $b 122 ; $b ++)
<
$character2 = chr ( $b );
$filter2 = «(&(sn= $character$character2 *)(memberOf= $ADGroup ))» ;
$results2 = ldap_search ( $ldapconnect , $userBase , $filter2 , $attr );
$count2 = ldap_count_entries ( $ldapconnect , $results2 );
$entries2 = ldap_get_entries ( $ldapconnect , $results2 );
// do your thing
>
>
Else
<
$entries = ldap_get_entries ( $ldapconnect , $results );
// do your thing
>
>
>
else
<
$entries = ldap_get_entries ( $ldapconnect , $startResults );
// do your thing
>
?>
Источник
Error: ldap_search(): Search: Operations error #7562
Please confirm you have done the following before posting your bug report:
- I have enabled debug mode
- I have read checked the Common Issues page
Describe the bug
In «LDAP/AD Settings» both tests passed (see screenshot).
In «LDAP User Sync» the synchronization fails with above error (title).
To Reproduce
- Go to People => LDAP Sync
- Click on Synchronize
Expected behavior
Synchronization to success as the above tests indicate.
Screenshots
Server (please complete the following information):
- Snipe-IT Version 4.7.4-4107
- OS: docker linuxserver/snipe-it
- Web Server: nginx
- PHP Version 4.2.18
Desktop (please complete the following information):
- OS: Windows 7
- Browser Chrome
- Version 77
Error Messages
Click to expand
Additional context
The AD is for department internal filesharing and applications like TFS. There are no emails attached to the user accounts.
I found this error in 3 similar issues and tried other filter options, but without success.
For «LDAP Bind Username» I also tried:
tss7Administrator
Administrator@tss7.*******.bogus
For «LDAP Filter» I also tried:
&(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2))
Any help is very appreciated.
The text was updated successfully, but these errors were encountered:
Источник
not added email from LDAP to Recipient. What is wrong? #7297
In Version 1.3.9. work good.
In version 1.4.3. now work.
error.log
[25-Mar-2020 12:02:31 Europe/Kiev] PHP Warning: ldap_search(): Search: Operations error in /var/www/data/newmail/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 2141
The text was updated successfully, but these errors were encountered:
Enable ldap_debug and provide the log.
Enable ldap_debug and provide the log.
[25-Mar-2020 12:49:03 +0200]: C: Connect [192.168.0.1:3268]
[25-Mar-2020 12:49:03 +0200]: S: OK
[25-Mar-2020 12:49:03 +0200]: C: Bind [dn: user@domain.com]
[25-Mar-2020 12:49:03 +0200]: S: OK
[25-Mar-2020 12:49:03 +0200]: C: Search base dn: [ou=contacts,dc=domain,dc=com] scope [sub] with filter [(objectclass=)]
[25-Mar-2020 12:49:03 +0200]: C: Search base dn: [cn=config] scope [sub] with filter [(objectclass=vlvsearch)]
[25-Mar-2020 12:49:03 +0200]: S: Operations error
[25-Mar-2020 12:49:03 +0200]: Using function ldap_search on scope sub ($ns_function is ldap_search)
[25-Mar-2020 12:49:03 +0200]: C: (Without VLV) Setting a filter of (objectclass=)
[25-Mar-2020 12:49:03 +0200]: Executing search with return attributes: array (
0 => ‘cn’,
1 => ‘sn’,
2 => ‘givenname’,
3 => ‘title’,
4 => ‘mail’,
5 => ‘telephonenumber’,
6 => ‘objectClass’,
)
[25-Mar-2020 12:49:03 +0200]: S: 72 record(s) found
[25-Mar-2020 12:49:03 +0200]: C: Close
The warning is unrelated. In $config[‘ldap_public’][‘abs.local’] a dot character is not allowed. If that does not help describe your issue in more details.
The warning is unrelated. In $config[‘ldap_public’][‘abs.local’] a dot character is not allowed. If that does not help describe your issue in more details.
Yes, that’s work.
I Replaced from
$config[‘ldap_public’][‘abs.local’] = array(
‘name’ => ‘abs.local’,
$config[‘ldap_public’][‘abs’] = array(
‘name’ => ‘abs’,
Источник
ldap_errno
(PHP 4, PHP 5, PHP 7, PHP 
ldap_errno — Возвратить номер ошибки LDAP последней команды
Описание
Возвращает стандартизированный код ошибки, возвращённый последней командой LDAP. Это число может быть преобразовано в текстовое сообщение об ошибке, используя ldap_err2str() .
Список параметров
Возвращаемые значения
Возвращает код ошибки LDAP последней команды для этой ссылки.
Список изменений
| Версия | Описание |
|---|---|
| 8.1.0 | Параметр ldap теперь ожидает экземпляр LDAPConnection ; ранее ожидался ресурс (resource). |
Примеры
Если вы не снизите достаточно уровень предупреждений в php.ini , или префикс ваших LDAP-команд не будет с символом @ для подавления вывода предупреждений, генерируемые ошибки будут также отображаться в вашем HTML выводе.
Пример #1 Генерирование и фиксация ошибки
Смотрите также
- ldap_err2str() — Преобразовать код ошибки LDAP в строковое сообщение об ошибке
- ldap_error() — Возвратить сообщение об ошибке LDAP последней команды
User Contributed Notes 2 notes
Couple of good error codes to get started. If you want to detect failure of ldap_add due to the record already existing, ldap_error == 0x44. This means, you can do something like:
$r = ldap_add($ds, $dn, $info);
if (!$r) <
if (ldap_errno($ds) == 0x44) <
// Do something about it
> else <
// A real failure
>
>
Similarly, on ldap_delete, you will get a 0x20 value (No Such Object) if you try to delete something that isn’t there.
Common LDAP error codes
LDAP_SUCCESS 0x00
LDAP_OPERATIONS_ERROR 0x01
LDAP_PROTOCOL_ERROR 0x02
LDAP_TIMELIMIT_EXCEEDED 0x03
LDAP_SIZELIMIT_EXCEEDED 0x04
LDAP_COMPARE_FALSE 0x05
LDAP_COMPARE_TRUE 0x06
LDAP_AUTH_METHOD_NOT_SUPPORTED 0x07
LDAP_STRONG_AUTH_REQUIRED 0x08
// Not used in LDAPv3
LDAP_PARTIAL_RESULTS 0x09
// Next 5 new in LDAPv3
LDAP_REFERRAL 0x0a
LDAP_ADMINLIMIT_EXCEEDED 0x0b
LDAP_UNAVAILABLE_CRITICAL_EXTENSION 0x0c
LDAP_CONFIDENTIALITY_REQUIRED 0x0d
LDAP_SASL_BIND_INPROGRESS 0x0e
LDAP_NO_SUCH_ATTRIBUTE 0x10
LDAP_UNDEFINED_TYPE 0x11
LDAP_INAPPROPRIATE_MATCHING 0x12
LDAP_CONSTRAINT_VIOLATION 0x13
LDAP_TYPE_OR_VALUE_EXISTS 0x14
LDAP_INVALID_SYNTAX 0x15
LDAP_NO_SUCH_OBJECT 0x20 /* 32 */
LDAP_ALIAS_PROBLEM 0x21
LDAP_INVALID_DN_SYNTAX 0x22
// Next two not used in LDAPv3
LDAP_IS_LEAF 0x23
LDAP_ALIAS_DEREF_PROBLEM 0x24
LDAP_INAPPROPRIATE_AUTH 0x30 /* 48 */
LDAP_INVALID_CREDENTIALS 0x31 /* 49 */
LDAP_INSUFFICIENT_ACCESS 0x32
LDAP_BUSY 0x33
LDAP_UNAVAILABLE 0x34
LDAP_UNWILLING_TO_PERFORM 0x35
LDAP_LOOP_DETECT 0x36
LDAP_SORT_CONTROL_MISSING 0x3C /* 60 */
LDAP_INDEX_RANGE_ERROR 0x3D /* 61 */
LDAP_NAMING_VIOLATION 0x40
LDAP_OBJECT_CLASS_VIOLATION 0x41
LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
LDAP_NOT_ALLOWED_ON_RDN 0x43
LDAP_ALREADY_EXISTS 0x44 /* 68 */
LDAP_NO_OBJECT_CLASS_MODS 0x45
LDAP_RESULTS_TOO_LARGE 0x46
// Next two for LDAPv3
LDAP_AFFECTS_MULTIPLE_DSAS 0x47
LDAP_OTHER 0x50
// Used by some APIs
LDAP_SERVER_DOWN 0x51
LDAP_LOCAL_ERROR 0x52
LDAP_ENCODING_ERROR 0x53
LDAP_DECODING_ERROR 0x54
LDAP_TIMEOUT 0x55
LDAP_AUTH_UNKNOWN 0x56
LDAP_FILTER_ERROR 0x57 /* 87 */
LDAP_USER_CANCELLED 0x58
LDAP_PARAM_ERROR 0x59
LDAP_NO_MEMORY 0x5a
// Preliminary LDAPv3 codes
LDAP_CONNECT_ERROR 0x5b
LDAP_NOT_SUPPORTED 0x5c
LDAP_CONTROL_NOT_FOUND 0x5d
LDAP_NO_RESULTS_RETURNED 0x5e
LDAP_MORE_RESULTS_TO_RETURN 0x5f
LDAP_CLIENT_LOOP 0x60
LDAP_REFERRAL_LIMIT_EXCEEDED 0x61
Источник
[09:44:39] LOG.info: ErrorException: ldap_search(): Search: Operations error in /var/www/html/app/Models/Ldap.php:265
Stack trace:
#0 [internal function]: IlluminateFoundationBootstrapHandleExceptions->handleError(2, 'ldap_search(): ...', '/var/www/html/a...', 265, Array)
#1 /var/www/html/app/Models/Ldap.php(265): ldap_search(Resource id #742, 'dc=tss7,dc=siem...', '(&(cn=*))')
#2 /var/www/html/app/Console/Commands/LdapSync.php(77): AppModelsLdap::findLdapUsers('dc=tss7,dc=siem...')
#3 [internal function]: AppConsoleCommandsLdapSync->handle()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): IlluminateContainerBoundMethod::IlluminateContainer{closure}()
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): IlluminateContainerBoundMethod::callBoundMethod(Object(IlluminateFoundationApplication), Array, Object(Closure))
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(549): IlluminateContainerBoundMethod::call(Object(IlluminateFoundationApplication), Array, Array, NULL)
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): IlluminateContainerContainer->call(Array)
#9 /var/www/html/vendor/symfony/console/Command/Command.php(255): IlluminateConsoleCommand->execute(Object(SymfonyComponentConsoleInputArrayInput), Object(IlluminateConsoleOutputStyle))
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): SymfonyComponentConsoleCommandCommand->run(Object(SymfonyComponentConsoleInputArrayInput), Object(IlluminateConsoleOutputStyle))
#11 /var/www/html/vendor/symfony/console/Application.php(960): IlluminateConsoleCommand->run(Object(SymfonyComponentConsoleInputArrayInput), Object(SymfonyComponentConsoleOutputBufferedOutput))
#12 /var/www/html/vendor/symfony/console/Application.php(255): SymfonyComponentConsoleApplication->doRunCommand(Object(AppConsoleCommandsLdapSync), Object(SymfonyComponentConsoleInputArrayInput), Object(SymfonyComponentConsoleOutputBufferedOutput))
#13 /var/www/html/vendor/symfony/console/Application.php(148): SymfonyComponentConsoleApplication->doRun(Object(SymfonyComponentConsoleInputArrayInput), Object(SymfonyComponentConsoleOutputBufferedOutput))
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Application.php(88): SymfonyComponentConsoleApplication->run(Object(SymfonyComponentConsoleInputArrayInput), Object(SymfonyComponentConsoleOutputBufferedOutput))
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Application.php(177): IlluminateConsoleApplication->run(Object(SymfonyComponentConsoleInputArrayInput), Object(SymfonyComponentConsoleOutputBufferedOutput))
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(249): IlluminateConsoleApplication->call('snipeit:ldap-sy...', Object(IlluminateSupportCollection), NULL)
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(221): IlluminateFoundationConsoleKernel->call('snipeit:ldap-sy...', Array)
#18 /var/www/html/app/Http/Controllers/UsersController.php(875): IlluminateSupportFacadesFacade::__callStatic('call', Array)
#19 [internal function]: AppHttpControllersUsersController->postLDAP(Object(IlluminateHttpRequest))
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): IlluminateRoutingController->callAction('postLDAP', Array)
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): IlluminateRoutingControllerDispatcher->dispatch(Object(IlluminateRoutingRoute), Object(AppHttpControllersUsersController), 'postLDAP')
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): IlluminateRoutingRoute->runController()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): IlluminateRoutingRoute->run()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): IlluminateRoutingRouter->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateAuthMiddlewareAuthenticate->handle(Object(IlluminateHttpRequest), Object(Closure))
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#29 /var/www/html/vendor/laravel/passport/src/Http/Middleware/CreateFreshApiToken.php(49): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): LaravelPassportHttpMiddlewareCreateFreshApiToken->handle(Object(IlluminateHttpRequest), Object(Closure))
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#32 /var/www/html/app/Http/Middleware/CheckForTwoFactor.php(49): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareCheckForTwoFactor->handle(Object(IlluminateHttpRequest), Object(Closure))
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#35 /var/www/html/app/Http/Middleware/CheckLocale.php(42): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareCheckLocale->handle(Object(IlluminateHttpRequest), Object(Closure))
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(68): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateFoundationHttpMiddlewareVerifyCsrfToken->handle(Object(IlluminateHttpRequest), Object(Closure))
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateCookieMiddlewareAddQueuedCookiesToResponse->handle(Object(IlluminateHttpRequest), Object(Closure))
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateCookieMiddlewareEncryptCookies->handle(Object(IlluminateHttpRequest), Object(Closure))
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): IlluminatePipelinePipeline->then(Object(Closure))
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): IlluminateRoutingRouter->runRouteWithinStack(Object(IlluminateRoutingRoute), Object(IlluminateHttpRequest))
#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): IlluminateRoutingRouter->runRoute(Object(IlluminateHttpRequest), Object(IlluminateRoutingRoute))
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): IlluminateRoutingRouter->dispatchToRoute(Object(IlluminateHttpRequest))
#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): IlluminateRoutingRouter->dispatch(Object(IlluminateHttpRequest))
#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): IlluminateFoundationHttpKernel->IlluminateFoundationHttp{closure}(Object(IlluminateHttpRequest))
#54 /var/www/html/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): BarryvdhDebugbarMiddlewareInjectDebugbar->handle(Object(IlluminateHttpRequest), Object(Closure))
#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateFoundationHttpMiddlewareTransformsRequest->handle(Object(IlluminateHttpRequest), Object(Closure))
#59 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#60 /var/www/html/app/Http/Middleware/CheckForDebug.php(25): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareCheckForDebug->handle(Object(IlluminateHttpRequest), Object(Closure))
#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#63 /var/www/html/app/Http/Middleware/CheckForSetup.php(27): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#64 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareCheckForSetup->handle(Object(IlluminateHttpRequest), Object(Closure))
#65 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#66 /var/www/html/vendor/fideloper/proxy/src/TrustProxies.php(57): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#67 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): FideloperProxyTrustProxies->handle(Object(IlluminateHttpRequest), Object(Closure))
#68 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#69 /var/www/html/app/Http/Middleware/NosniffGuard.php(17): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#70 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareNosniffGuard->handle(Object(IlluminateHttpRequest), Object(Closure))
#71 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#72 /var/www/html/app/Http/Middleware/ContentSecurityPolicyHeader.php(18): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#73 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareContentSecurityPolicyHeader->handle(Object(IlluminateHttpRequest), Object(Closure))
#74 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#75 /var/www/html/app/Http/Middleware/ReferrerPolicyHeader.php(17): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#76 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareReferrerPolicyHeader->handle(Object(IlluminateHttpRequest), Object(Closure))
#77 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#78 /var/www/html/app/Http/Middleware/XssProtectHeader.php(18): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#79 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareXssProtectHeader->handle(Object(IlluminateHttpRequest), Object(Closure))
#80 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#81 /var/www/html/app/Http/Middleware/FrameGuard.php(17): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#82 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): AppHttpMiddlewareFrameGuard->handle(Object(IlluminateHttpRequest), Object(Closure))
#83 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#84 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#85 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateViewMiddlewareShareErrorsFromSession->handle(Object(IlluminateHttpRequest), Object(Closure))
#86 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#87 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#88 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateSessionMiddlewareStartSession->handle(Object(IlluminateHttpRequest), Object(Closure))
#89 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#90 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#91 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode->handle(Object(IlluminateHttpRequest), Object(Closure))
#92 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest))
#93 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest))
#94 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): IlluminatePipelinePipeline->then(Object(Closure))
#95 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): IlluminateFoundationHttpKernel->sendRequestThroughRouter(Object(IlluminateHttpRequest))
#96 /var/www/html/public/index.php(58): IlluminateFoundationHttpKernel->handle(Object(IlluminateHttpRequest))
#97 {main}
Возможные причины:
1. Строка слишком большой длины.
2. Неверный тип — строка записывается в числовой атрибут.
3. Неправильное значение, например, атрибут может принимать только определённое значение, либо одно из набора значений.
Возможные причины:
1. При добавлении записи — один или несколько атрибутов в LDIF (или операции добавления/замены) для записи в точности совпадают (дублируются).
Дополнительный текст: unable to get TLS Client DN (невозможно получить DN клиента TLS).
Возможные причины:
1. Не предоставлен сертификат клиента в случае, если директива TLSVerifyClient установлена в ‘demand’.
2. Не предоставлен сертификат клиента в случае, если директива TLSVerifyClient установлена в ‘never’. В этом случае данное сообщение об ошибке не является фатальным и обслуживание клиента продолжается.
Дополнительный текст: no global superior knowledge (нет сведений о глобальном вышестоящем каталоге) — имя записи, которую собираются добавить или модифицировать, не находится ни в одном из контекстов именования и у сервера нет правильной отсылки на вышестоящий каталог.
Возможная причина: не задан атрибут olcSuffix (директива suffix в slapd.conf) для DIT, на которое идёт ссылка.
Дополнительный текст: Shadow context; no update referral (теневой контекст (реплика); отсылки для выполнения обновлений не указано) — DIT, в которое собираются вносить изменения, является репликой в режиме «только для чтения», и, из-за отсутствия директивы updateref, невозможно возвратить отсылку.
Возможные причины:
1. Была попытка произвести запись в реплику «только для чтения» (в конфигурации syncrepl потребитель всегда в режиме «только для чтения»).
2. В конфигурации syncrepl multi-master в файле slapd.conf возможно пропущена директива mirrormode true.
3. Если slapd при запуске использовал файл slapd.conf, а директория slapd.d (cn=config) также существует, то при последующих модификациях DIT могут возникать ошибки с выдачей этого сообщения. В частности, в FreeBSD требуется наличие явного указания в rc.conf (slapd_cn_config=»YES») для принудительного использования slapd.d.
Возможная причина:
Попытка удаления атрибута (особенно в cn=config), удаление которого запрещено.
Дополнительный текст: olcDbDirectory: value #0: invalid path: No such file or directory
Возможная причина: перед инициализацией новой базы данных директория для её размещения должна существовать.
Problem
Using LDAP authentication in the IBM Content Manager OnDemand server to search for a user ID in a Microsoft Active Directory server results in an error labeled «Operations error.»
Symptom
Attempting to log on through an OnDemand client results in the error «The server failed while attempting to logon.»
Taking an OnDemand server trace shows that the initial bind to the Active Directory server was successful, but the search failed with the error «Operations error»:
ArcLDAP_Authenticate LDAP server: example.com
ArcLDAP_Authenticate LDAP port: 389
ArcLDAP_Authenticate LDAP base DN: DC=example,DC=com
ArcLDAP_Authenticate LDAP bind DN: CN=sample-user,OU=sample,DC=example,DC=com
ArcLDAP_Authenticate LDAP bind attribute: sAMAccountName
ArcLDAP_Authenticate LDAP mapped attribute: sAMAccountName
ArcLDAP_Authenticate LDAP bind message file: (null)
ArcLDAP_Authenticate LDAP allow anonymous bind: FALSE
ArcLDAP_Authenticate Initialization successful
ArcLDAP_Authenticate Setting Protocol version to 3
ArcLDAP_Authenticate Simple bind as ‘CN=sample-user,OU=sample,DC=example,DC=com’ successful
ArcLDAP_Authenticate Searching with filter sAMAccountName=USER1
ArcLDAP_Authenticate LDAP search failed: Operations error
ArcLDAP_Authenticate User ‘USER1’ not found in LDAP
ArcLDAP_Authenticate RC=4
This error typically occurs when OnDemand is configured with a base distinguished name that searches across subordinate domains that are direct descendants of the directory server domain. In the previous example, the base distinguished name was set to
DC=example,DC=com
, which is at the root level of the Active Directory server
example.com
.
Cause
This problem is caused by referral chasing.
With referral chasing enabled, when a subtree search is performed, the Active Directory server sends back referrals that might require the LDAP API to bind (authenticate) to another Active Directory server at a different domain inside the Active Directory forest. If the bind fails due to incorrect credentials or insufficient access, the entire authentication process fails with the operations error.
On the Linux operating system, the OnDemand server uses the OpenLDAP API to communicate with the Active Directory server. The search scope is set to subtree and by default the referral option is enabled in the OpenLDAP API. With these conditions set, referral chasing might occur. See the Related information section for more information about referral chasing.
Environment
This error can occur with an OnDemand server running on Linux and UNIX operating systems, but does not occur when running an OnDemand server on Windows.
Resolving The Problem
There are three options that you can use to resolve this issue:
- Search the Active Directory Global Catalog instead. This search can be accomplished by changing the ARS_LDAP_PORT in the ars.cfg file of your OnDemand server to communicate through the Active Directory Global Catalog port, 3268. When you make the change to search the global catalog instead, you bypass referral chasing. See the Related information section for more information about the Active Directory Global Catalog.
- Disable referrals in the OpenLDAP API on the OnDemand server. To disable referrals, modify the file /etc/openldap/ldap.conf and add the following line to the end of the file:REFERRALS off
- Specify a non-root level base distinguished name in the ARS_LDAP_BASE_DN parameter of the ars.cfg file of your OnDemand server. In the example from the Symptom section, the base distinguished name is set at the root level or top level, DC=example,DC=com. Changing it to a lower, more specific, non-root level distinguished name such as OU=sample,DC=example,DC=com might resolve the problem by eliminating the possibility of a referral being issued to a subordinate domain.
Related Information
[{«Product»:{«code»:»SSEPCD»,»label»:»Content Manager OnDemand for Multiplatforms»},»Business Unit»:{«code»:»BU053″,»label»:»Cloud & Data Platform»},»Component»:»Server»,»Platform»:[{«code»:»PF016″,»label»:»Linux»},{«code»:»PF025″,»label»:»Platform Independent»}],»Version»:»8.4.1;8.4″,»Edition»:»»,»Line of Business»:{«code»:»LOB45″,»label»:»Automation»}}]
Всем привет,
Я знаю, что мой вопрос должен иметь сторону deja-vue, но я не нашел никаких решений с помощью stackoverflow или чего-то еще.
Поэтому я пытался создать функцию, которая разрешит соединение с ldap, затем проверит id и pwd моего пользователя, а затем проверит, в какой группе он находится.
Когда я сделал эту функцию одним куском, это сработало.
Но я хотел сделать это в трех разных функциях, чтобы я мог справиться с этим один за другим.
Так что теперь у меня есть функция, которая подключается к ldap:
function ldapConnection() {
$ldapConnection = ldap_connect(LDAP_SERVER);
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0);
return $ldapConnection;
}
Он возвращает идентификатор ссылки LDAP, поэтому соединение в порядке.
Тогда у меня есть функция, которая проверяет логин и pwd:
public function checkLoginPwd($login, $pwd) {
$ldapConnexion = $this->ldapConnection();
if ($bind = ldap_bind($ldapConnexion, $login, $pwd)) {
return true;
//ldap_close($ldapConnexion);
} else {
return false;
}
}
А потом функция, с которой у меня возникли проблемы.
public function checkUserRights($login, $pwd, $ldapConnection) {
//Récupération login
$loginAccount = "(sAMAccountName=$login)";
//Suppression de "myGroup"$filter = str_replace("myGroup\", "", $loginAccount);
$attr = array("memberof");
//Recherche
$result = ldap_search($ldapConnection, LDAP_BASE_DN, $filter, $attr);
$entries = ldap_get_entries(ldap_connect(LDAP_SERVER), $result);
foreach ($entries[0]['memberof'] as $grps) {
if (strpos($grps, "VPN")) {
$access = 2;
break;
}
if (strpos($grps, "Users"))
$access = 0;
}
if ($access != 0) {
$_SESSION['user'] = $login;
$_SESSION['access'] = $access;
return true;
} else {
return false;
}
Если я пытаюсь подключиться таким образом, у меня появляется следующее сообщение об ошибке:
ldap_search (): Поиск: Ошибка операций
Даже если это сработает, если я сделаю это за один раз.
Если бы кто-нибудь мог мне помочь, это было бы здорово ….
РЕДАКТИРОВАТЬ :
Итак, вы знаете, что если я сделаю дамп переменной $ filter, у меня будет следующее: string ‘(sAMAccountName = myLogin)’.
Для $ ldapConnection это ресурс (13, ссылка ldap), для LDAP_BASE_DN это строка ‘DC = myGroup, DC = fr’, а $ attr это массив (размер = 1)
0 => строка ‘memberof’ (длина = 8).
1
Решение
Я надеюсь, что это поможет вам
Возможно, есть проблема с фильтром, который вы используете. Мы используем ldap для привлечения пользователей Windows Server 2008
function connect_ldap_server(){
global $ad_server,$ad_server_port;
putenv('LDAPTLS_REQCERT=never');
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$ds=ldap_connect($ad_server,$ad_server_port); // must be a validLDAPserver!
}$basedn=dc=testlab, dc=local
$sr=ldap_search($ds, $basedn,"(&(objectcategory=person) (objectclass=user))");
1
Другие решения
После нескольких часов поиска я нашел решение и выложил его здесь на случай, если оно кому-нибудь пригодится:
Я просто добавил эти две строки в мою функцию checkUsersRights:
$ldapConn = ldap_connect(LDAP_SERVER);
ldap_bind($ldapConn, $login, $pwd);
Действительно, до того, как я создал новое соединение при вызове своей функции, мне нужно было создать его в моей функции и использовать ldap_bind для правильного соединения.
Надеюсь, это поможет кому-нибудь однажды …
0

