1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

libcli/cldap: make sure the local and remote address family matches

metze

Signed-off-by: Matthieu Patou <mat@matws.net>
This commit is contained in:
Stefan Metzmacher 2011-10-21 09:49:30 +02:00 committed by Matthieu Patou
parent e38d97e042
commit 66530e9149

View File

@ -312,6 +312,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) {
@ -319,11 +340,10 @@ NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx,
}
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) {