
Wir haben den LDAP-Attributnamen "mail", der mehrere Werte haben kann, wie
Mail:[email geschützt]
Mail:[email geschützt]
Jetzt suche ich nach der Abfrage, die als Ergebnis nur den zweiten Wert „Mail“ zurückgibt:[email geschützt]
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))"
aber die obige Abfrage gibt beide E-Mail-IDs zurück. Ich möchte nur die zweite. Bitte geben Sie Ihre Eingaben ein.
Antwort1
Dies ist bei einer LDAP-Suche nicht möglich, Sie benötigen zusätzliche Verarbeitungsschritte. Zum einen gibt es mit ziemlicher Sicherheit keine Garantie für die Reihenfolge der von einer Suche zurückgegebenen Attribute und Werte.
Antwort2
Einige LDAP-Server, z. B. OpenLDAP, unterstützen dieWerteReturnFilterKontrolle (sieheRFC 3876).
Sie können dieses Steuerelement mit OpenLDAPs verwendenLDAP-Suchemit CLI-Argument -E.
Beispiel: -E "mv=((memberOf=cn=test-users-2,cn=test,ou=ae-dir))"
.
Beachten Sie, dass es sich bei dem Filter um einen sogenannten einfachen Filter handelt.ohneOperand.
Beispiel mit meiner Online-Demo vonÆ-DIR:
Ohne die Kontrolle:
$ 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
Mit der Kontrolle übereinstimmender Werte:
$ 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