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