diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2013-10-28 11:57:01 +0100 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2013-10-28 13:17:38 +0100 |
commit | 2b3eb11befb59add03be8134173563aba3571377 (patch) | |
tree | d6fe4f844dbd479d1ba98a9e98f9fb4685a98e91 /libcli/cldap | |
parent | 35110a62d78836376d851242cb6b0aeba8daf735 (diff) | |
download | samba-2b3eb11befb59add03be8134173563aba3571377.tar.gz samba-2b3eb11befb59add03be8134173563aba3571377.tar.bz2 samba-2b3eb11befb59add03be8134173563aba3571377.zip |
[WIP] Add tcp ldap netlogon torturenetlogon-2
Diffstat (limited to 'libcli/cldap')
-rw-r--r-- | libcli/cldap/cldap.c | 64 | ||||
-rw-r--r-- | libcli/cldap/cldap.h | 2 |
2 files changed, 66 insertions, 0 deletions
diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c index 24ce39fefb..809fa2352b 100644 --- a/libcli/cldap/cldap.c +++ b/libcli/cldap/cldap.c @@ -882,6 +882,70 @@ struct cldap_netlogon_state { struct cldap_search search; }; +char *cldap_netlogon_create_filter(TALLOC_CTX *mem_ctx, + const struct cldap_netlogon *io) +{ + char *filter; + + filter = talloc_asprintf(mem_ctx, "(&(NtVer=%s)", + ldap_encode_ndr_uint32(mem_ctx, io->in.version)); + if (filter == NULL) + return NULL; + + if (io->in.user) { + filter = talloc_asprintf_append_buffer(filter, "(User=%s)", io->in.user); + if (filter == NULL) { + return NULL; + } + } + if (io->in.host) { + filter = talloc_asprintf_append_buffer(filter, "(Host=%s)", io->in.host); + if (filter == NULL) { + return NULL; + } + } + if (io->in.realm) { + filter = talloc_asprintf_append_buffer(filter, "(DnsDomain=%s)", io->in.realm); + if (filter == NULL) { + return NULL; + } + } + if (io->in.acct_control != -1) { + filter = talloc_asprintf_append_buffer(filter, "(AAC=%s)", + ldap_encode_ndr_uint32(mem_ctx, io->in.acct_control)); + if (filter == NULL) { + return NULL; + } + } + if (io->in.domain_sid) { + struct dom_sid *sid = dom_sid_parse_talloc(mem_ctx, io->in.domain_sid); + if (filter == NULL) { + return NULL; + } + filter = talloc_asprintf_append_buffer(filter, "(domainSid=%s)", + ldap_encode_ndr_dom_sid(mem_ctx, sid)); + if (filter == NULL) { + return NULL; + } + } + if (io->in.domain_guid) { + struct GUID guid; + NTSTATUS status; + status = GUID_from_string(io->in.domain_guid, &guid); + if (filter == NULL) { + return NULL; + } + filter = talloc_asprintf_append_buffer(filter, "(DomainGuid=%s)", + ldap_encode_ndr_GUID(mem_ctx, &guid)); + if (filter == NULL) { + return NULL; + } + } + filter = talloc_asprintf_append_buffer(filter, ")"); + + return filter; +} + static void cldap_netlogon_state_done(struct tevent_req *subreq); /* queue a cldap netlogon for send diff --git a/libcli/cldap/cldap.h b/libcli/cldap/cldap.h index 0bc9454f80..cd76fee60f 100644 --- a/libcli/cldap/cldap.h +++ b/libcli/cldap/cldap.h @@ -123,6 +123,8 @@ NTSTATUS cldap_netlogon_recv(struct tevent_req *req, NTSTATUS cldap_netlogon(struct cldap_socket *cldap, TALLOC_CTX *mem_ctx, struct cldap_netlogon *io); +char *cldap_netlogon_create_filter(TALLOC_CTX *mem_ctx, + const struct cldap_netlogon *io); NTSTATUS cldap_netlogon_reply(struct cldap_socket *cldap, uint32_t message_id, |