comparison lisp/net/ldap.el @ 42517:400e6bda5a0d

(ldap-host-parameters-alist): Remove duplicated entry. (ldap-ignore-attribute-codings): Change the default value to allow encoding/decoding of attributes. (ldap-coding-system): Use UTF-8 as the coding-system. Doc fix.
author Pavel Janík <Pavel@Janik.cz>
date Fri, 04 Jan 2002 07:17:32 +0000
parents fc1e8b9795d0
children 19b398fd9146
comparison
equal deleted inserted replaced
42516:23cdfafe44c0 42517:400e6bda5a0d
25 ;; Boston, MA 02111-1307, USA. 25 ;; Boston, MA 02111-1307, USA.
26 26
27 ;;; Commentary: 27 ;;; Commentary:
28 28
29 ;; This package provides basic functionality to perform searches on LDAP 29 ;; This package provides basic functionality to perform searches on LDAP
30 ;; servers. It requires a command line utility generally named 30 ;; servers. It requires a command line utility generally named
31 ;; `ldapsearch' to actually perform the searches. That program can be 31 ;; `ldapsearch' to actually perform the searches. That program can be
32 ;; found in all LDAP developer kits such as: 32 ;; found in all LDAP developer kits such as:
33 ;; - UM-LDAP 3.3 (http://www.umich.edu/~dirsvcs/ldap/) 33 ;; - UM-LDAP 3.3 (http://www.umich.edu/~dirsvcs/ldap/)
34 ;; - OpenLDAP (http://www.openldap.org/) 34 ;; - OpenLDAP (http://www.openldap.org/)
35 35
36 ;;; Code: 36 ;;; Code:
42 :version "21.1" 42 :version "21.1"
43 :group 'comm) 43 :group 'comm)
44 44
45 (defcustom ldap-default-host nil 45 (defcustom ldap-default-host nil
46 "*Default LDAP server. 46 "*Default LDAP server.
47 A TCP port number can be appended to that name using a colon as 47 A TCP port number can be appended to that name using a colon as
48 a separator." 48 a separator."
49 :type '(choice (string :tag "Host name") 49 :type '(choice (string :tag "Host name")
50 (const :tag "Use library default" nil)) 50 (const :tag "Use library default" nil))
51 :group 'ldap) 51 :group 'ldap)
52 52
69 69
70 (defcustom ldap-host-parameters-alist nil 70 (defcustom ldap-host-parameters-alist nil
71 "*Alist of host-specific options for LDAP transactions. 71 "*Alist of host-specific options for LDAP transactions.
72 The format of each list element is (HOST PROP1 VAL1 PROP2 VAL2 ...). 72 The format of each list element is (HOST PROP1 VAL1 PROP2 VAL2 ...).
73 HOST is the hostname of an LDAP server(with an optional TCP port number 73 HOST is the hostname of an LDAP server(with an optional TCP port number
74 appended to it using a colon as a separator). 74 appended to it using a colon as a separator).
75 PROPn and VALn are property/value pairs describing parameters for the server. 75 PROPn and VALn are property/value pairs describing parameters for the server.
76 Valid properties include: 76 Valid properties include:
77 `binddn' is the distinguished name of the user to bind as 77 `binddn' is the distinguished name of the user to bind as
78 (in RFC 1779 syntax). 78 (in RFC 1779 syntax).
79 `passwd' is the password to use for simple authentication. 79 `passwd' is the password to use for simple authentication.
80 `auth' is the authentication method to use. 80 `auth' is the authentication method to use.
81 Possible values are: `simple', `krbv41' and `krbv42'. 81 Possible values are: `simple', `krbv41' and `krbv42'.
82 `base' is the base for the search as described in RFC 1779. 82 `base' is the base for the search as described in RFC 1779.
83 `scope' is one of the three symbols `subtree', `base' or `onelevel'. 83 `scope' is one of the three symbols `subtree', `base' or `onelevel'.
84 `deref' is one of the symbols `never', `always', `search' or `find'. 84 `deref' is one of the symbols `never', `always', `search' or `find'.
85 `timelimit' is the timeout limit for the connection in seconds. 85 `timelimit' is the timeout limit for the connection in seconds.
91 :value nil 91 :value nil
92 (string :tag "Host name") 92 (string :tag "Host name")
93 (checklist :inline t 93 (checklist :inline t
94 :greedy t 94 :greedy t
95 (list 95 (list
96 :tag "Search Base" 96 :tag "Search Base"
97 :inline t 97 :inline t
98 (const :tag "Search Base" base) 98 (const :tag "Search Base" base)
99 string) 99 string)
100 (list 100 (list
101 :tag "Binding DN" 101 :tag "Binding DN"
115 (const :menu-tag "None" :tag "None" nil) 115 (const :menu-tag "None" :tag "None" nil)
116 (const :menu-tag "Simple" :tag "Simple" simple) 116 (const :menu-tag "Simple" :tag "Simple" simple)
117 (const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41) 117 (const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41)
118 (const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42))) 118 (const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42)))
119 (list 119 (list
120 :tag "Search Base" 120 :tag "Search Scope"
121 :inline t
122 (const :tag "Search Base" base)
123 string)
124 (list
125 :tag "Search Scope"
126 :inline t 121 :inline t
127 (const :tag "Search Scope" scope) 122 (const :tag "Search Scope" scope)
128 (choice 123 (choice
129 (const :menu-tag "Default" :tag "Default" nil) 124 (const :menu-tag "Default" :tag "Default" nil)
130 (const :menu-tag "Subtree" :tag "Subtree" subtree) 125 (const :menu-tag "Subtree" :tag "Subtree" subtree)
159 154
160 (defcustom ldap-ldapsearch-args '("-B") 155 (defcustom ldap-ldapsearch-args '("-B")
161 "*A list of additional arguments to pass to `ldapsearch'. 156 "*A list of additional arguments to pass to `ldapsearch'.
162 It is recommended to use the `-T' switch with Netscape's 157 It is recommended to use the `-T' switch with Netscape's
163 implementation to avoid line wrapping. 158 implementation to avoid line wrapping.
164 The `-B' switch should be used to enable the retrieval of 159 The `-B' switch should be used to enable the retrieval of
165 binary values." 160 binary values."
166 :type '(repeat :tag "`ldapsearch' Arguments" 161 :type '(repeat :tag "`ldapsearch' Arguments"
167 (string :tag "Argument")) 162 (string :tag "Argument"))
168 :group 'ldap) 163 :group 'ldap)
169 164
170 (defcustom ldap-ignore-attribute-codings t 165 (defcustom ldap-ignore-attribute-codings nil
171 "*If non-nil, do not encode/decode LDAP attribute values." 166 "*If non-nil, do not encode/decode LDAP attribute values."
172 :type 'boolean 167 :type 'boolean
173 :group 'ldap) 168 :group 'ldap)
174 169
175 (defcustom ldap-default-attribute-decoder nil 170 (defcustom ldap-default-attribute-decoder nil
176 "*Decoder function to use for attributes whose syntax is unknown." 171 "*Decoder function to use for attributes whose syntax is unknown."
177 :type 'symbol 172 :type 'symbol
178 :group 'ldap) 173 :group 'ldap)
179 174
180 (defcustom ldap-coding-system nil 175 (defcustom ldap-coding-system 'utf-8
181 "*Coding system of LDAP string values. 176 "*Coding system of LDAP string values.
182 LDAP v3 specifies the coding system of strings to be UTF-8 but 177 LDAP v3 specifies the coding system of strings to be UTF-8."
183 Emacs still does not have reasonable support for that."
184 :type 'symbol 178 :type 'symbol
185 :group 'ldap) 179 :group 'ldap)
186 180
187 (defvar ldap-attribute-syntax-encoders 181 (defvar ldap-attribute-syntax-encoders
188 [nil ; 1 ACI Item N 182 [nil ; 1 ACI Item N
189 nil ; 2 Access Point Y 183 nil ; 2 Access Point Y
190 nil ; 3 Attribute Type Description Y 184 nil ; 3 Attribute Type Description Y
191 nil ; 4 Audio N 185 nil ; 4 Audio N
192 nil ; 5 Binary N 186 nil ; 5 Binary N
193 nil ; 6 Bit String Y 187 nil ; 6 Bit String Y
194 ldap-encode-boolean ; 7 Boolean Y 188 ldap-encode-boolean ; 7 Boolean Y
195 nil ; 8 Certificate N 189 nil ; 8 Certificate N
196 nil ; 9 Certificate List N 190 nil ; 9 Certificate List N
197 nil ; 10 Certificate Pair N 191 nil ; 10 Certificate Pair N
198 ldap-encode-country-string ; 11 Country String Y 192 ldap-encode-country-string ; 11 Country String Y
199 ldap-encode-string ; 12 DN Y 193 ldap-encode-string ; 12 DN Y
200 nil ; 13 Data Quality Syntax Y 194 nil ; 13 Data Quality Syntax Y
201 nil ; 14 Delivery Method Y 195 nil ; 14 Delivery Method Y
202 ldap-encode-string ; 15 Directory String Y 196 ldap-encode-string ; 15 Directory String Y
203 nil ; 16 DIT Content Rule Description Y 197 nil ; 16 DIT Content Rule Description Y
204 nil ; 17 DIT Structure Rule Description Y 198 nil ; 17 DIT Structure Rule Description Y
205 nil ; 18 DL Submit Permission Y 199 nil ; 18 DL Submit Permission Y
206 nil ; 19 DSA Quality Syntax Y 200 nil ; 19 DSA Quality Syntax Y
207 nil ; 20 DSE Type Y 201 nil ; 20 DSE Type Y
208 nil ; 21 Enhanced Guide Y 202 nil ; 21 Enhanced Guide Y
209 nil ; 22 Facsimile Telephone Number Y 203 nil ; 22 Facsimile Telephone Number Y
210 nil ; 23 Fax N 204 nil ; 23 Fax N
211 nil ; 24 Generalized Time Y 205 nil ; 24 Generalized Time Y
212 nil ; 25 Guide Y 206 nil ; 25 Guide Y
213 nil ; 26 IA5 String Y 207 nil ; 26 IA5 String Y
214 number-to-string ; 27 INTEGER Y 208 number-to-string ; 27 INTEGER Y
215 nil ; 28 JPEG N 209 nil ; 28 JPEG N
216 nil ; 29 Master And Shadow Access Points Y 210 nil ; 29 Master And Shadow Access Points Y
217 nil ; 30 Matching Rule Description Y 211 nil ; 30 Matching Rule Description Y
218 nil ; 31 Matching Rule Use Description Y 212 nil ; 31 Matching Rule Use Description Y
219 nil ; 32 Mail Preference Y 213 nil ; 32 Mail Preference Y
220 nil ; 33 MHS OR Address Y 214 nil ; 33 MHS OR Address Y
221 nil ; 34 Name And Optional UID Y 215 nil ; 34 Name And Optional UID Y
222 nil ; 35 Name Form Description Y 216 nil ; 35 Name Form Description Y
223 nil ; 36 Numeric String Y 217 nil ; 36 Numeric String Y
224 nil ; 37 Object Class Description Y 218 nil ; 37 Object Class Description Y
225 nil ; 38 OID Y 219 nil ; 38 OID Y
226 nil ; 39 Other Mailbox Y 220 nil ; 39 Other Mailbox Y
227 nil ; 40 Octet String Y 221 nil ; 40 Octet String Y
228 ldap-encode-address ; 41 Postal Address Y 222 ldap-encode-address ; 41 Postal Address Y
229 nil ; 42 Protocol Information Y 223 nil ; 42 Protocol Information Y
230 nil ; 43 Presentation Address Y 224 nil ; 43 Presentation Address Y
231 ldap-encode-string ; 44 Printable String Y 225 ldap-encode-string ; 44 Printable String Y
232 nil ; 45 Subtree Specification Y 226 nil ; 45 Subtree Specification Y
233 nil ; 46 Supplier Information Y 227 nil ; 46 Supplier Information Y
234 nil ; 47 Supplier Or Consumer Y 228 nil ; 47 Supplier Or Consumer Y
235 nil ; 48 Supplier And Consumer Y 229 nil ; 48 Supplier And Consumer Y
236 nil ; 49 Supported Algorithm N 230 nil ; 49 Supported Algorithm N
237 nil ; 50 Telephone Number Y 231 nil ; 50 Telephone Number Y
238 nil ; 51 Teletex Terminal Identifier Y 232 nil ; 51 Teletex Terminal Identifier Y
239 nil ; 52 Telex Number Y 233 nil ; 52 Telex Number Y
240 nil ; 53 UTC Time Y 234 nil ; 53 UTC Time Y
241 nil ; 54 LDAP Syntax Description Y 235 nil ; 54 LDAP Syntax Description Y
242 nil ; 55 Modify Rights Y 236 nil ; 55 Modify Rights Y
243 nil ; 56 LDAP Schema Definition Y 237 nil ; 56 LDAP Schema Definition Y
244 nil ; 57 LDAP Schema Description Y 238 nil ; 57 LDAP Schema Description Y
245 nil ; 58 Substring Assertion Y 239 nil ; 58 Substring Assertion Y
246 ] 240 ]
247 "A vector of functions used to encode LDAP attribute values. 241 "A vector of functions used to encode LDAP attribute values.
248 The sequence of functions corresponds to the sequence of LDAP attribute syntax 242 The sequence of functions corresponds to the sequence of LDAP attribute syntax
249 object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in 243 object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
250 RFC2252 section 4.3.2") 244 RFC2252 section 4.3.2")
251 245
252 (defvar ldap-attribute-syntax-decoders 246 (defvar ldap-attribute-syntax-decoders
253 [nil ; 1 ACI Item N 247 [nil ; 1 ACI Item N
254 nil ; 2 Access Point Y 248 nil ; 2 Access Point Y
255 nil ; 3 Attribute Type Description Y 249 nil ; 3 Attribute Type Description Y
256 nil ; 4 Audio N 250 nil ; 4 Audio N
257 nil ; 5 Binary N 251 nil ; 5 Binary N
258 nil ; 6 Bit String Y 252 nil ; 6 Bit String Y
259 ldap-decode-boolean ; 7 Boolean Y 253 ldap-decode-boolean ; 7 Boolean Y
260 nil ; 8 Certificate N 254 nil ; 8 Certificate N
261 nil ; 9 Certificate List N 255 nil ; 9 Certificate List N
262 nil ; 10 Certificate Pair N 256 nil ; 10 Certificate Pair N
263 ldap-decode-string ; 11 Country String Y 257 ldap-decode-string ; 11 Country String Y
264 ldap-decode-string ; 12 DN Y 258 ldap-decode-string ; 12 DN Y
265 nil ; 13 Data Quality Syntax Y 259 nil ; 13 Data Quality Syntax Y
266 nil ; 14 Delivery Method Y 260 nil ; 14 Delivery Method Y
267 ldap-decode-string ; 15 Directory String Y 261 ldap-decode-string ; 15 Directory String Y
268 nil ; 16 DIT Content Rule Description Y 262 nil ; 16 DIT Content Rule Description Y
269 nil ; 17 DIT Structure Rule Description Y 263 nil ; 17 DIT Structure Rule Description Y
270 nil ; 18 DL Submit Permission Y 264 nil ; 18 DL Submit Permission Y
271 nil ; 19 DSA Quality Syntax Y 265 nil ; 19 DSA Quality Syntax Y
272 nil ; 20 DSE Type Y 266 nil ; 20 DSE Type Y
273 nil ; 21 Enhanced Guide Y 267 nil ; 21 Enhanced Guide Y
274 nil ; 22 Facsimile Telephone Number Y 268 nil ; 22 Facsimile Telephone Number Y
275 nil ; 23 Fax N 269 nil ; 23 Fax N
276 nil ; 24 Generalized Time Y 270 nil ; 24 Generalized Time Y
277 nil ; 25 Guide Y 271 nil ; 25 Guide Y
278 nil ; 26 IA5 String Y 272 nil ; 26 IA5 String Y
279 string-to-number ; 27 INTEGER Y 273 string-to-number ; 27 INTEGER Y
280 nil ; 28 JPEG N 274 nil ; 28 JPEG N
281 nil ; 29 Master And Shadow Access Points Y 275 nil ; 29 Master And Shadow Access Points Y
282 nil ; 30 Matching Rule Description Y 276 nil ; 30 Matching Rule Description Y
283 nil ; 31 Matching Rule Use Description Y 277 nil ; 31 Matching Rule Use Description Y
284 nil ; 32 Mail Preference Y 278 nil ; 32 Mail Preference Y
285 nil ; 33 MHS OR Address Y 279 nil ; 33 MHS OR Address Y
286 nil ; 34 Name And Optional UID Y 280 nil ; 34 Name And Optional UID Y
287 nil ; 35 Name Form Description Y 281 nil ; 35 Name Form Description Y
288 nil ; 36 Numeric String Y 282 nil ; 36 Numeric String Y
289 nil ; 37 Object Class Description Y 283 nil ; 37 Object Class Description Y
290 nil ; 38 OID Y 284 nil ; 38 OID Y
291 nil ; 39 Other Mailbox Y 285 nil ; 39 Other Mailbox Y
292 nil ; 40 Octet String Y 286 nil ; 40 Octet String Y
293 ldap-decode-address ; 41 Postal Address Y 287 ldap-decode-address ; 41 Postal Address Y
294 nil ; 42 Protocol Information Y 288 nil ; 42 Protocol Information Y
295 nil ; 43 Presentation Address Y 289 nil ; 43 Presentation Address Y
296 ldap-decode-string ; 44 Printable String Y 290 ldap-decode-string ; 44 Printable String Y
297 nil ; 45 Subtree Specification Y 291 nil ; 45 Subtree Specification Y
298 nil ; 46 Supplier Information Y 292 nil ; 46 Supplier Information Y
299 nil ; 47 Supplier Or Consumer Y 293 nil ; 47 Supplier Or Consumer Y
300 nil ; 48 Supplier And Consumer Y 294 nil ; 48 Supplier And Consumer Y
301 nil ; 49 Supported Algorithm N 295 nil ; 49 Supported Algorithm N
302 nil ; 50 Telephone Number Y 296 nil ; 50 Telephone Number Y
303 nil ; 51 Teletex Terminal Identifier Y 297 nil ; 51 Teletex Terminal Identifier Y
304 nil ; 52 Telex Number Y 298 nil ; 52 Telex Number Y
305 nil ; 53 UTC Time Y 299 nil ; 53 UTC Time Y
306 nil ; 54 LDAP Syntax Description Y 300 nil ; 54 LDAP Syntax Description Y
307 nil ; 55 Modify Rights Y 301 nil ; 55 Modify Rights Y
308 nil ; 56 LDAP Schema Definition Y 302 nil ; 56 LDAP Schema Definition Y
309 nil ; 57 LDAP Schema Description Y 303 nil ; 57 LDAP Schema Description Y
310 nil ; 58 Substring Assertion Y 304 nil ; 58 Substring Assertion Y
311 ] 305 ]
312 "A vector of functions used to decode LDAP attribute values. 306 "A vector of functions used to decode LDAP attribute values.
313 The sequence of functions corresponds to the sequence of LDAP attribute syntax 307 The sequence of functions corresponds to the sequence of LDAP attribute syntax
314 object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in 308 object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in
315 RFC2252 section 4.3.2") 309 RFC2252 section 4.3.2")
316 310
317 311
318 (defvar ldap-attribute-syntaxes-alist 312 (defvar ldap-attribute-syntaxes-alist
319 '((createtimestamp . 24) 313 '((createtimestamp . 24)
406 t) 400 t)
407 ((string-equal str "FALSE") 401 ((string-equal str "FALSE")
408 nil) 402 nil)
409 (t 403 (t
410 (error "Wrong LDAP boolean string: %s" str)))) 404 (error "Wrong LDAP boolean string: %s" str))))
411 405
412 (defun ldap-encode-country-string (str) 406 (defun ldap-encode-country-string (str)
413 ;; We should do something useful here... 407 ;; We should do something useful here...
414 (if (not (= 2 (length str))) 408 (if (not (= 2 (length str)))
415 (error "Invalid country string: %s" str))) 409 (error "Invalid country string: %s" str)))
416 410
430 (split-string str "\n") 424 (split-string str "\n")
431 "$")) 425 "$"))
432 426
433 427
434 ;; LDAP protocol functions 428 ;; LDAP protocol functions
435 429
436 (defun ldap-get-host-parameter (host parameter) 430 (defun ldap-get-host-parameter (host parameter)
437 "Get the value of PARAMETER for HOST in `ldap-host-parameters-alist'." 431 "Get the value of PARAMETER for HOST in `ldap-host-parameters-alist'."
438 (plist-get (cdr (assoc host ldap-host-parameters-alist)) 432 (plist-get (cdr (assoc host ldap-host-parameters-alist))
439 parameter)) 433 parameter))
440 434
441 (defun ldap-decode-attribute (attr) 435 (defun ldap-decode-attribute (attr)
442 "Decode the attribute/value pair ATTR according to LDAP rules. 436 "Decode the attribute/value pair ATTR according to LDAP rules.
443 The attribute name is looked up in `ldap-attribute-syntaxes-alist' 437 The attribute name is looked up in `ldap-attribute-syntaxes-alist'
444 and the corresponding decoder is then retrieved from 438 and the corresponding decoder is then retrieved from
445 `ldap-attribute-syntax-decoders' and applied on the value(s)." 439 `ldap-attribute-syntax-decoders' and applied on the value(s)."
446 (let* ((name (car attr)) 440 (let* ((name (car attr))
447 (values (cdr attr)) 441 (values (cdr attr))
448 (syntax-id (cdr (assq (intern (downcase name)) 442 (syntax-id (cdr (assq (intern (downcase name))
449 ldap-attribute-syntaxes-alist))) 443 ldap-attribute-syntaxes-alist)))
453 (1- syntax-id))) 447 (1- syntax-id)))
454 (setq decoder ldap-default-attribute-decoder)) 448 (setq decoder ldap-default-attribute-decoder))
455 (if decoder 449 (if decoder
456 (cons name (mapcar decoder values)) 450 (cons name (mapcar decoder values))
457 attr))) 451 attr)))
458
459 452
460 (defun ldap-search (filter &optional host attributes attrsonly withdn) 453 (defun ldap-search (filter &optional host attributes attrsonly withdn)
461 "Perform an LDAP search. 454 "Perform an LDAP search.
462 FILTER is the search filter in RFC1558 syntax. 455 FILTER is the search filter in RFC1558 syntax.
463 HOST is the LDAP host on which to perform the search. 456 HOST is the LDAP host on which to perform the search.
464 ATTRIBUTES are the specific attributes to retrieve, nil means 457 ATTRIBUTES are the specific attributes to retrieve, nil means
465 retrieve all. 458 retrieve all.
466 ATTRSONLY, if non-nil, retrieves the attributes only, without 459 ATTRSONLY, if non-nil, retrieves the attributes only, without
467 the associated values. 460 the associated values.
468 If WITHDN is non-nil, each entry in the result will be prepended with 461 If WITHDN is non-nil, each entry in the result will be prepended with
469 its distinguished name WITHDN. 462 its distinguished name WITHDN.
470 Additional search parameters can be specified through 463 Additional search parameters can be specified through
471 `ldap-host-parameters-alist', which see." 464 `ldap-host-parameters-alist', which see."
472 (interactive "sFilter:") 465 (interactive "sFilter:")
473 (or host 466 (or host
474 (setq host ldap-default-host) 467 (setq host ldap-default-host)
475 (error "No LDAP host specified")) 468 (error "No LDAP host specified"))
476 (let ((host-plist (cdr (assoc host ldap-host-parameters-alist))) 469 (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
477 result) 470 result)
478 (setq result (ldap-search-internal (append host-plist 471 (setq result (ldap-search-internal (append host-plist
479 (list 'host host 472 (list 'host host
480 'filter filter 473 'filter filter
481 'attributes attributes 474 'attributes attributes
482 'attrsonly attrsonly 475 'attrsonly attrsonly
483 'withdn withdn)))) 476 'withdn withdn))))
484 (if ldap-ignore-attribute-codings 477 (if ldap-ignore-attribute-codings
485 result 478 result
486 (mapcar (function 479 (mapcar (function
564 (not (equal "" sizelimit))) 557 (not (equal "" sizelimit)))
565 (setq arglist (nconc arglist (list (format "-z%s" sizelimit))))) 558 (setq arglist (nconc arglist (list (format "-z%s" sizelimit)))))
566 (eval `(call-process ldap-ldapsearch-prog 559 (eval `(call-process ldap-ldapsearch-prog
567 nil 560 nil
568 buf 561 buf
569 nil 562 nil
570 ,@arglist 563 ,@arglist
571 "-t" ; Write values to temp files 564 "-t" ; Write values to temp files
572 ,@ldap-ldapsearch-args 565 ,@ldap-ldapsearch-args
573 ,@filter)) 566 ,@filter))
574 (insert "\n") 567 (insert "\n")
575 (goto-char (point-min)) 568 (goto-char (point-min))
576 569
577 (if (looking-at "usage") 570 (if (looking-at "usage")
578 (error "Incorrect ldapsearch invocation") 571 (error "Incorrect ldapsearch invocation")
579 (message "Parsing results... ") 572 (message "Parsing results... ")
580 (while (progn 573 (while (progn
581 (skip-chars-forward " \t\n") 574 (skip-chars-forward " \t\n")
582 (not (eobp))) 575 (not (eobp)))
583 (setq dn (buffer-substring (point) (save-excursion 576 (setq dn (buffer-substring (point) (save-excursion
584 (end-of-line) 577 (end-of-line)
585 (point)))) 578 (point))))
586 (forward-line 1) 579 (forward-line 1)
587 (while (looking-at "^\\(\\w*\\)[=:\t ]+\\(<[\t ]*file://\\)?\\(.*\\)$") 580 (while (looking-at "^\\(\\w*\\)[=:\t ]+\\(<[\t ]*file://\\)?\\(.*\\)$")
588 (setq name (match-string 1) 581 (setq name (match-string 1)
594 (delete-file value) 587 (delete-file value)
595 (setq value (buffer-substring (point-min) (point-max)))) 588 (setq value (buffer-substring (point-min) (point-max))))
596 (setq record (cons (list name value) 589 (setq record (cons (list name value)
597 record)) 590 record))
598 (forward-line 1)) 591 (forward-line 1))
599 (setq result (cons (if withdn 592 (setq result (cons (if withdn
600 (cons dn (nreverse record)) 593 (cons dn (nreverse record))
601 (nreverse record)) result)) 594 (nreverse record)) result))
602 (setq record nil) 595 (setq record nil)
603 (skip-chars-forward " \t\n") 596 (skip-chars-forward " \t\n")
604 (message "Parsing results... %d" numres) 597 (message "Parsing results... %d" numres)
605 (1+ numres)) 598 (1+ numres))
606 (message "Parsing results... done") 599 (message "Parsing results... done")
607 (nreverse result))))) 600 (nreverse result)))))
608 601
609
610 (provide 'ldap) 602 (provide 'ldap)
611 603
612 ;;; ldap.el ends here 604 ;;; ldap.el ends here