[emacs21 commit] 8413226f3f1da62f86c6054528572f47c9ac0308

Jérôme Marant jerome at marant.org
Sat Nov 18 14:08:23 CET 2006


commit 8413226f3f1da62f86c6054528572f47c9ac0308
Author: Jérôme Marant <jerome at marant.org>
Date:   Sat Nov 18 14:08:23 2006 +0100

    Properly handle ldapsearch output from OpenLDAP version 2 and above.

diff --git a/changelog b/changelog
index 730c6ff..345476d 100644
--- a/changelog
+++ b/changelog
@@ -12,11 +12,11 @@ emacs21 (21.4a+1-2) unstable; urgency=lo
     - debian/patches/yow-mode-from-cvs.diff: new patch.
     - debian/patches/series: updated.
   
-  * Grab ldap mode from CVS trunk fixing ldapsearch output.
+  * Properly handle ldapsearch output from OpenLDAP version 2 and above.
     Thanks to both Joshua Judson Rosen <joshuar at russound.com> and
-    Henrik Holmboe <henrik at holmboe.se> for their help.
+    Henrik Holmboe <henrik at holmboe.se>.
     (closes: #381484) [Jérôme Marant]
-    - debian/patches/ldap-mode-from-cvs.diff: new patch.
+    - debian/patches/ldapsearch-output.diff: new patch.
     - debian/patches/series: updated.
 
   * Mention license of both emacs.1 and etags.1 manpages and add a copy of
@@ -24,7 +24,7 @@ emacs21 (21.4a+1-2) unstable; urgency=lo
     - debian/copyright.in
     - debian/copyright: re-generated.
 
- -- Jerome Marant <jerome at debian.org>  Mon,  6 Nov 2006 16:03:22 +0100
+ -- Jerome Marant <jerome at debian.org>  Sat, 18 Nov 2006 14:06:12 +0100
 
 emacs21 (21.4a+1-1) unstable; urgency=low
 
diff --git a/patches/ldap-mode-from-cvs.diff b/patches/ldap-mode-from-cvs.diff
deleted file mode 100644
index 8c767f2..0000000
--- a/patches/ldap-mode-from-cvs.diff
+++ /dev/null
@@ -1,576 +0,0 @@
-* 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/ldapsearch-output.diff b/patches/ldapsearch-output.diff
new file mode 100644
index 0000000..1794aba
--- /dev/null
+++ b/patches/ldapsearch-output.diff
@@ -0,0 +1,40 @@
+* Properly handle ldapsearch output from OpenLDAP version 2 and above.
+  Patch: ldapsearch-output.diff 
+  Provided-by: Henrik Holmboe <henrik at holmboe.se> 
+  Added-by: Jerome Marant <jerome at debian.org>
+  Date: Tue, 17 Oct 2006 10:06:24 +0200 
+  Status: fixed upstream 
+
+Index: emacs21-21.4a+1/lisp/net/ldap.el
+===================================================================
+--- emacs21-21.4a+1.orig/lisp/net/ldap.el	2006-10-17 09:35:11.553434043 +0200
++++ emacs21-21.4a+1/lisp/net/ldap.el	2006-10-17 09:39:57.049573660 +0200
+@@ -157,7 +157,7 @@
+   :type '(string :tag "`ldapsearch' Program")
+   :group 'ldap)
+ 
+-(defcustom ldap-ldapsearch-args '("-B")
++(defcustom ldap-ldapsearch-args '("-x")
+   "*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.
+@@ -587,12 +587,13 @@
+ 	  (while (looking-at "^\\(\\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))))
++	    (if (string-match "^< file:///\\(.*\\)$" value)
++		(save-excursion
++		  (set-buffer bufval)
++		  (erase-buffer)
++		  (insert-file-contents-literally value)
++		  (delete-file value)
++		  (setq value (buffer-substring (point-min) (point-max)))))
+ 	    (setq record (cons (list name value)
+ 			       record))
+ 	    (forward-line 1))
diff --git a/patches/series b/patches/series
index 1a8c131..72934b2 100644
--- a/patches/series
+++ b/patches/series
@@ -32,4 +32,4 @@ xorg-altgr-fix.diff
 whitespace-readonly-infloop.diff
 fix-x-vs-no-x-diffs.diff
 autofiles.diff
-ldap-mode-from-cvs.diff
+ldapsearch-output.diff



More information about the pkg-emacs-commits mailing list