複数値 LDAP 属性の 2 番目の値を取得する方法

複数値 LDAP 属性の 2 番目の値を取得する方法

LDAP属性名「mail」があり、これには次のような複数の値があります。

郵便:[メールアドレス]

郵便:[メールアドレス]

今、2 番目の値のメールのみの結果を返すクエリを探しています。[メールアドレス]

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 を返します。必要なのは 2 番目の ID だけです。入力してください。

答え1

LDAP 検索ではこれを行うことはできません。そのため、追加の処理が必要になります。まず、検索によって返される属性と値の順序が保証されることはほとんどありません。

答え2

OpenLDAPなどの一部のLDAPサーバーは、値を返すフィルター制御(参照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

関連情報