From d2246b2627531523dc0decd6bee863820dd2f5bf Mon Sep 17 00:00:00 2001 From: Jens Schmidt Date: Fri, 16 Jun 2023 00:04:04 +0200 Subject: [PATCH 1/2] Fix parsing of dn line if WITHDN is non-nil 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 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el index 78405414a28..4275b45e6f5 100644 --- a/lisp/net/ldap.el +++ b/lisp/net/ldap.el @@ -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 ]+\ From 71b27779a9a014cc5ff594cb0b34fc763387e071 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 17 Jun 2023 10:59:44 +0300 Subject: [PATCH 2/2] ; * lisp/net/ldap.el (ldap-search-internal): Fix last change. (Bug#64089) --- lisp/net/ldap.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el index 4275b45e6f5..8897c3b6d54 100644 --- a/lisp/net/ldap.el +++ b/lisp/net/ldap.el @@ -710,7 +710,7 @@ an alist of attribute/value pairs." ;; otherwise `ldap-decode-attribute' would throw a much less ;; comprehensible error later. (cond ((not withdn)) - ((looking-at "^dn[=:\t ]+\\(.*\\)$") + ((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)))))