Subject: bug#58605: 29.0.50; Commit 2a2f5530fa2 breaks ldap-search-internal

From: Jens Lechtenboerger <[email-masked]>
Date: Tue, 18 Oct 2022 08:05:53 +0200

Hi there,

commit 2a2f5530fa230e2b994be5683e63763833bb6a0a breaks
ldap-search-internal for searches with empty results.

Consider this search with ldapsearch, returning an empty result:

ldapsearch -h ldap.pca.dfn.de -tt -x -b O=DFN-Verein,C=DE \
'(mail=[email-masked])' userCertificate
# extended LDIF
#
# LDAPv3
# base <O=DFN-Verein,C=DE> with scope subtree
# filter: (mail=[email-masked])
# requesting: userCertificate 
#

# search result
search: 2
result: 0 Success

# numResponses: 1

The problem is that ldap-search-internal interprets the 2 in line
"search: 2" as filename with a certificate, bound to variable value.
Thus, (insert-file-contents-literally value) results in an error:
File is missing: "Opening input file", "Datei oder Verzeichnis nicht
gefunden", "[currentdir]/2"

Execute that:
(let ((ldap-default-base "O=DFN-Verein,C=DE")
      (ldap-ldapsearch-args '("-x" "-tt" "-H ldaps://ldap.pca.dfn.de"))
      (search-plist '(host "" filter "mail=[email-masked]" attributes ("userCertificate") attrsonly nil withdn nil)))
  (ldap-search-internal search-plist))

Previously, that returned nil, after the mentioned commit it
produces the above error.

The added “?” should be removed there again:

@@ -699,7 +699,7 @@ ldap-search-internal
 	  (forward-line 1)
           (while (looking-at "^\\([A-Za-z][-A-Za-z0-9]*\
 \\|[0-9]+\\(?:\\.[0-9]+\\)*\\)\\(;[-A-Za-z0-9]+\\)*[=:\t ]+\
-\\(<[\t ]*file://\\)\\(.*\\)$")
+\\(<[\t ]*file://\\)?\\(.*\\)$")
 	    (setq name (match-string 1)
 		  value (match-string 4))
             ;; Need to handle file:///D:/... as generated by OpenLDAP

Thanks
Jens