如何取得多值 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

相關內容