From 36052d8117af010f59966b21b3c7dba40838ba92 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 21 Oct 2011 09:49:30 +0200 Subject: [PATCH 1/2] libcli/cldap: make sure the local and remote address family matches metze Signed-off-by: Matthieu Patou (cherry picked from commit 66530e91498cfa77a9d2e3a031f8a2e1c5ee6804) --- libcli/cldap/cldap.c | 30 +++++++++++++++++++++++++----- 1 files changed, 25 insertions(+), 5 deletions(-) diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c index f5585c2..4432921 100644 --- a/libcli/cldap/cldap.c +++ b/libcli/cldap/cldap.c @@ -313,6 +313,27 @@ NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx, struct tsocket_address *any = NULL; NTSTATUS status; int ret; + const char *fam = NULL; + + if (local_addr == NULL && remote_addr == NULL) { + return NT_STATUS_INVALID_PARAMETER_MIX; + } + + if (remote_addr) { + bool is_ipv4; + bool is_ipv6; + + is_ipv4 = tsocket_address_is_inet(remote_addr, "ipv4"); + is_ipv6 = tsocket_address_is_inet(remote_addr, "ipv6"); + + if (is_ipv4) { + fam = "ipv4"; + } else if (is_ipv6) { + fam = "ipv6"; + } else { + return NT_STATUS_INVALID_ADDRESS; + } + } c = talloc_zero(mem_ctx, struct cldap_socket); if (!c) { @@ -329,11 +350,10 @@ NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx, c->event.ctx = ev; if (!local_addr) { - /* we use ipv4 here instead of ip, as otherwise we end - up with a PF_INET6 socket, and sendto() for ipv4 - addresses will fail. That breaks cldap name - resolution for winbind to IPv4 hosts. */ - ret = tsocket_address_inet_from_strings(c, "ipv4", + /* + * Here we the address family of the remote address. + */ + ret = tsocket_address_inet_from_strings(c, fam, NULL, 0, &any); if (ret != 0) { -- 1.7.4.1 From e2df5abff23e30d0db2abe2946d8986b23238b3b Mon Sep 17 00:00:00 2001 From: Matthieu Patou Date: Fri, 21 Oct 2011 16:11:41 +0200 Subject: [PATCH 2/2] libcli-cldap: avoid the case local == remote == NULL (cherry picked from commit 4d2d33ee09941ddb211e21788c01d886730224c2) Signed-off-by: Stefan Metzmacher --- libcli/cldap/cldap.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c index 4432921..363ffbd 100644 --- a/libcli/cldap/cldap.c +++ b/libcli/cldap/cldap.c @@ -351,8 +351,12 @@ NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx, if (!local_addr) { /* - * Here we the address family of the remote address. + * Here we know the address family of the remote address. */ + if (fam == NULL) { + return NT_STATUS_INVALID_PARAMETER_MIX; + } + ret = tsocket_address_inet_from_strings(c, fam, NULL, 0, &any); -- 1.7.4.1