2001-07-16 07:46:48 +00:00
|
|
|
;;; ldap.el --- client interface to LDAP for Emacs
|
2000-01-12 20:50:20 +00:00
|
|
|
|
2011-01-25 04:08:28 +00:00
|
|
|
;; Copyright (C) 1998-2011 Free Software Foundation, Inc.
|
2000-01-12 20:50:20 +00:00
|
|
|
|
2002-01-08 06:58:13 +00:00
|
|
|
;; Author: Oscar Figueiredo <oscar@cpe.fr>
|
2005-02-06 10:42:08 +00:00
|
|
|
;; Maintainer: FSF
|
2000-01-12 20:50:20 +00:00
|
|
|
;; Created: April 1998
|
|
|
|
;; Keywords: comm
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
2008-05-06 07:31:51 +00:00
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2000-01-12 20:50:20 +00:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 07:31:51 +00:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
2000-01-12 20:50:20 +00:00
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2008-05-06 07:31:51 +00:00
|
|
|
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
2000-01-12 20:50:20 +00:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;; This package provides basic functionality to perform searches on LDAP
|
2002-01-04 07:18:10 +00:00
|
|
|
;; servers. It requires a command line utility generally named
|
|
|
|
;; `ldapsearch' to actually perform the searches. That program can be
|
2000-01-12 20:50:20 +00:00
|
|
|
;; found in all LDAP developer kits such as:
|
|
|
|
;; - UM-LDAP 3.3 (http://www.umich.edu/~dirsvcs/ldap/)
|
|
|
|
;; - OpenLDAP (http://www.openldap.org/)
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'custom)
|
2004-04-12 04:12:02 +00:00
|
|
|
(eval-when-compile (require 'cl))
|
2000-01-12 20:50:20 +00:00
|
|
|
|
2011-03-13 22:17:17 +00:00
|
|
|
(autoload 'auth-source-search "auth-source")
|
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
(defgroup ldap nil
|
|
|
|
"Lightweight Directory Access Protocol."
|
2000-11-27 23:22:31 +00:00
|
|
|
:version "21.1"
|
2000-01-12 20:50:20 +00:00
|
|
|
:group 'comm)
|
|
|
|
|
|
|
|
(defcustom ldap-default-host nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Default LDAP server.
|
2002-01-04 07:18:10 +00:00
|
|
|
A TCP port number can be appended to that name using a colon as
|
2000-01-12 20:50:20 +00:00
|
|
|
a separator."
|
|
|
|
:type '(choice (string :tag "Host name")
|
|
|
|
(const :tag "Use library default" nil))
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
(defcustom ldap-default-port nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Default TCP port for LDAP connections.
|
2000-01-12 20:50:20 +00:00
|
|
|
Initialized from the LDAP library at build time. Default value is 389."
|
|
|
|
:type '(choice (const :tag "Use library default" nil)
|
|
|
|
(integer :tag "Port number"))
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
(defcustom ldap-default-base nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Default base for LDAP searches.
|
2000-01-12 20:50:20 +00:00
|
|
|
This is a string using the syntax of RFC 1779.
|
|
|
|
For instance, \"o=ACME, c=US\" limits the search to the
|
|
|
|
Acme organization in the United States."
|
|
|
|
:type '(choice (const :tag "Use library default" nil)
|
|
|
|
(string :tag "Search base"))
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
|
|
|
|
(defcustom ldap-host-parameters-alist nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Alist of host-specific options for LDAP transactions.
|
2000-01-12 20:50:20 +00:00
|
|
|
The format of each list element is (HOST PROP1 VAL1 PROP2 VAL2 ...).
|
2002-01-06 16:29:19 +00:00
|
|
|
HOST is the hostname of an LDAP server (with an optional TCP port number
|
2002-01-04 07:18:10 +00:00
|
|
|
appended to it using a colon as a separator).
|
2000-01-12 20:50:20 +00:00
|
|
|
PROPn and VALn are property/value pairs describing parameters for the server.
|
2002-01-04 07:18:10 +00:00
|
|
|
Valid properties include:
|
|
|
|
`binddn' is the distinguished name of the user to bind as
|
2000-01-12 20:50:20 +00:00
|
|
|
(in RFC 1779 syntax).
|
|
|
|
`passwd' is the password to use for simple authentication.
|
2002-01-04 07:18:10 +00:00
|
|
|
`auth' is the authentication method to use.
|
2000-01-12 20:50:20 +00:00
|
|
|
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'.
|
|
|
|
`deref' is one of the symbols `never', `always', `search' or `find'.
|
|
|
|
`timelimit' is the timeout limit for the connection in seconds.
|
|
|
|
`sizelimit' is the maximum number of matches to return."
|
|
|
|
:type '(repeat :menu-tag "Host parameters"
|
|
|
|
:tag "Host parameters"
|
|
|
|
(list :menu-tag "Host parameters"
|
|
|
|
:tag "Host parameters"
|
|
|
|
:value nil
|
|
|
|
(string :tag "Host name")
|
|
|
|
(checklist :inline t
|
|
|
|
:greedy t
|
|
|
|
(list
|
2002-01-04 07:18:10 +00:00
|
|
|
:tag "Search Base"
|
2000-01-12 20:50:20 +00:00
|
|
|
:inline t
|
|
|
|
(const :tag "Search Base" base)
|
|
|
|
string)
|
|
|
|
(list
|
|
|
|
:tag "Binding DN"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Binding DN" binddn)
|
|
|
|
string)
|
|
|
|
(list
|
|
|
|
:tag "Password"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Password" passwd)
|
|
|
|
string)
|
|
|
|
(list
|
|
|
|
:tag "Authentication Method"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Authentication Method" auth)
|
|
|
|
(choice
|
|
|
|
(const :menu-tag "None" :tag "None" nil)
|
|
|
|
(const :menu-tag "Simple" :tag "Simple" simple)
|
|
|
|
(const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41)
|
|
|
|
(const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42)))
|
|
|
|
(list
|
2002-01-04 07:18:10 +00:00
|
|
|
:tag "Search Scope"
|
2000-01-12 20:50:20 +00:00
|
|
|
:inline t
|
|
|
|
(const :tag "Search Scope" scope)
|
|
|
|
(choice
|
|
|
|
(const :menu-tag "Default" :tag "Default" nil)
|
|
|
|
(const :menu-tag "Subtree" :tag "Subtree" subtree)
|
|
|
|
(const :menu-tag "Base" :tag "Base" base)
|
|
|
|
(const :menu-tag "One Level" :tag "One Level" onelevel)))
|
|
|
|
(list
|
|
|
|
:tag "Dereferencing"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Dereferencing" deref)
|
|
|
|
(choice
|
|
|
|
(const :menu-tag "Default" :tag "Default" nil)
|
|
|
|
(const :menu-tag "Never" :tag "Never" never)
|
|
|
|
(const :menu-tag "Always" :tag "Always" always)
|
|
|
|
(const :menu-tag "When searching" :tag "When searching" search)
|
|
|
|
(const :menu-tag "When locating base" :tag "When locating base" find)))
|
|
|
|
(list
|
|
|
|
:tag "Time Limit"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Time Limit" timelimit)
|
|
|
|
(integer :tag "(in seconds)"))
|
|
|
|
(list
|
|
|
|
:tag "Size Limit"
|
|
|
|
:inline t
|
|
|
|
(const :tag "Size Limit" sizelimit)
|
|
|
|
(integer :tag "(number of records)")))))
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
(defcustom ldap-ldapsearch-prog "ldapsearch"
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"The name of the ldapsearch command line program."
|
2000-01-12 20:50:20 +00:00
|
|
|
:type '(string :tag "`ldapsearch' Program")
|
|
|
|
:group 'ldap)
|
|
|
|
|
2006-06-13 20:31:32 +00:00
|
|
|
(defcustom ldap-ldapsearch-args '("-LL" "-tt")
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"A list of additional arguments to pass to `ldapsearch'."
|
2000-01-12 20:50:20 +00:00
|
|
|
:type '(repeat :tag "`ldapsearch' Arguments"
|
|
|
|
(string :tag "Argument"))
|
|
|
|
:group 'ldap)
|
|
|
|
|
2002-01-04 07:18:10 +00:00
|
|
|
(defcustom ldap-ignore-attribute-codings nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"If non-nil, do not encode/decode LDAP attribute values."
|
2000-01-12 20:50:20 +00:00
|
|
|
:type 'boolean
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
(defcustom ldap-default-attribute-decoder nil
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Decoder function to use for attributes whose syntax is unknown."
|
2000-01-12 20:50:20 +00:00
|
|
|
:type 'symbol
|
|
|
|
:group 'ldap)
|
|
|
|
|
2002-01-04 07:18:10 +00:00
|
|
|
(defcustom ldap-coding-system 'utf-8
|
Remove leading `*' from docs of some defcustoms etc.
* emulation/crisp.el, emulation/cua-base.el, emulation/edt.el:
* emulation/pc-select.el, emulation/vip.el, international/iso-ascii.el:
* international/kkc.el, international/ogonek.el, mail/feedmail.el:
* net/browse-url.el, net/eudc-vars.el, net/net-utils.el:
* net/rcompile.el, net/rlogin.el, textmodes/enriched.el:
* textmodes/makeinfo.el, textmodes/page-ext.el, textmodes/picture.el:
* textmodes/refer.el, textmodes/spell.el, textmodes/table.el:
* textmodes/tex-mode.el, textmodes/two-column.el:
Remove leading `*' from docs of defcustoms etc.
2010-09-23 06:42:45 +00:00
|
|
|
"Coding system of LDAP string values.
|
2002-01-04 07:18:10 +00:00
|
|
|
LDAP v3 specifies the coding system of strings to be UTF-8."
|
2000-01-12 20:50:20 +00:00
|
|
|
:type 'symbol
|
|
|
|
:group 'ldap)
|
|
|
|
|
|
|
|
(defvar ldap-attribute-syntax-encoders
|
2002-01-04 07:18:10 +00:00
|
|
|
[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
|
|
|
|
]
|
2000-01-12 20:50:20 +00:00
|
|
|
"A vector of functions used to encode LDAP attribute values.
|
|
|
|
The sequence of functions corresponds to the sequence of LDAP attribute syntax
|
2002-01-04 07:18:10 +00:00
|
|
|
object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
|
2000-01-12 20:50:20 +00:00
|
|
|
RFC2252 section 4.3.2")
|
|
|
|
|
|
|
|
(defvar ldap-attribute-syntax-decoders
|
2002-01-04 07:18:10 +00:00
|
|
|
[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
|
|
|
|
]
|
2000-01-12 20:50:20 +00:00
|
|
|
"A vector of functions used to decode LDAP attribute values.
|
|
|
|
The sequence of functions corresponds to the sequence of LDAP attribute syntax
|
2002-01-04 07:18:10 +00:00
|
|
|
object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
|
2000-01-12 20:50:20 +00:00
|
|
|
RFC2252 section 4.3.2")
|
|
|
|
|
|
|
|
|
|
|
|
(defvar ldap-attribute-syntaxes-alist
|
|
|
|
'((createtimestamp . 24)
|
|
|
|
(modifytimestamp . 24)
|
|
|
|
(creatorsname . 12)
|
|
|
|
(modifiersname . 12)
|
|
|
|
(subschemasubentry . 12)
|
|
|
|
(attributetypes . 3)
|
|
|
|
(objectclasses . 37)
|
|
|
|
(matchingrules . 30)
|
|
|
|
(matchingruleuse . 31)
|
|
|
|
(namingcontexts . 12)
|
|
|
|
(altserver . 26)
|
|
|
|
(supportedextension . 38)
|
|
|
|
(supportedcontrol . 38)
|
|
|
|
(supportedsaslmechanisms . 15)
|
|
|
|
(supportedldapversion . 27)
|
|
|
|
(ldapsyntaxes . 16)
|
|
|
|
(ditstructurerules . 17)
|
|
|
|
(nameforms . 35)
|
|
|
|
(ditcontentrules . 16)
|
|
|
|
(objectclass . 38)
|
|
|
|
(aliasedobjectname . 12)
|
|
|
|
(cn . 15)
|
|
|
|
(sn . 15)
|
|
|
|
(serialnumber . 44)
|
|
|
|
(c . 15)
|
|
|
|
(l . 15)
|
|
|
|
(st . 15)
|
|
|
|
(street . 15)
|
|
|
|
(o . 15)
|
|
|
|
(ou . 15)
|
|
|
|
(title . 15)
|
|
|
|
(description . 15)
|
|
|
|
(searchguide . 25)
|
|
|
|
(businesscategory . 15)
|
|
|
|
(postaladdress . 41)
|
|
|
|
(postalcode . 15)
|
|
|
|
(postofficebox . 15)
|
|
|
|
(physicaldeliveryofficename . 15)
|
|
|
|
(telephonenumber . 50)
|
|
|
|
(telexnumber . 52)
|
|
|
|
(telexterminalidentifier . 51)
|
|
|
|
(facsimiletelephonenumber . 22)
|
|
|
|
(x121address . 36)
|
|
|
|
(internationalisdnnumber . 36)
|
|
|
|
(registeredaddress . 41)
|
|
|
|
(destinationindicator . 44)
|
|
|
|
(preferreddeliverymethod . 14)
|
|
|
|
(presentationaddress . 43)
|
|
|
|
(supportedapplicationcontext . 38)
|
|
|
|
(member . 12)
|
|
|
|
(owner . 12)
|
|
|
|
(roleoccupant . 12)
|
|
|
|
(seealso . 12)
|
|
|
|
(userpassword . 40)
|
|
|
|
(usercertificate . 8)
|
|
|
|
(cacertificate . 8)
|
|
|
|
(authorityrevocationlist . 9)
|
|
|
|
(certificaterevocationlist . 9)
|
|
|
|
(crosscertificatepair . 10)
|
|
|
|
(name . 15)
|
|
|
|
(givenname . 15)
|
|
|
|
(initials . 15)
|
|
|
|
(generationqualifier . 15)
|
|
|
|
(x500uniqueidentifier . 6)
|
|
|
|
(dnqualifier . 44)
|
|
|
|
(enhancedsearchguide . 21)
|
|
|
|
(protocolinformation . 42)
|
|
|
|
(distinguishedname . 12)
|
|
|
|
(uniquemember . 34)
|
|
|
|
(houseidentifier . 15)
|
|
|
|
(supportedalgorithms . 49)
|
|
|
|
(deltarevocationlist . 9)
|
|
|
|
(dmdname . 15))
|
|
|
|
"A map of LDAP attribute names to their type object id minor number.
|
|
|
|
This table is built from RFC2252 Section 5 and RFC2256 Section 5")
|
|
|
|
|
|
|
|
|
|
|
|
;; Coding/decoding functions
|
|
|
|
|
|
|
|
(defun ldap-encode-boolean (bool)
|
|
|
|
(if bool
|
|
|
|
"TRUE"
|
|
|
|
"FALSE"))
|
|
|
|
|
|
|
|
(defun ldap-decode-boolean (str)
|
|
|
|
(cond
|
|
|
|
((string-equal str "TRUE")
|
|
|
|
t)
|
|
|
|
((string-equal str "FALSE")
|
|
|
|
nil)
|
|
|
|
(t
|
|
|
|
(error "Wrong LDAP boolean string: %s" str))))
|
2002-01-04 07:18:10 +00:00
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
(defun ldap-encode-country-string (str)
|
|
|
|
;; We should do something useful here...
|
|
|
|
(if (not (= 2 (length str)))
|
|
|
|
(error "Invalid country string: %s" str)))
|
|
|
|
|
|
|
|
(defun ldap-decode-string (str)
|
|
|
|
(decode-coding-string str ldap-coding-system))
|
|
|
|
|
|
|
|
(defun ldap-encode-string (str)
|
|
|
|
(encode-coding-string str ldap-coding-system))
|
|
|
|
|
|
|
|
(defun ldap-decode-address (str)
|
|
|
|
(mapconcat 'ldap-decode-string
|
|
|
|
(split-string str "\\$")
|
|
|
|
"\n"))
|
|
|
|
|
|
|
|
(defun ldap-encode-address (str)
|
|
|
|
(mapconcat 'ldap-encode-string
|
|
|
|
(split-string str "\n")
|
|
|
|
"$"))
|
|
|
|
|
|
|
|
|
|
|
|
;; LDAP protocol functions
|
2002-01-04 07:18:10 +00:00
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
(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))
|
2002-01-04 07:18:10 +00:00
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
(defun ldap-decode-attribute (attr)
|
|
|
|
"Decode the attribute/value pair ATTR according to LDAP rules.
|
2002-01-04 07:18:10 +00:00
|
|
|
The attribute name is looked up in `ldap-attribute-syntaxes-alist'
|
|
|
|
and the corresponding decoder is then retrieved from
|
2000-01-12 20:50:20 +00:00
|
|
|
`ldap-attribute-syntax-decoders' and applied on the value(s)."
|
|
|
|
(let* ((name (car attr))
|
|
|
|
(values (cdr attr))
|
|
|
|
(syntax-id (cdr (assq (intern (downcase name))
|
|
|
|
ldap-attribute-syntaxes-alist)))
|
|
|
|
decoder)
|
|
|
|
(if syntax-id
|
|
|
|
(setq decoder (aref ldap-attribute-syntax-decoders
|
|
|
|
(1- syntax-id)))
|
|
|
|
(setq decoder ldap-default-attribute-decoder))
|
|
|
|
(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.
|
2002-01-04 07:18:10 +00:00
|
|
|
ATTRIBUTES are the specific attributes to retrieve, nil means
|
2000-01-12 20:50:20 +00:00
|
|
|
retrieve all.
|
2002-01-04 07:18:10 +00:00
|
|
|
ATTRSONLY, if non-nil, retrieves the attributes only, without
|
2000-01-12 20:50:20 +00:00
|
|
|
the associated values.
|
|
|
|
If WITHDN is non-nil, each entry in the result will be prepended with
|
|
|
|
its distinguished name WITHDN.
|
2002-01-04 07:18:10 +00:00
|
|
|
Additional search parameters can be specified through
|
2000-01-12 20:50:20 +00:00
|
|
|
`ldap-host-parameters-alist', which see."
|
|
|
|
(interactive "sFilter:")
|
|
|
|
(or host
|
|
|
|
(setq host ldap-default-host)
|
|
|
|
(error "No LDAP host specified"))
|
|
|
|
(let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
|
|
|
|
result)
|
2004-04-12 04:12:02 +00:00
|
|
|
(setq result (ldap-search-internal (list* 'host host
|
|
|
|
'filter filter
|
|
|
|
'attributes attributes
|
|
|
|
'attrsonly attrsonly
|
|
|
|
'withdn withdn
|
|
|
|
host-plist)))
|
2000-01-12 20:50:20 +00:00
|
|
|
(if ldap-ignore-attribute-codings
|
|
|
|
result
|
2004-04-12 04:12:02 +00:00
|
|
|
(mapcar (lambda (record)
|
|
|
|
(mapcar 'ldap-decode-attribute record))
|
2000-01-12 20:50:20 +00:00
|
|
|
result))))
|
|
|
|
|
|
|
|
|
|
|
|
(defun ldap-search-internal (search-plist)
|
|
|
|
"Perform a search on a LDAP server.
|
|
|
|
SEARCH-PLIST is a property list describing the search request.
|
|
|
|
Valid keys in that list are:
|
2011-03-13 22:17:17 +00:00
|
|
|
|
|
|
|
`auth-source', if non-nil, will use `auth-source-search' and
|
|
|
|
will grab the :host, :secret, :base, and (:user or :binddn)
|
|
|
|
tokens into the `host', `passwd', `base', and `binddn' parameters
|
|
|
|
respectively if they are not provided in SEARCH-PLIST. So for
|
|
|
|
instance *each* of these netrc lines has the same effect if you
|
|
|
|
ask for the host \"ldapserver:2400\":
|
|
|
|
|
|
|
|
machine ldapserver:2400 login myDN secret myPassword base myBase
|
|
|
|
machine ldapserver:2400 binddn myDN secret myPassword port ldap
|
|
|
|
login myDN secret myPassword base myBase
|
|
|
|
|
|
|
|
but if you have more than one in your netrc file, only the first
|
|
|
|
matching one will be used. Note the \"port ldap\" part is NOT
|
|
|
|
required.
|
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
`host' is a string naming one or more (blank-separated) LDAP servers to
|
|
|
|
to try to connect to. Each host name may optionally be of the form HOST:PORT.
|
|
|
|
`filter' is a filter string for the search as described in RFC 1558.
|
|
|
|
`attributes' is a list of strings indicating which attributes to retrieve
|
|
|
|
for each matching entry. If nil, return all available attributes.
|
|
|
|
`attrsonly', if non-nil, indicates that only attributes are retrieved,
|
|
|
|
not their associated values.
|
2006-09-07 21:16:16 +00:00
|
|
|
`auth' is one of the symbols `simple', `krbv41' or `krbv42'.
|
2000-01-12 20:50:20 +00:00
|
|
|
`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).
|
2006-09-09 11:06:19 +00:00
|
|
|
`auth' is one of the symbols `simple', `krbv41' or `krbv42'
|
2000-01-12 20:50:20 +00:00
|
|
|
`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.
|
|
|
|
`sizelimit' is the maximum number of matches to return.
|
|
|
|
`withdn' if non-nil each entry in the result will be prepended with
|
|
|
|
its distinguished name DN.
|
|
|
|
The function returns a list of matching entries. Each entry is itself
|
|
|
|
an alist of attribute/value pairs."
|
2011-03-13 22:17:17 +00:00
|
|
|
(let* ((buf (get-buffer-create " *ldap-search*"))
|
2000-01-12 20:50:20 +00:00
|
|
|
(bufval (get-buffer-create " *ldap-value*"))
|
|
|
|
(host (or (plist-get search-plist 'host)
|
|
|
|
ldap-default-host))
|
2011-03-13 22:17:17 +00:00
|
|
|
;; find entries with port "ldap" that match the requested host if any
|
|
|
|
(asfound (when (plist-get search-plist 'auth-source)
|
|
|
|
(nth 0 (auth-source-search :host (or host t)
|
|
|
|
:create t))))
|
|
|
|
;; if no host was requested, get it from the auth-source entry
|
|
|
|
(host (or host (plist-get asfound :host)))
|
|
|
|
;; get the password from the auth-source
|
|
|
|
(passwd (or (plist-get search-plist 'passwd)
|
|
|
|
(plist-get asfound :secret)))
|
|
|
|
;; convert the password from a function call if needed
|
|
|
|
(passwd (if (functionp passwd) (funcall passwd) passwd))
|
|
|
|
;; get the binddn from the search-list or from the
|
|
|
|
;; auth-source user or binddn tokens
|
|
|
|
(binddn (or (plist-get search-plist 'binddn)
|
|
|
|
(plist-get asfound :user)
|
|
|
|
(plist-get asfound :binddn)))
|
|
|
|
(base (or (plist-get search-plist 'base)
|
|
|
|
(plist-get asfound :base)
|
|
|
|
ldap-default-base))
|
2000-01-12 20:50:20 +00:00
|
|
|
(filter (plist-get search-plist 'filter))
|
|
|
|
(attributes (plist-get search-plist 'attributes))
|
|
|
|
(attrsonly (plist-get search-plist 'attrsonly))
|
|
|
|
(scope (plist-get search-plist 'scope))
|
2006-09-07 21:16:16 +00:00
|
|
|
(auth (plist-get search-plist 'auth))
|
2000-01-12 20:50:20 +00:00
|
|
|
(deref (plist-get search-plist 'deref))
|
|
|
|
(timelimit (plist-get search-plist 'timelimit))
|
|
|
|
(sizelimit (plist-get search-plist 'sizelimit))
|
|
|
|
(withdn (plist-get search-plist 'withdn))
|
|
|
|
(numres 0)
|
|
|
|
arglist dn name value record result)
|
|
|
|
(if (or (null filter)
|
|
|
|
(equal "" filter))
|
|
|
|
(error "No search filter"))
|
|
|
|
(setq filter (cons filter attributes))
|
2009-08-30 14:24:09 +00:00
|
|
|
(with-current-buffer buf
|
2000-01-12 20:50:20 +00:00
|
|
|
(erase-buffer)
|
|
|
|
(if (and host
|
|
|
|
(not (equal "" host)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-h%s" host)))))
|
|
|
|
(if (and attrsonly
|
|
|
|
(not (equal "" attrsonly)))
|
|
|
|
(setq arglist (nconc arglist (list "-A"))))
|
|
|
|
(if (and base
|
|
|
|
(not (equal "" base)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-b%s" base)))))
|
|
|
|
(if (and scope
|
|
|
|
(not (equal "" scope)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-s%s" scope)))))
|
|
|
|
(if (and binddn
|
|
|
|
(not (equal "" binddn)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-D%s" binddn)))))
|
2006-09-07 21:16:16 +00:00
|
|
|
(if (and auth
|
|
|
|
(equal 'simple auth))
|
|
|
|
(setq arglist (nconc arglist (list "-x"))))
|
2000-01-12 20:50:20 +00:00
|
|
|
(if (and passwd
|
|
|
|
(not (equal "" passwd)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-w%s" passwd)))))
|
|
|
|
(if (and deref
|
|
|
|
(not (equal "" deref)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-a%s" deref)))))
|
|
|
|
(if (and timelimit
|
|
|
|
(not (equal "" timelimit)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-l%s" timelimit)))))
|
|
|
|
(if (and sizelimit
|
|
|
|
(not (equal "" sizelimit)))
|
|
|
|
(setq arglist (nconc arglist (list (format "-z%s" sizelimit)))))
|
2011-01-09 19:34:19 +00:00
|
|
|
(apply #'call-process ldap-ldapsearch-prog
|
2011-01-15 20:03:38 +00:00
|
|
|
;; Ignore stderr, which can corrupt results
|
|
|
|
nil (list buf nil) nil
|
2011-01-09 19:34:19 +00:00
|
|
|
(append arglist ldap-ldapsearch-args filter))
|
2000-01-12 20:50:20 +00:00
|
|
|
(insert "\n")
|
|
|
|
(goto-char (point-min))
|
2002-01-04 07:18:10 +00:00
|
|
|
|
2002-05-12 16:42:19 +00:00
|
|
|
(while (re-search-forward "[\t\n\f]+ " nil t)
|
|
|
|
(replace-match "" nil nil))
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
2000-01-12 20:50:20 +00:00
|
|
|
(if (looking-at "usage")
|
|
|
|
(error "Incorrect ldapsearch invocation")
|
|
|
|
(message "Parsing results... ")
|
2002-01-06 17:59:09 +00:00
|
|
|
;; Skip error message when retrieving attribute list
|
|
|
|
(if (looking-at "Size limit exceeded")
|
|
|
|
(forward-line 1))
|
2002-01-04 07:18:10 +00:00
|
|
|
(while (progn
|
2000-01-12 20:50:20 +00:00
|
|
|
(skip-chars-forward " \t\n")
|
|
|
|
(not (eobp)))
|
Replace still more end-of-line etc with line-end-position, etc.
* lisp/gnus/nnbabyl.el (nnbabyl-request-move-article, nnbabyl-delete-mail)
(nnbabyl-check-mbox): Use point-at-bol.
* lisp/cedet/semantic/lex.el (semantic-lex-ignore-comments, semantic-flex):
* lisp/cedet/semantic/grammar.el (semantic-grammar-epilogue):
* lisp/cedet/ede/speedbar.el (ede-find-nearest-file-line):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/ede/autoconf-edit.el (autoconf-delete-parameter):
Use point-at-bol and point-at-eol.
* lisp/vc/emerge.el (emerge-line-number-in-buf):
* lisp/textmodes/ispell.el (ispell-region):
* lisp/textmodes/fill.el (current-fill-column):
* lisp/progmodes/xscheme.el (xscheme-send-current-line):
* lisp/progmodes/vhdl-mode.el (vhdl-current-line, vhdl-line-copy):
* lisp/progmodes/tcl.el (tcl-hairy-scan-for-comment):
* lisp/progmodes/sh-script.el (sh-handle-prev-do):
* lisp/progmodes/meta-mode.el (meta-indent-line):
* lisp/progmodes/idlwave.el (idlwave-goto-comment, idlwave-fill-paragraph)
(idlwave-in-quote):
* lisp/progmodes/idlw-shell.el (idlwave-shell-current-frame)
(idlwave-shell-update-bp-overlays, idlwave-shell-sources-filter):
* lisp/progmodes/fortran.el (fortran-looking-at-if-then):
* lisp/progmodes/etags.el (find-tag-in-order, etags-snarf-tag):
* lisp/progmodes/cperl-mode.el (cperl-sniff-for-indent)
(cperl-find-pods-heres):
* lisp/progmodes/ada-mode.el (ada-get-current-indent, ada-narrow-to-defun):
* lisp/net/quickurl.el (quickurl-list-insert):
* lisp/net/ldap.el (ldap-search-internal):
* lisp/net/eudc.el (eudc-expand-inline):
* lisp/mail/sendmail.el (sendmail-send-it):
* lisp/mail/mspools.el (mspools-visit-spool, mspools-get-spool-name):
* lisp/emulation/viper-cmd.el (viper-paren-match, viper-backward-indent)
(viper-brac-function):
* lisp/calc/calc-yank.el (calc-do-grab-region):
* lisp/calc/calc-keypd.el (calc-keypad-press):
* lisp/term.el (term-move-columns, term-insert-spaces):
* lisp/speedbar.el (speedbar-highlight-one-tag-line):
* lisp/simple.el (current-word):
* lisp/mouse-drag.el (mouse-drag-should-do-col-scrolling):
* lisp/info.el (Info-find-node-in-buffer-1, Info-follow-reference)
(Info-scroll-down):
* lisp/hippie-exp.el (he-line-beg):
* lisp/epa.el (epa--marked-keys):
* lisp/dired-aux.el (dired-kill-line, dired-do-kill-lines)
(dired-update-file-line, dired-add-entry, dired-remove-entry)
(dired-relist-entry):
* lisp/buff-menu.el (Buffer-menu-buffer):
* lisp/array.el (current-line):
* lisp/allout.el (allout-resolve-xref)
(allout-latex-verbatim-quote-curr-line):
Replace yet more uses of end-of-line etc with line-end-position.
2010-11-09 05:33:07 +00:00
|
|
|
(setq dn (buffer-substring (point) (point-at-eol)))
|
2000-01-12 20:50:20 +00:00
|
|
|
(forward-line 1)
|
2008-08-12 18:35:18 +00:00
|
|
|
(while (looking-at "^\\([A-Za-z][-A-Za-z0-9]*\
|
|
|
|
\\|[0-9]+\\(?:\\.[0-9]+\\)*\\)\\(;[-A-Za-z0-9]+\\)*[=:\t ]+\
|
|
|
|
\\(<[\t ]*file://\\)\\(.*\\)$")
|
2000-01-12 20:50:20 +00:00
|
|
|
(setq name (match-string 1)
|
2005-02-05 19:18:03 +00:00
|
|
|
value (match-string 4))
|
2004-03-11 21:10:21 +00:00
|
|
|
;; 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)))
|
2002-01-06 17:59:09 +00:00
|
|
|
;; Do not try to open non-existent files
|
|
|
|
(if (equal value "")
|
|
|
|
(setq value " ")
|
2009-08-30 14:24:09 +00:00
|
|
|
(with-current-buffer bufval
|
2002-01-06 17:59:09 +00:00
|
|
|
(erase-buffer)
|
|
|
|
(set-buffer-multibyte nil)
|
|
|
|
(insert-file-contents-literally value)
|
|
|
|
(delete-file value)
|
|
|
|
(setq value (buffer-string))))
|
2000-01-12 20:50:20 +00:00
|
|
|
(setq record (cons (list name value)
|
|
|
|
record))
|
|
|
|
(forward-line 1))
|
2009-08-30 14:24:09 +00:00
|
|
|
(push (if withdn
|
|
|
|
(cons dn (nreverse record))
|
|
|
|
(nreverse record)) result)
|
2000-01-12 20:50:20 +00:00
|
|
|
(setq record nil)
|
2002-01-04 07:18:10 +00:00
|
|
|
(skip-chars-forward " \t\n")
|
2000-01-12 20:50:20 +00:00
|
|
|
(message "Parsing results... %d" numres)
|
|
|
|
(1+ numres))
|
|
|
|
(message "Parsing results... done")
|
|
|
|
(nreverse result)))))
|
|
|
|
|
|
|
|
(provide 'ldap)
|
|
|
|
|
|
|
|
;;; ldap.el ends here
|