]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix parsing of dn line if WITHDN is non-nil
authorJens Schmidt <jschmidt4gnu@vodafonemail.de>
Thu, 15 Jun 2023 22:04:04 +0000 (00:04 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 17 Jun 2023 07:57:42 +0000 (10:57 +0300)
Function `ldap-search' errors out with `wrong-type-argument listp'
when called with WITHDN non-nil.
* lisp/net/ldap.el (ldap-search-internal): Parse the dn line
correctly so that `ldap-search' can grok it.  (Bug#64089)

lisp/net/ldap.el

index 78405414a28e786ca52a56f7d5668146da1e3903..4275b45e6f5d59ee32d7f6e89bc632eee5657567 100644 (file)
@@ -703,7 +703,17 @@ an alist of attribute/value pairs."
        (while (progn
                 (skip-chars-forward " \t\n")
                 (not (eobp)))
-          (setq dn (buffer-substring (point) (line-end-position)))
+          ;; Ignore first (dn) line if WITHDN equals nil.  If WITHDN
+          ;; is non-nil, check syntax of the line and split it into a
+          ;; pair as expected by `ldap-decode-attribute' (Bug#64089).
+          ;; If the syntax is wrong, better throw an error here, since
+          ;; otherwise `ldap-decode-attribute' would throw a much less
+          ;; comprehensible error later.
+          (cond ((not withdn))
+                ((looking-at "^dn[=:\t ]+\\(.*\\)$")
+                 (setq dn (list "dn" (match-string 1))))
+                (t (error "Incorrect dn line \"%s\" in ldapsearch result"
+                          (buffer-substring (point) (line-end-position)))))
          (forward-line 1)
           (while (looking-at "^\\([A-Za-z][-A-Za-z0-9]*\
 \\|[0-9]+\\(?:\\.[0-9]+\\)*\\)\\(;[-A-Za-z0-9]+\\)*[=:\t ]+\