mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
Protect all of the name resolution methods from returning null addrs. Ensure all returns go through remove_duplicate_addrs2().
This commit is contained in:
parent
50766a72f9
commit
1197360818
@ -1367,6 +1367,10 @@ static bool name_query_validator(struct packet_struct *p, void *private_data)
|
||||
putip((char *)&ip,&nmb->answers->rdata[2+i*6]);
|
||||
in_addr_to_sockaddr_storage(&addr, ip);
|
||||
|
||||
if (is_zero_addr(&addr)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (j=0; j<state->num_addrs; j++) {
|
||||
if (sockaddr_equal(
|
||||
(struct sockaddr *)(void *)&addr,
|
||||
@ -2374,6 +2378,10 @@ static NTSTATUS resolve_hosts(const char *name, int name_type,
|
||||
ZERO_STRUCT(ss);
|
||||
memcpy(&ss, res->ai_addr, res->ai_addrlen);
|
||||
|
||||
if (is_zero_addr(&ss)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
*return_count += 1;
|
||||
|
||||
*return_iplist = SMB_REALLOC_ARRAY(*return_iplist,
|
||||
@ -2565,6 +2573,10 @@ NTSTATUS internal_resolve_name(const char *name,
|
||||
SAFE_FREE(*return_iplist);
|
||||
return NT_STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
if (is_zero_addr(&(*return_iplist)->ss)) {
|
||||
SAFE_FREE(*return_iplist);
|
||||
return NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
*return_count = 1;
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
@ -2572,6 +2584,8 @@ NTSTATUS internal_resolve_name(const char *name,
|
||||
/* Check name cache */
|
||||
|
||||
if (namecache_fetch(name, name_type, return_iplist, return_count)) {
|
||||
*return_count = remove_duplicate_addrs2(*return_iplist,
|
||||
*return_count );
|
||||
/* This could be a negative response */
|
||||
if (*return_count > 0) {
|
||||
return NT_STATUS_OK;
|
||||
@ -2679,10 +2693,7 @@ NTSTATUS internal_resolve_name(const char *name,
|
||||
controllers including the PDC in iplist[1..n]. Iterating over
|
||||
the iplist when the PDC is down will cause two sets of timeouts. */
|
||||
|
||||
if ( *return_count ) {
|
||||
*return_count = remove_duplicate_addrs2(*return_iplist,
|
||||
*return_count );
|
||||
}
|
||||
*return_count = remove_duplicate_addrs2(*return_iplist, *return_count );
|
||||
|
||||
/* Save in name cache */
|
||||
if ( DEBUGLEVEL >= 100 ) {
|
||||
@ -2698,7 +2709,9 @@ NTSTATUS internal_resolve_name(const char *name,
|
||||
}
|
||||
}
|
||||
|
||||
namecache_store(name, name_type, *return_count, *return_iplist);
|
||||
if (*return_count) {
|
||||
namecache_store(name, name_type, *return_count, *return_iplist);
|
||||
}
|
||||
|
||||
/* Display some debugging info */
|
||||
|
||||
@ -3163,10 +3176,7 @@ static NTSTATUS get_dc_list(const char *domain,
|
||||
/* need to remove duplicates in the list if we have any
|
||||
explicit password servers */
|
||||
|
||||
if (local_count) {
|
||||
local_count = remove_duplicate_addrs2(return_iplist,
|
||||
local_count );
|
||||
}
|
||||
local_count = remove_duplicate_addrs2(return_iplist, local_count );
|
||||
|
||||
/* For DC's we always prioritize IPv4 due to W2K3 not
|
||||
* supporting LDAP, KRB5 or CLDAP over IPv6. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user