summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-05-16 11:17:57 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:16:47 -0500
commit9469051d5bcdd6a91b688d20bc91bb3cb2ba094d (patch)
tree315411dc7dffc1f35a6eccd08fd01e17d0f52951 /source4/libcli
parent1dbe7430c748d127302f36081653e4b8e35092e1 (diff)
downloadsamba-9469051d5bcdd6a91b688d20bc91bb3cb2ba094d.tar.gz
samba-9469051d5bcdd6a91b688d20bc91bb3cb2ba094d.tar.bz2
samba-9469051d5bcdd6a91b688d20bc91bb3cb2ba094d.zip
r6817: - fixed empty ldap search elements in filters
- added support for guids in cldap netlogon searches. the cldap server now passes the LDAP-CLDAP torture test (This used to be commit eb7979d9def389942fa1c54693d2dfcb8828f544)
Diffstat (limited to 'source4/libcli')
-rw-r--r--source4/libcli/ldap/ldap.c2
-rw-r--r--source4/libcli/ldap/ldap.h2
-rw-r--r--source4/libcli/ldap/ldap_ndr.c16
3 files changed, 19 insertions, 1 deletions
diff --git a/source4/libcli/ldap/ldap.c b/source4/libcli/ldap/ldap.c
index cc7f1a10bc..0c6a466f27 100644
--- a/source4/libcli/ldap/ldap.c
+++ b/source4/libcli/ldap/ldap.c
@@ -110,7 +110,7 @@ static struct ldap_parse_tree *ldap_parse_filter(TALLOC_CTX *mem_ctx,
decode a RFC2254 binary string representation of a buffer.
Used in LDAP filters.
*/
-static struct ldap_val ldap_binary_decode(TALLOC_CTX *mem_ctx, const char *str)
+struct ldap_val ldap_binary_decode(TALLOC_CTX *mem_ctx, const char *str)
{
int i, j;
struct ldap_val ret;
diff --git a/source4/libcli/ldap/ldap.h b/source4/libcli/ldap/ldap.h
index 8d4294cf76..54a96d9672 100644
--- a/source4/libcli/ldap/ldap.h
+++ b/source4/libcli/ldap/ldap.h
@@ -326,6 +326,7 @@ BOOL ldap_parse_basic_url(TALLOC_CTX *mem_ctx, const char *url,
struct ldap_parse_tree *ldap_parse_filter_string(TALLOC_CTX *mem_ctx,
const char *s);
const char *ldap_binary_encode(TALLOC_CTX *mem_ctx, DATA_BLOB blob);
+struct ldap_val ldap_binary_decode(TALLOC_CTX *mem_ctx, const char *str);
/* The following definitions come from libcli/ldap/ldap_client.c */
@@ -384,5 +385,6 @@ struct ldap_message *ldap_ldif2msg(TALLOC_CTX *mem_ctx, const char *s);
const char *ldap_encode_ndr_uint32(TALLOC_CTX *mem_ctx, uint32_t value);
const char *ldap_encode_ndr_dom_sid(TALLOC_CTX *mem_ctx, struct dom_sid *sid);
const char *ldap_encode_ndr_GUID(TALLOC_CTX *mem_ctx, struct GUID *guid);
+NTSTATUS ldap_decode_ndr_GUID(TALLOC_CTX *mem_ctx, struct ldap_val val, struct GUID *guid);
#endif
diff --git a/source4/libcli/ldap/ldap_ndr.c b/source4/libcli/ldap/ldap_ndr.c
index 45d9b2729e..2db85d8f09 100644
--- a/source4/libcli/ldap/ldap_ndr.c
+++ b/source4/libcli/ldap/ldap_ndr.c
@@ -74,3 +74,19 @@ const char *ldap_encode_ndr_GUID(TALLOC_CTX *mem_ctx, struct GUID *guid)
data_blob_free(&blob);
return ret;
}
+
+/*
+ decode a NDR GUID from a ldap filter element
+*/
+NTSTATUS ldap_decode_ndr_GUID(TALLOC_CTX *mem_ctx, struct ldap_val val, struct GUID *guid)
+{
+ DATA_BLOB blob;
+ NTSTATUS status;
+
+ blob.data = val.data;
+ blob.length = val.length;
+ status = ndr_pull_struct_blob(&blob, mem_ctx, guid,
+ (ndr_pull_flags_fn_t)ndr_pull_GUID);
+ talloc_free(val.data);
+ return status;
+}