-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Demo script for Matched Values Control contributed by Andreas Hasenack
- Loading branch information
stroeder
committed
Aug 6, 2007
1 parent
84c4043
commit 12881e8
Showing
1 changed file
with
63 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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]) | ||
|
||
|
||
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 "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) | ||
|