Hi,

the attached patch allows you to use default values for the functions/arguments below. This is helpful in an environment where /etc/openldap/ldap.conf is kept up to date with correct information.

  ldap.initialize(uri)
  LDAPObject.search_*(base, scope)

The semantics are identical to the command-line "ldapsearch" tool. This means:

- uri <- "HOST" from /etc/openldap.conf
- base <- "BASE" from /etc/openldap.conf
- scope <- SCOPE_SUBTREE

The patch is against the latest CVS and has been tested.

Regards, Geert
? python-ldap-CVS-defaults.patch
? python-ldap-default-uri.patch
Index: Lib/ldap/functions.py
===================================================================
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/functions.py,v
retrieving revision 1.20
diff -u -r1.20 functions.py
--- Lib/ldap/functions.py	22 Mar 2007 23:12:36 -0000	1.20
+++ Lib/ldap/functions.py	21 Aug 2007 20:39:04 -0000
@@ -69,7 +69,7 @@
   return result
 
 
-def initialize(uri,trace_level=0,trace_file=sys.stdout,trace_stack_limit=None):
+def initialize(uri=None,trace_level=0,trace_file=sys.stdout,trace_stack_limit=None):
   """
   Return LDAPObject instance by opening LDAP connection to
   LDAP host specified by LDAP URL
Index: Lib/ldap/ldapobject.py
===================================================================
RCS file: /cvsroot/python-ldap/python-ldap/Lib/ldap/ldapobject.py,v
retrieving revision 1.98
diff -u -r1.98 ldapobject.py
--- Lib/ldap/ldapobject.py	5 Jun 2007 09:56:15 -0000	1.98
+++ Lib/ldap/ldapobject.py	21 Aug 2007 20:39:05 -0000
@@ -59,7 +59,7 @@
   }
 
   def __init__(
-    self,uri,
+    self,uri=None,
     trace_level=0,trace_file=None,trace_stack_limit=5
   ):
     self._trace_level = trace_level
@@ -439,13 +439,13 @@
     decoded_serverctrls = DecodeControlTuples(serverctrls)
     return rtype, rdata, rmsgid, decoded_serverctrls
  
-  def search_ext(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0):
+  def search_ext(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0):
     """
-    search(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]) -> int
-    search_s(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]])
-    search_st(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,timeout=-1]]]])
-    search_ext(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]])
-    search_ext_s(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]])
+    search([base=None [,scope=ldap.SCOPE_SUBTREE [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]]]) -> int
+    search_s([base=None [,scope=ldap.SCOPE_SUBTREE [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]]])
+    search_st([base=None [,scope=ldap.SCOPE_SUBTREE [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,timeout=-1]]]]]])
+    search_ext([base=None [,scope=ldap.SCOPE_SUBTREE [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]]])
+    search_ext_s([base=None [,scope=ldap.SCOPE_SUBTREE [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]]])
 
         Perform an LDAP search operation, with base as the DN of
         the entry at which to start the search, scope being one of
@@ -493,17 +493,17 @@
       timeout,sizelimit,
     )
 
-  def search_ext_s(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0):
+  def search_ext_s(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0):
     msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit)
     return self.result(msgid,all=1,timeout=timeout)[1]
 
-  def search(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0):
+  def search(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0):
     return self.search_ext(base,scope,filterstr,attrlist,attrsonly,None,None)
 
-  def search_s(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0):
+  def search_s(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0):
     return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout)
 
-  def search_st(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1):
+  def search_st(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1):
     return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout)
 
   def set_cache_options(self,*args,**kwargs):
@@ -623,7 +623,7 @@
 
 class NonblockingLDAPObject(SimpleLDAPObject):
 
-  def __init__(self,uri,trace_level=0,trace_file=None,result_timeout=-1):
+  def __init__(self,uri=None,trace_level=0,trace_file=None,result_timeout=-1):
     self._result_timeout = result_timeout
     SimpleLDAPObject.__init__(self,uri,trace_level,trace_file)
 
@@ -650,7 +650,7 @@
       ldap_result = None,None
     return all_results
 
-  def search_st(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1):
+  def search_st(self,base=None,scope=ldap.SCOPE_SUBTREE,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1):
     msgid = self.search(base,scope,filterstr,attrlist,attrsonly)
     return self.result(msgid,all=1,timeout=timeout)
 
@@ -675,7 +675,7 @@
   }
 
   def __init__(
-    self,uri,
+    self,uri=None,
     trace_level=0,trace_file=None,trace_stack_limit=5,
     retry_max=1,retry_delay=60.0
   ):
@@ -722,7 +722,7 @@
     for k,v in self._options.items():
       SimpleLDAPObject.set_option(self,k,v)
 
-  def reconnect(self,uri):
+  def reconnect(self,uri=None):
     # Drop and clean up old connection completely
     # Reconnect
     reconnect_counter = self._retry_max
@@ -827,7 +827,7 @@
   """
 
   def __init__(
-    self,uri,
+    self,uri=None,
     trace_level=0,trace_file=None,trace_stack_limit=5,
     retry_max=1,retry_delay=60.0,
     who='',cred='',
Index: Modules/LDAPObject.c
===================================================================
RCS file: /cvsroot/python-ldap/python-ldap/Modules/LDAPObject.c,v
retrieving revision 1.78
diff -u -r1.78 LDAPObject.c
--- Modules/LDAPObject.c	6 Dec 2006 07:36:00 -0000	1.78
+++ Modules/LDAPObject.c	21 Aug 2007 20:39:06 -0000
@@ -1065,7 +1065,7 @@
     int msgid;
     int ldaperror;
 
-    if (!PyArg_ParseTuple( args, "sis|OiOOdi",
+    if (!PyArg_ParseTuple( args, "zis|OiOOdi",
     	                   &base, &scope, &filter, &attrlist, &attrsonly,
                            &serverctrls, &clientctrls, &timeout, &sizelimit )) return NULL;
     if (not_valid(self)) return NULL;
Index: Modules/functions.c
===================================================================
RCS file: /cvsroot/python-ldap/python-ldap/Modules/functions.c,v
retrieving revision 1.20
diff -u -r1.20 functions.c
--- Modules/functions.c	26 Mar 2007 18:37:24 -0000	1.20
+++ Modules/functions.c	21 Aug 2007 20:39:06 -0000
@@ -20,7 +20,7 @@
     LDAP *ld = NULL;
     int ret;
 
-    if (!PyArg_ParseTuple(args, "s", &uri))
+    if (!PyArg_ParseTuple(args, "z", &uri))
     	return NULL;
 
     Py_BEGIN_ALLOW_THREADS
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Python-LDAP-dev mailing list
Python-LDAP-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/python-ldap-dev

Reply via email to