From 49304e965f87d00b7ba5d66fe929611d3ad2ebef Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 11 May 2005 05:59:46 +0000 Subject: r6726: support binary search elements in ldap_decode() (This used to be commit 2b36f1dfdd6cf3ab89f63b541ae4cd905fb03c8d) --- source4/libcli/ldap/ldap.c | 48 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) (limited to 'source4/libcli/ldap') diff --git a/source4/libcli/ldap/ldap.c b/source4/libcli/ldap/ldap.c index 37c3266b97..1a4f323ebf 100644 --- a/source4/libcli/ldap/ldap.c +++ b/source4/libcli/ldap/ldap.c @@ -140,6 +140,39 @@ static struct ldap_val ldap_binary_decode(TALLOC_CTX *mem_ctx, const char *str) } +/* + encode a blob as a RFC2254 binary string, escaping any + non-printable or '\' characters +*/ +static const char *ldap_binary_encode(TALLOC_CTX *mem_ctx, DATA_BLOB blob) +{ + int i; + char *ret; + int len = blob.length; + for (i=0;i ::= */ @@ -765,7 +798,7 @@ static BOOL ldap_decode_filter(TALLOC_CTX *mem_ctx, struct asn1_data *data, } asn1_end_tag(data); - filter = talloc_asprintf(mem_ctx, "%s)", filter); + filter = talloc_asprintf_append(filter, ")"); break; } case 1: { @@ -790,21 +823,24 @@ static BOOL ldap_decode_filter(TALLOC_CTX *mem_ctx, struct asn1_data *data, asn1_end_tag(data); - filter = talloc_asprintf(mem_ctx, "%s)", filter); + filter = talloc_asprintf_append(filter, ")"); break; } case 3: { /* equalityMatch */ - const char *attrib, *value; + const char *attrib; + DATA_BLOB value; if (tag_desc != 0xa0) /* context compound */ return False; asn1_start_tag(data, ASN1_CONTEXT(3)); asn1_read_OctetString_talloc(mem_ctx, data, &attrib); - asn1_read_OctetString_talloc(mem_ctx, data, &value); + asn1_read_OctetString(data, &value); asn1_end_tag(data); - if ((data->has_error) || (attrib == NULL) || (value == NULL)) + if ((data->has_error) || (attrib == NULL) || (value.data == NULL)) return False; - filter = talloc_asprintf(mem_ctx, "(%s=%s)", attrib, value); + filter = talloc_asprintf(mem_ctx, "(%s=%s)", + attrib, ldap_binary_encode(mem_ctx, value)); + data_blob_free(&value); break; } case 7: { -- cgit