[emacs21 commit] d3bfd8816d29d77cb7e4dc2bf80d4f214510c66a

Jérôme Marant jerome at marant.org
Sat Oct 28 11:15:20 CEST 2006


commit d3bfd8816d29d77cb7e4dc2bf80d4f214510c66a
Author: Jérôme Marant <jerome at marant.org>
Date:   Sat Oct 28 11:15:20 2006 +0200

    Grab ldap mode from CVS trunk fixing ldapsearch output.

diff --git a/changelog b/changelog
index 985884d..da6e305 100644
--- a/changelog
+++ b/changelog
@@ -12,7 +12,14 @@ emacs21 (21.4a+1-2) unstable; urgency=lo
     - debian/patches/yow-mode-from-cvs.diff: new patch.
     - debian/patches/series: updated.
   
- -- Jerome Marant <jerome at debian.org>  Fri, 27 Oct 2006 17:45:52 +0200
+  * Grab ldap mode from CVS trunk fixing ldapsearch output.
+    Thanks to both Joshua Judson Rosen <joshuar at russound.com> and
+    Henrik Holmboe <henrik at holmboe.se> for their help.
+    (closes: #381484) [Jérôme Marant]
+    - debian/patches/ldap-mode-from-cvs.diff: new patch.
+    - debian/patches/series: updated.
+  
+ -- Jerome Marant <jerome at debian.org>  Sat, 28 Oct 2006 11:14:27 +0200
 
 emacs21 (21.4a+1-1) unstable; urgency=low
 
diff --git a/patches/ldap-mode-from-cvs.diff b/patches/ldap-mode-from-cvs.diff
new file mode 100644
index 0000000..8c767f2
--- /dev/null
+++ b/patches/ldap-mode-from-cvs.diff
@@ -0,0 +1,576 @@
+* LDAP mode from CVS trunk fixinf ldapsearch output 
+  Patch: ldap-mode-from-cvs.diff 
+  Added-by: Jerome Marant <jerome at debian.org>
+  Date: Fri, 27 Oct 2006 19:55:36 +0200
+  Status: has been incorporated upstream
+
+Index: emacs21-21.4a+1/lisp/net/ldap.el
+===================================================================
+--- emacs21-21.4a+1.orig/lisp/net/ldap.el	2006-10-27 19:42:29.779623658 +0200
++++ emacs21-21.4a+1/lisp/net/ldap.el	2006-10-27 19:42:41.891290699 +0200
+@@ -1,9 +1,10 @@
+ ;;; ldap.el --- client interface to LDAP for Emacs
+ 
+-;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
++;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
++;;   2005, 2006 Free Software Foundation, Inc.
+ 
+-;; Author: Oscar Figueiredo <Oscar.Figueiredo at di.epfl.ch>
+-;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo at di.epfl.ch>
++;; Author: Oscar Figueiredo <oscar at cpe.fr>
++;; Maintainer: FSF
+ ;; Created: April 1998
+ ;; Keywords: comm
+ 
+@@ -21,14 +22,14 @@
+ 
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GNU Emacs; see the file COPYING.  If not, write to the
+-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-;; Boston, MA 02111-1307, USA.
++;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++;; Boston, MA 02110-1301, USA.
+ 
+ ;;; Commentary:
+ 
+ ;;    This package provides basic functionality to perform searches on LDAP
+-;;    servers.  It requires a command line utility generally named 
+-;;    `ldapsearch' to actually perform the searches.  That program can be 
++;;    servers.  It requires a command line utility generally named
++;;    `ldapsearch' to actually perform the searches.  That program can be
+ ;;    found in all LDAP developer kits such as:
+ ;;      - UM-LDAP 3.3 (http://www.umich.edu/~dirsvcs/ldap/)
+ ;;      - OpenLDAP (http://www.openldap.org/)
+@@ -36,6 +37,7 @@
+ ;;; Code:
+ 
+ (require 'custom)
++(eval-when-compile (require 'cl))
+ 
+ (defgroup ldap nil
+   "Lightweight Directory Access Protocol."
+@@ -44,7 +46,7 @@
+ 
+ (defcustom ldap-default-host nil
+   "*Default LDAP server.
+-A TCP port number can be appended to that name using a colon as 
++A TCP port number can be appended to that name using a colon as
+ a separator."
+   :type '(choice (string :tag "Host name")
+ 		 (const :tag "Use library default" nil))
+@@ -70,14 +72,14 @@
+ (defcustom ldap-host-parameters-alist nil
+   "*Alist of host-specific options for LDAP transactions.
+ The format of each list element is (HOST PROP1 VAL1 PROP2 VAL2 ...).
+-HOST is the hostname of an LDAP server(with an optional TCP port number
+-appended to it  using a colon as a separator). 
++HOST is the hostname of an LDAP server (with an optional TCP port number
++appended to it using a colon as a separator).
+ PROPn and VALn are property/value pairs describing parameters for the server.
+-Valid properties include: 
+-  `binddn' is the distinguished name of the user to bind as 
++Valid properties include:
++  `binddn' is the distinguished name of the user to bind as
+     (in RFC 1779 syntax).
+   `passwd' is the password to use for simple authentication.
+-  `auth' is the authentication method to use. 
++  `auth' is the authentication method to use.
+     Possible values are: `simple', `krbv41' and `krbv42'.
+   `base' is the base for the search as described in RFC 1779.
+   `scope' is one of the three symbols `subtree', `base' or `onelevel'.
+@@ -93,7 +95,7 @@
+ 		       (checklist :inline t
+ 				  :greedy t
+ 				  (list
+-				   :tag "Search Base" 
++				   :tag "Search Base"
+ 				   :inline t
+ 				   (const :tag "Search Base" base)
+ 				   string)
+@@ -117,12 +119,7 @@
+ 				    (const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41)
+ 				    (const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42)))
+ 				  (list
+-				   :tag "Search Base" 
+-				   :inline t
+-				   (const :tag "Search Base" base)
+-				   string)
+-				  (list
+-				   :tag "Search Scope" 
++				   :tag "Search Scope"
+ 				   :inline t
+ 				   (const :tag "Search Scope" scope)
+ 				   (choice
+@@ -157,17 +154,13 @@
+   :type '(string :tag "`ldapsearch' Program")
+   :group 'ldap)
+ 
+-(defcustom ldap-ldapsearch-args '("-B")
+-  "*A list of additional arguments to pass to `ldapsearch'.
+-It is recommended to use the `-T' switch with Netscape's
+-implementation to avoid line wrapping.
+-The `-B' switch should be used to enable the retrieval of 
+-binary values."
++(defcustom ldap-ldapsearch-args '("-LL" "-tt")
++  "*A list of additional arguments to pass to `ldapsearch'."
+   :type '(repeat :tag "`ldapsearch' Arguments"
+ 		 (string :tag "Argument"))
+   :group 'ldap)
+ 
+-(defcustom ldap-ignore-attribute-codings t
++(defcustom ldap-ignore-attribute-codings nil
+   "*If non-nil, do not encode/decode LDAP attribute values."
+   :type 'boolean
+   :group 'ldap)
+@@ -177,141 +170,140 @@
+   :type 'symbol
+   :group 'ldap)
+ 
+-(defcustom ldap-coding-system nil
++(defcustom ldap-coding-system 'utf-8
+   "*Coding system of LDAP string values.
+-LDAP v3 specifies the coding system of strings to be UTF-8 but 
+-Emacs still does not have reasonable support for that."
++LDAP v3 specifies the coding system of strings to be UTF-8."
+   :type 'symbol
+   :group 'ldap)
+ 
+ (defvar ldap-attribute-syntax-encoders
+-  [nil					; 1  ACI Item                        N  
+-   nil					; 2  Access Point                    Y  
+-   nil					; 3  Attribute Type Description      Y  
+-   nil					; 4  Audio                           N  
+-   nil					; 5  Binary                          N  
+-   nil					; 6  Bit String                      Y  
+-   ldap-encode-boolean			; 7  Boolean                         Y  
+-   nil					; 8  Certificate                     N  
+-   nil					; 9  Certificate List                N  
+-   nil					; 10 Certificate Pair                N  
+-   ldap-encode-country-string		; 11 Country String                  Y  
+-   ldap-encode-string			; 12 DN                              Y  
+-   nil					; 13 Data Quality Syntax             Y  
+-   nil					; 14 Delivery Method                 Y  
+-   ldap-encode-string			; 15 Directory String                Y  
+-   nil					; 16 DIT Content Rule Description    Y  
+-   nil					; 17 DIT Structure Rule Description  Y  
+-   nil					; 18 DL Submit Permission            Y  
+-   nil					; 19 DSA Quality Syntax              Y  
+-   nil					; 20 DSE Type                        Y  
+-   nil					; 21 Enhanced Guide                  Y  
+-   nil					; 22 Facsimile Telephone Number      Y  
+-   nil					; 23 Fax                             N  
+-   nil					; 24 Generalized Time                Y  
+-   nil					; 25 Guide                           Y  
+-   nil					; 26 IA5 String                      Y  
+-   number-to-string			; 27 INTEGER                         Y  
+-   nil					; 28 JPEG                            N  
+-   nil					; 29 Master And Shadow Access Points Y  
+-   nil					; 30 Matching Rule Description       Y  
+-   nil					; 31 Matching Rule Use Description   Y  
+-   nil					; 32 Mail Preference                 Y  
+-   nil					; 33 MHS OR Address                  Y  
+-   nil					; 34 Name And Optional UID           Y  
+-   nil					; 35 Name Form Description           Y  
+-   nil					; 36 Numeric String                  Y  
+-   nil					; 37 Object Class Description        Y  
+-   nil					; 38 OID                             Y  
+-   nil					; 39 Other Mailbox                   Y  
+-   nil					; 40 Octet String                    Y  
+-   ldap-encode-address			; 41 Postal Address                  Y  
+-   nil					; 42 Protocol Information            Y  
+-   nil					; 43 Presentation Address            Y  
+-   ldap-encode-string			; 44 Printable String                Y  
+-   nil					; 45 Subtree Specification           Y  
+-   nil					; 46 Supplier Information            Y  
+-   nil					; 47 Supplier Or Consumer            Y  
+-   nil					; 48 Supplier And Consumer           Y  
+-   nil					; 49 Supported Algorithm             N  
+-   nil					; 50 Telephone Number                Y  
+-   nil					; 51 Teletex Terminal Identifier     Y  
+-   nil					; 52 Telex Number                    Y  
+-   nil					; 53 UTC Time                        Y  
+-   nil					; 54 LDAP Syntax Description         Y  
+-   nil					; 55 Modify Rights                   Y  
+-   nil					; 56 LDAP Schema Definition          Y  
+-   nil					; 57 LDAP Schema Description         Y  
+-   nil					; 58 Substring Assertion             Y  
+-   ]  
++  [nil					; 1  ACI Item                        N
++   nil					; 2  Access Point                    Y
++   nil					; 3  Attribute Type Description      Y
++   nil					; 4  Audio                           N
++   nil					; 5  Binary                          N
++   nil					; 6  Bit String                      Y
++   ldap-encode-boolean			; 7  Boolean                         Y
++   nil					; 8  Certificate                     N
++   nil					; 9  Certificate List                N
++   nil					; 10 Certificate Pair                N
++   ldap-encode-country-string		; 11 Country String                  Y
++   ldap-encode-string			; 12 DN                              Y
++   nil					; 13 Data Quality Syntax             Y
++   nil					; 14 Delivery Method                 Y
++   ldap-encode-string			; 15 Directory String                Y
++   nil					; 16 DIT Content Rule Description    Y
++   nil					; 17 DIT Structure Rule Description  Y
++   nil					; 18 DL Submit Permission            Y
++   nil					; 19 DSA Quality Syntax              Y
++   nil					; 20 DSE Type                        Y
++   nil					; 21 Enhanced Guide                  Y
++   nil					; 22 Facsimile Telephone Number      Y
++   nil					; 23 Fax                             N
++   nil					; 24 Generalized Time                Y
++   nil					; 25 Guide                           Y
++   nil					; 26 IA5 String                      Y
++   number-to-string			; 27 INTEGER                         Y
++   nil					; 28 JPEG                            N
++   nil					; 29 Master And Shadow Access Points Y
++   nil					; 30 Matching Rule Description       Y
++   nil					; 31 Matching Rule Use Description   Y
++   nil					; 32 Mail Preference                 Y
++   nil					; 33 MHS OR Address                  Y
++   nil					; 34 Name And Optional UID           Y
++   nil					; 35 Name Form Description           Y
++   nil					; 36 Numeric String                  Y
++   nil					; 37 Object Class Description        Y
++   nil					; 38 OID                             Y
++   nil					; 39 Other Mailbox                   Y
++   nil					; 40 Octet String                    Y
++   ldap-encode-address			; 41 Postal Address                  Y
++   nil					; 42 Protocol Information            Y
++   nil					; 43 Presentation Address            Y
++   ldap-encode-string			; 44 Printable String                Y
++   nil					; 45 Subtree Specification           Y
++   nil					; 46 Supplier Information            Y
++   nil					; 47 Supplier Or Consumer            Y
++   nil					; 48 Supplier And Consumer           Y
++   nil					; 49 Supported Algorithm             N
++   nil					; 50 Telephone Number                Y
++   nil					; 51 Teletex Terminal Identifier     Y
++   nil					; 52 Telex Number                    Y
++   nil					; 53 UTC Time                        Y
++   nil					; 54 LDAP Syntax Description         Y
++   nil					; 55 Modify Rights                   Y
++   nil					; 56 LDAP Schema Definition          Y
++   nil					; 57 LDAP Schema Description         Y
++   nil					; 58 Substring Assertion             Y
++   ]
+   "A vector of functions used to encode LDAP attribute values.
+ The sequence of functions corresponds to the sequence of LDAP attribute syntax
+-object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in 
++object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
+ RFC2252 section 4.3.2")
+ 
+ (defvar ldap-attribute-syntax-decoders
+-  [nil					; 1  ACI Item                        N  
+-   nil					; 2  Access Point                    Y  
+-   nil					; 3  Attribute Type Description      Y  
+-   nil					; 4  Audio                           N  
+-   nil					; 5  Binary                          N  
+-   nil					; 6  Bit String                      Y  
+-   ldap-decode-boolean			; 7  Boolean                         Y  
+-   nil					; 8  Certificate                     N  
+-   nil					; 9  Certificate List                N  
+-   nil					; 10 Certificate Pair                N  
+-   ldap-decode-string			; 11 Country String                  Y  
+-   ldap-decode-string			; 12 DN                              Y  
+-   nil					; 13 Data Quality Syntax             Y  
+-   nil					; 14 Delivery Method                 Y  
+-   ldap-decode-string			; 15 Directory String                Y  
+-   nil					; 16 DIT Content Rule Description    Y  
+-   nil					; 17 DIT Structure Rule Description  Y  
+-   nil					; 18 DL Submit Permission            Y  
+-   nil					; 19 DSA Quality Syntax              Y  
+-   nil					; 20 DSE Type                        Y  
+-   nil					; 21 Enhanced Guide                  Y  
+-   nil					; 22 Facsimile Telephone Number      Y  
+-   nil					; 23 Fax                             N  
+-   nil					; 24 Generalized Time                Y  
+-   nil					; 25 Guide                           Y  
+-   nil					; 26 IA5 String                      Y  
+-   string-to-number			; 27 INTEGER                         Y  
+-   nil					; 28 JPEG                            N  
+-   nil					; 29 Master And Shadow Access Points Y  
+-   nil					; 30 Matching Rule Description       Y  
+-   nil					; 31 Matching Rule Use Description   Y  
+-   nil					; 32 Mail Preference                 Y  
+-   nil					; 33 MHS OR Address                  Y  
+-   nil					; 34 Name And Optional UID           Y  
+-   nil					; 35 Name Form Description           Y  
+-   nil					; 36 Numeric String                  Y  
+-   nil					; 37 Object Class Description        Y  
+-   nil					; 38 OID                             Y  
+-   nil					; 39 Other Mailbox                   Y  
+-   nil					; 40 Octet String                    Y  
+-   ldap-decode-address			; 41 Postal Address                  Y  
+-   nil					; 42 Protocol Information            Y  
+-   nil					; 43 Presentation Address            Y  
+-   ldap-decode-string			; 44 Printable String                Y  
+-   nil					; 45 Subtree Specification           Y  
+-   nil					; 46 Supplier Information            Y  
+-   nil					; 47 Supplier Or Consumer            Y  
+-   nil					; 48 Supplier And Consumer           Y  
+-   nil					; 49 Supported Algorithm             N  
+-   nil					; 50 Telephone Number                Y  
+-   nil					; 51 Teletex Terminal Identifier     Y  
+-   nil					; 52 Telex Number                    Y  
+-   nil					; 53 UTC Time                        Y  
+-   nil					; 54 LDAP Syntax Description         Y  
+-   nil					; 55 Modify Rights                   Y  
+-   nil					; 56 LDAP Schema Definition          Y  
+-   nil					; 57 LDAP Schema Description         Y  
+-   nil					; 58 Substring Assertion             Y  
+-   ]  
++  [nil					; 1  ACI Item                        N
++   nil					; 2  Access Point                    Y
++   nil					; 3  Attribute Type Description      Y
++   nil					; 4  Audio                           N
++   nil					; 5  Binary                          N
++   nil					; 6  Bit String                      Y
++   ldap-decode-boolean			; 7  Boolean                         Y
++   nil					; 8  Certificate                     N
++   nil					; 9  Certificate List                N
++   nil					; 10 Certificate Pair                N
++   ldap-decode-string			; 11 Country String                  Y
++   ldap-decode-string			; 12 DN                              Y
++   nil					; 13 Data Quality Syntax             Y
++   nil					; 14 Delivery Method                 Y
++   ldap-decode-string			; 15 Directory String                Y
++   nil					; 16 DIT Content Rule Description    Y
++   nil					; 17 DIT Structure Rule Description  Y
++   nil					; 18 DL Submit Permission            Y
++   nil					; 19 DSA Quality Syntax              Y
++   nil					; 20 DSE Type                        Y
++   nil					; 21 Enhanced Guide                  Y
++   nil					; 22 Facsimile Telephone Number      Y
++   nil					; 23 Fax                             N
++   nil					; 24 Generalized Time                Y
++   nil					; 25 Guide                           Y
++   nil					; 26 IA5 String                      Y
++   string-to-number			; 27 INTEGER                         Y
++   nil					; 28 JPEG                            N
++   nil					; 29 Master And Shadow Access Points Y
++   nil					; 30 Matching Rule Description       Y
++   nil					; 31 Matching Rule Use Description   Y
++   nil					; 32 Mail Preference                 Y
++   nil					; 33 MHS OR Address                  Y
++   nil					; 34 Name And Optional UID           Y
++   nil					; 35 Name Form Description           Y
++   nil					; 36 Numeric String                  Y
++   nil					; 37 Object Class Description        Y
++   nil					; 38 OID                             Y
++   nil					; 39 Other Mailbox                   Y
++   nil					; 40 Octet String                    Y
++   ldap-decode-address			; 41 Postal Address                  Y
++   nil					; 42 Protocol Information            Y
++   nil					; 43 Presentation Address            Y
++   ldap-decode-string			; 44 Printable String                Y
++   nil					; 45 Subtree Specification           Y
++   nil					; 46 Supplier Information            Y
++   nil					; 47 Supplier Or Consumer            Y
++   nil					; 48 Supplier And Consumer           Y
++   nil					; 49 Supported Algorithm             N
++   nil					; 50 Telephone Number                Y
++   nil					; 51 Teletex Terminal Identifier     Y
++   nil					; 52 Telex Number                    Y
++   nil					; 53 UTC Time                        Y
++   nil					; 54 LDAP Syntax Description         Y
++   nil					; 55 Modify Rights                   Y
++   nil					; 56 LDAP Schema Definition          Y
++   nil					; 57 LDAP Schema Description         Y
++   nil					; 58 Substring Assertion             Y
++   ]
+   "A vector of functions used to decode LDAP attribute values.
+ The sequence of functions corresponds to the sequence of LDAP attribute syntax
+-object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in 
++object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
+ RFC2252 section 4.3.2")
+ 
+ 
+@@ -408,7 +400,7 @@
+     nil)
+    (t
+     (error "Wrong LDAP boolean string: %s" str))))
+-    
++
+ (defun ldap-encode-country-string (str)
+   ;; We should do something useful here...
+   (if (not (= 2 (length str)))
+@@ -432,16 +424,16 @@
+ 
+ 
+ ;; LDAP protocol functions
+-    
++
+ (defun ldap-get-host-parameter (host parameter)
+   "Get the value of PARAMETER for HOST in `ldap-host-parameters-alist'."
+   (plist-get (cdr (assoc host ldap-host-parameters-alist))
+ 	     parameter))
+-	
++
+ (defun ldap-decode-attribute (attr)
+   "Decode the attribute/value pair ATTR according to LDAP rules.
+-The attribute name is looked up in `ldap-attribute-syntaxes-alist' 
+-and the corresponding decoder is then retrieved from 
++The attribute name is looked up in `ldap-attribute-syntaxes-alist'
++and the corresponding decoder is then retrieved from
+ `ldap-attribute-syntax-decoders' and applied on the value(s)."
+   (let* ((name (car attr))
+ 	 (values (cdr attr))
+@@ -455,19 +447,18 @@
+     (if decoder
+ 	(cons name (mapcar decoder values))
+       attr)))
+-    
+ 
+ (defun ldap-search (filter &optional host attributes attrsonly withdn)
+   "Perform an LDAP search.
+ FILTER is the search filter in RFC1558 syntax.
+ HOST is the LDAP host on which to perform the search.
+-ATTRIBUTES are the specific attributes to retrieve, nil means 
++ATTRIBUTES are the specific attributes to retrieve, nil means
+ retrieve all.
+-ATTRSONLY, if non-nil, retrieves the attributes only, without 
++ATTRSONLY, if non-nil, retrieves the attributes only, without
+ the associated values.
+ If WITHDN is non-nil, each entry in the result will be prepended with
+ its distinguished name WITHDN.
+-Additional search parameters can be specified through 
++Additional search parameters can be specified through
+ `ldap-host-parameters-alist', which see."
+   (interactive "sFilter:")
+   (or host
+@@ -475,17 +466,16 @@
+       (error "No LDAP host specified"))
+   (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
+ 	result)
+-    (setq result (ldap-search-internal (append host-plist
+-					       (list 'host host
+-						     'filter filter
+-						     'attributes attributes 
+-						     'attrsonly attrsonly
+-						     'withdn withdn))))
++    (setq result (ldap-search-internal (list* 'host host
++					      'filter filter
++					      'attributes attributes
++					      'attrsonly attrsonly
++					      'withdn withdn
++					      host-plist)))
+     (if ldap-ignore-attribute-codings
+ 	result
+-      (mapcar (function
+-	       (lambda (record)
+-		 (mapcar 'ldap-decode-attribute record)))
++      (mapcar (lambda (record)
++		(mapcar 'ldap-decode-attribute record))
+ 	      result))))
+ 
+ 
+@@ -500,9 +490,11 @@
+ for each matching entry. If nil, return all available attributes.
+   `attrsonly', if non-nil, indicates that only attributes are retrieved,
+ not their associated values.
++  `auth' is one of the symbols `simple', `krbv41' or `krbv42'.
+   `base' is the base for the search as described in RFC 1779.
+   `scope' is one of the three symbols `sub', `base' or `one'.
+   `binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax).
++  `auth' is one of the symbols `simple', `krbv41' or `krbv42'
+   `passwd' is the password to use for simple authentication.
+   `deref' is one of the symbols `never', `always', `search' or `find'.
+   `timelimit' is the timeout limit for the connection in seconds.
+@@ -522,6 +514,7 @@
+ 		  ldap-default-base))
+ 	(scope (plist-get search-plist 'scope))
+ 	(binddn (plist-get search-plist 'binddn))
++        (auth (plist-get search-plist 'auth))
+ 	(passwd (plist-get search-plist 'passwd))
+ 	(deref (plist-get search-plist 'deref))
+ 	(timelimit (plist-get search-plist 'timelimit))
+@@ -551,6 +544,9 @@
+       (if (and binddn
+ 	       (not (equal "" binddn)))
+ 	  (setq arglist (nconc arglist (list (format "-D%s" binddn)))))
++      (if (and auth
++	       (equal 'simple auth))
++	  (setq arglist (nconc arglist (list "-x"))))
+       (if (and passwd
+ 	       (not (equal "" passwd)))
+ 	  (setq arglist (nconc arglist (list (format "-w%s" passwd)))))
+@@ -566,47 +562,62 @@
+       (eval `(call-process ldap-ldapsearch-prog
+ 			   nil
+ 			   buf
+-			   nil	  
++			   nil
+ 			   , at arglist
+-			   "-t"		; Write values to temp files
+ 			   , at ldap-ldapsearch-args
+ 			   , at filter))
+       (insert "\n")
+       (goto-char (point-min))
+-      
++
++      (while (re-search-forward "[\t\n\f]+ " nil t)
++	(replace-match "" nil nil))
++      (goto-char (point-min))
++
+       (if (looking-at "usage")
+ 	  (error "Incorrect ldapsearch invocation")
+ 	(message "Parsing results... ")
+-	(while (progn 
++	;; Skip error message when retrieving attribute list
++	(if (looking-at "Size limit exceeded")
++	    (forward-line 1))
++	(while (progn
+ 		 (skip-chars-forward " \t\n")
+ 		 (not (eobp)))
+-	  (setq dn (buffer-substring (point) (save-excursion 
++	  (setq dn (buffer-substring (point) (save-excursion
+ 					       (end-of-line)
+ 					       (point))))
+ 	  (forward-line 1)
+-	  (while (looking-at "^\\(\\w*\\)[=:\t ]+\\(<[\t ]*file://\\)?\\(.*\\)$")
++	  (while (looking-at "^\\(\\w*\\)\\(;\\w*\\)?[=:\t ]+\\(<[\t ]*file://\\)\\(.*\\)$")
+ 	    (setq name (match-string 1)
+-		  value (match-string 3))
+-	    (save-excursion
+-	      (set-buffer bufval)
+-	      (erase-buffer)
+-	      (insert-file-contents-literally value)
+-	      (delete-file value)
+-	      (setq value (buffer-substring (point-min) (point-max))))
++		  value (match-string 4))
++            ;; Need to handle file:///D:/... as generated by OpenLDAP
++            ;; on DOS/Windows as local files.
++            (if (and (memq system-type '(windows-nt ms-dos))
++                     (eq (string-match "/\\(.:.*\\)$" value) 0))
++                (setq value (match-string 1 value)))
++	    ;; Do not try to open non-existent files
++	    (if (equal value "")
++		(setq value " ")
++	      (save-excursion
++		(set-buffer bufval)
++		(erase-buffer)
++		(set-buffer-multibyte nil)
++		(insert-file-contents-literally value)
++		(delete-file value)
++		(setq value (buffer-string))))
+ 	    (setq record (cons (list name value)
+ 			       record))
+ 	    (forward-line 1))
+-	  (setq result (cons (if withdn 
++	  (setq result (cons (if withdn
+ 				 (cons dn (nreverse record))
+ 			       (nreverse record)) result))
+ 	  (setq record nil)
+-	  (skip-chars-forward " \t\n")      
++	  (skip-chars-forward " \t\n")
+ 	  (message "Parsing results... %d" numres)
+ 	  (1+ numres))
+ 	(message "Parsing results... done")
+ 	(nreverse result)))))
+ 
+-
+ (provide 'ldap)
+ 
++;;; arch-tag: 47913a76-6155-42e6-ac58-6d28b5d50eb0
+ ;;; ldap.el ends here
diff --git a/patches/series b/patches/series
index 445362e..1a8c131 100644
--- a/patches/series
+++ b/patches/series
@@ -32,3 +32,4 @@ xorg-altgr-fix.diff
 whitespace-readonly-infloop.diff
 fix-x-vs-no-x-diffs.diff
 autofiles.diff
+ldap-mode-from-cvs.diff



More information about the pkg-emacs-commits mailing list