-
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.
Use ldap.explode_dn() instead of string.split() for breaking dn into …
…components
- Loading branch information
stroeder
committed
Dec 19, 2001
1 parent
6a6b43f
commit 690068e
Showing
1 changed file
with
128 additions
and
0 deletions.
There are no files selected for viewing
This file contains hidden or 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,128 @@ | ||
| #! python | ||
|
|
||
| # | ||
| # simple LDAP server browsing example | ||
| # | ||
|
|
||
| import ldap | ||
| import string | ||
| from traceback import print_exc | ||
|
|
||
| url = "ldap://ldap.openldap.org/" | ||
| dn = "dc=openldap,dc=org" | ||
|
|
||
| print "Connecting to", url | ||
|
|
||
| l = ldap.initialize(url) | ||
| l.bind_s("", "", ldap.AUTH_SIMPLE); | ||
|
|
||
| lastdn = dn | ||
| dnlist = None | ||
|
|
||
| while 1: | ||
|
|
||
| #-- read a command | ||
| try: | ||
| cmd = raw_input(dn + "> ") | ||
| except EOFError: | ||
| break | ||
|
|
||
| try: | ||
|
|
||
| if cmd == "?": | ||
| print "cd <dn> - change DN to <dn>" | ||
| print "cd <n> - change DN to number <n> of last 'ls'" | ||
| print "cd - - change to previous DN" | ||
| print "cd .. - change to one-level higher DN" | ||
| print "cd - change to root DN" | ||
| print "ls - list children of crrent DN" | ||
| print ". - show attributes of current DN" | ||
| print "/<expr> - list descendents matching filter <expr>" | ||
| print "? - show this help" | ||
|
|
||
| elif cmd == "ls": | ||
| print "Children of", `dn`, ":" | ||
| dnlist = [] | ||
| # | ||
| # List the children at one level down from the current dn | ||
| # We use the filter 'objectclass=*' to match everything. | ||
| # We're not interested in attributes at this stage, so | ||
| # we specify [] as the list of attribute names to retreive. | ||
| # | ||
| for name,attrs in l.search_s(dn, ldap.SCOPE_ONELEVEL, | ||
| "objectclass=*", []): | ||
| #-- shorten resulting dns for output brevity | ||
| if name.startswith(dn+", "): | ||
| shortname = "+ "+name[len(dn)+2:] | ||
| elif name.endswith(", "+dn): | ||
| shortname = name[:-len(dn)-2]+" +" | ||
| else: | ||
| shortname = name | ||
| print " %3d. %s" % (len(dnlist), shortname) | ||
| dnlist.append(name) | ||
|
|
||
| elif cmd == "cd": | ||
| dn = "" | ||
| dnlist = None | ||
|
|
||
| elif cmd.startswith("cd "): | ||
| arg = cmd[3:] | ||
| if arg == '-': | ||
| lastdn,dn = dn,lastdn | ||
| elif arg == '..': | ||
| dn = string.join(ldap.explode_dn(dn)[1:], ",") | ||
| dn = string.strip(dn) | ||
| else: | ||
| try: | ||
| i = int(arg) | ||
| except: | ||
| godn = arg | ||
| else: | ||
| if dnlist is None: | ||
| print "do an ls first" | ||
| else: | ||
| godn = dnlist[i] | ||
| lastdn = dn | ||
| dn = godn | ||
|
|
||
| elif cmd == ".": | ||
| # | ||
| # Retrieve all the attributes for the current dn. | ||
| # We construct a search using SCOPE_BASE (ie just the | ||
| # given DN) and again filter with "objectclass=*". | ||
| # No attributes are listed, so the default is for | ||
| # the client to receive all attributes on the DN. | ||
| # | ||
| print "Attributes of", `dn`, ":" | ||
| for name,attrs in l.search_s(dn, ldap.SCOPE_BASE, | ||
| "objectclass=*"): | ||
| print " %-24s" % name | ||
| for k,vals in attrs.items(): | ||
| for v in vals: | ||
| if len(v) > 200: | ||
| v = `v[:200]` + \ | ||
| ("... (%d bytes)" % len(v)) | ||
| else: | ||
| v = `v` | ||
| print " %-12s: %s" % (k, v) | ||
|
|
||
| elif cmd.startswith("/"): | ||
| # | ||
| # Search descendent objects to match a given filter. | ||
| # We use SCOPE_SUBTREE to indicate descendents, and | ||
| # again specify an empty attribute list to indicate | ||
| # that we're not interested in them. | ||
| # | ||
| expr = cmd[1:] | ||
| print "Descendents matching filter", `expr`, ":" | ||
| for name,attrs in l.search_s(dn, ldap.SCOPE_SUBTREE, | ||
| expr, []): | ||
| print " %24s", name | ||
|
|
||
| else: | ||
| print "unknown command - try '?' for help" | ||
|
|
||
| except: | ||
| print_exc() | ||
|
|