2001-12-10 Yuuichi Teranishi <teranisi@gohome.org>
+ * pldap.el (ldap-ldif-field-name-regexp): Changed regexp.
+ (ldap-search-program-arguments): Changed default value.
+ (ldap-search-basic): Accept exit status 4.
+ (ldap/field-body): Parse options.
+ (ldap/collect-field): Ditto.
+ (According to the advise from Mito <mito@mxa.nes.nec.co.jp>)
+
* elmo-imap4.el (elmo-imap4-process-bye): New function.
(elmo-imap4-send-command): Call elmo-imap4-process-bye.
(elmo-imap4-accept-ok): Ditto.
(concat ldap-ldif-safe-init-char-regexp ldap-ldif-safe-char-regexp "*")
"A Regexp for safe-string.")
-(defconst ldap-ldif-field-name-regexp "[a-zA-Z][a-zA-Z0-9-]*"
+(defconst ldap-ldif-field-name-regexp "[a-zA-Z][a-zA-Z0-9-;]*"
"A Regexp for field name.")
(defconst ldap-ldif-field-head-regexp
(defvar ldap-modify-program "ldapmodify"
"LDAP modify program.")
-(defcustom ldap-search-program-arguments '("-L" "-B")
+(defcustom ldap-search-program-arguments '("-LL" "-x")
"*A list of additional arguments to pass to `ldapsearch'.
It is recommended to use the `-T' switch with Nescape's
implementation to avoid line wrapping.
`-L' is needed to get LDIF outout.
+(`-LL' is needed to get rid of comments from OpenLDAP's ldapsearch.)
+`-x' is needed to use simple authentication.
The `-B' switch should be used to enable the retrieval of
binary values."
:type '(repeat :tag "`ldapsearch' Arguments"
(list filter)
attrs)))
(if (and (integerp ret)
- (not (zerop ret)))
+ (not (zerop ret))
+ ;; When openldap's `ldapsearch' exceeds response size limit,
+ ;; it's exit status becomes `4'.
+ (/= ret 4))
(error "LDAP error: \"No such object\""))
(goto-char (point-min))
(setq start (point))
(let ((case-fold-search t)
(field-body nil)
body)
- (while (re-search-forward (concat "^" name ":[ \t]*") nil t)
+ ;; search for the line which have name with options.
+ (while (re-search-forward (concat "^" name
+ "\\(;[a-zA-Z0-9-]+\\)?:[ \t]*") nil t)
;; Base64
(if (string-match "^:[ \t]*" (setq body
(buffer-substring-no-properties
"Collect fields without WITHOUT."
(goto-char (point-min))
(let ((regexp (concat "\\(" ldap-ldif-field-head-regexp "\\)[ \t]*"))
- dest name body entry)
+ dest name name-option body entry)
(while (re-search-forward regexp nil t)
- (setq name (downcase (buffer-substring-no-properties
- (match-beginning 1)(1- (match-end 1)))))
+ ;; name with options.
+ (setq name-option (split-string (downcase (buffer-substring-no-properties
+ (match-beginning 1)
+ (1- (match-end 1))))
+ ";"))
+ ;; XXX options are discarded.
+ (setq name (car name-option))
(setq body (buffer-substring-no-properties
(match-end 0) (ldap/field-end)))
(if (string-match "^:[ \t]*" body)