Demo script for Matched Values Control contributed by Andreas Hasenack
This commit is contained in:
63
Demo/matchedvalues.py
Normal file
63
Demo/matchedvalues.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# demo for matched values control (RFC 3876)
|
||||||
|
#
|
||||||
|
# suppose the uid=jsmith LDAP entry has two mail attributes:
|
||||||
|
#
|
||||||
|
# dn: uid=jsmith,ou=People,dc=example,dc=com
|
||||||
|
# (...)
|
||||||
|
# mail: jsmith@example.com
|
||||||
|
# mail: jsmith@example.org
|
||||||
|
#
|
||||||
|
# Let's say you want to fetch only the example.org email. Without MV,
|
||||||
|
# you would first fetch all mail attributes and then filter them further
|
||||||
|
# on the client. With the MV control, the result can be given to the
|
||||||
|
# client already filtered.
|
||||||
|
#
|
||||||
|
# Sample output:
|
||||||
|
# $ ./matchedvalues.py
|
||||||
|
# LDAP filter used: (&(objectClass=inetOrgPerson)(mail=*@example.org))
|
||||||
|
# Requesting 'mail' attribute back
|
||||||
|
#
|
||||||
|
# No matched values control:
|
||||||
|
# dn: uid=jsmith,ou=People,dc=example,dc=com
|
||||||
|
# mail: jsmith@example.org
|
||||||
|
# mail: john@example.com
|
||||||
|
#
|
||||||
|
# Matched values control: (mail=*@example.org)
|
||||||
|
# dn: uid=jsmith,ou=People,dc=example,dc=com
|
||||||
|
# mail: jsmith@example.org
|
||||||
|
|
||||||
|
import ldap
|
||||||
|
from ldap.controls import MatchedValuesControl
|
||||||
|
|
||||||
|
def print_result(search_result):
|
||||||
|
for n in range(len(search_result)):
|
||||||
|
print "dn: %s" % search_result[n][0]
|
||||||
|
for attr in search_result[n][1].keys():
|
||||||
|
for i in range(len(search_result[n][1][attr])):
|
||||||
|
print "%s: %s" % (attr, search_result[n][1][attr][i])
|
||||||
|
print
|
||||||
|
|
||||||
|
|
||||||
|
uri = "ldap://ldap.example.com"
|
||||||
|
base = "dc=example,dc=com"
|
||||||
|
scope = ldap.SCOPE_SUBTREE
|
||||||
|
filter = "(&(objectClass=inetOrgPerson)(mail=*@example.org))"
|
||||||
|
control_filter = "(mail=*@example.org)"
|
||||||
|
|
||||||
|
ld = ldap.initialize(uri)
|
||||||
|
|
||||||
|
mv = MatchedValuesControl(criticality=True, controlValue=control_filter)
|
||||||
|
|
||||||
|
res = ld.search_ext_s(base, scope, filter, attrlist = ['mail'])
|
||||||
|
print "LDAP filter used: %s" % filter
|
||||||
|
print "Requesting 'mail' attribute back"
|
||||||
|
print
|
||||||
|
print "No matched values control:"
|
||||||
|
print_result(res)
|
||||||
|
|
||||||
|
res = ld.search_ext_s(base, scope, filter, attrlist = ['mail'], serverctrls = [mv])
|
||||||
|
print "Matched values control: %s" % control_filter
|
||||||
|
print_result(res)
|
||||||
|
|
||||||
Reference in New Issue
Block a user