如何获取多值 ldap 属性的第二个值

如何获取多值 ldap 属性的第二个值

我们有 ldap 属性名称“mail”,它有多个值,例如

邮件:[电子邮件保护]

邮件:[电子邮件保护]

现在我正在寻找仅返回结果第二个值邮件的查询:[电子邮件保护]

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))"

但上述查询返回的是两个电子邮件 ID。我只想要第二个。请提供您的输入。

答案1

您无法在 LDAP 搜索中执行此操作,您需要进行一些额外的处理。首先,几乎肯定无法保证搜索返回的属性和值的顺序。

答案2

一些 LDAP 服务器,例如 OpenLDAP,支持值返回过滤器控制(见RFC 3876)。

您可以将此控件与 OpenLDAP 的ldap搜索使用 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

相关内容