
У нас есть имя атрибута ldap «mail», которое имеет несколько значений, например
почта:[email protected]
почта:[email protected]
Теперь я ищу запрос, который вернет в результате только второе значение mail:[email protected]
ldapsearch -h xxx.xxx.xxx.xxx -xw $PASS -LLL -D "cn=admin,dc=example,dc=com" -b
"ou=workers,dc=example,dc=com" "(&(mail=*demosite.com))"
но запрос выше возвращает оба идентификатора электронной почты. Мне нужен только второй. Пожалуйста, предоставьте свои данные.
решение1
Вы не можете сделать это в поиске LDAP, вам понадобится дополнительная обработка вокруг этого. Во-первых, почти наверняка нет гарантии порядка атрибутов и значений, возвращаемых поиском.
решение2
Некоторые серверы LDAP, например OpenLDAP, поддерживаютзначенияReturnFilterконтроль (см.Запрос на изменение 3876).
Вы можете использовать этот элемент управления с OpenLDAPldapsearchс аргументом CLI -E.
Пример: -E "mv=((memberOf=cn=test-users-2,cn=test,ou=ae-dir))"
.
Обратите внимание, что фильтр представляет собой так называемый простой фильтр.безоперанд.
Пример с моей онлайн-демонстрациейÆ-DIR:
Без контроля:
$ ldapsearch -H "ldaps://demo.ae-dir.com" -b "ou=ae-dir" -s sub -x -D "uid=aead,cn=ae,ou=ae-dir" -w CorrectHorseBatteryStaple -LL "(memberOf=cn=test-users-2,cn=test,ou=ae-dir)" memberOf
version: 1
dn: uid=dsrg,cn=test,ou=ae-dir
memberOf: cn=test-users-2,cn=test,ou=ae-dir
memberOf: cn=test-users-3,cn=test,ou=ae-dir
dn: uid=rqei,cn=test,ou=ae-dir
memberOf: cn=test-users-1,cn=test,ou=ae-dir
memberOf: cn=test-users-2,cn=test,ou=ae-dir
С контролем сопоставленных значений:
$ ldapsearch -H "ldaps://demo.ae-dir.com" -b "ou=ae-dir" -s sub -x -D "uid=aead,cn=ae,ou=ae-dir" -w CorrectHorseBatteryStaple -LL -E "mv=((memberOf=cn=test-users-2,cn=test,ou=ae-dir))" "(memberOf=cn=test-users-2,cn=test,ou=ae-dir)" memberOf
version: 1
dn: uid=dsrg,cn=test,ou=ae-dir
memberOf: cn=test-users-2,cn=test,ou=ae-dir
dn: uid=rqei,cn=test,ou=ae-dir
memberOf: cn=test-users-2,cn=test,ou=ae-dir