1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

r4755: the recent change in the definition of lp_passwordserver() breaks this

old code, so I'm just removing it, as it needs replacing anyway
(This used to be commit cae7748d675e35bfb89b81349624258bc76fac1a)
This commit is contained in:
Andrew Tridgell 2005-01-15 10:30:58 +00:00 committed by Gerald (Jerry) Carter
parent 4e4afdb946
commit da19be9a76
2 changed files with 0 additions and 204 deletions

View File

@ -1102,130 +1102,3 @@ BOOL get_pdc_ip(TALLOC_CTX *mem_ctx, const char *domain, struct ipv4_addr *ip)
return True;
}
/********************************************************
Get the IP address list of the domain controllers for
a domain.
*********************************************************/
BOOL get_dc_list(TALLOC_CTX *mem_ctx, const char *domain, struct ipv4_addr **ip_list, int *count, int *ordered)
{
*ordered = False;
/* If it's our domain then use the 'password server' parameter. */
if (strequal(domain, lp_workgroup())) {
const char *p;
const char *pserver = lp_passwordserver(); /* UNIX charset. */
fstring name;
int num_addresses = 0;
int local_count, i, j;
struct ipv4_addr *return_iplist = NULL;
struct ipv4_addr *auto_ip_list = NULL;
BOOL done_auto_lookup = False;
int auto_count = 0;
if (!*pserver)
return internal_resolve_name(mem_ctx,
domain, 0x1C, ip_list, count);
p = pserver;
/*
* if '*' appears in the "password server" list then add
* an auto lookup to the list of manually configured
* DC's. If any DC is listed by name, then the list should be
* considered to be ordered
*/
while (next_token(&p,name,LIST_SEP,sizeof(name))) {
if (strequal(name, "*")) {
if ( internal_resolve_name(mem_ctx, domain, 0x1C, &auto_ip_list, &auto_count) )
num_addresses += auto_count;
done_auto_lookup = True;
DEBUG(8,("Adding %d DC's from auto lookup\n", auto_count));
}
else
num_addresses++;
}
/* if we have no addresses and haven't done the auto lookup, then
just return the list of DC's */
if ( (num_addresses == 0) && !done_auto_lookup )
return internal_resolve_name(mem_ctx, domain, 0x1C, ip_list, count);
return_iplist = malloc_array_p(struct ipv4_addr, num_addresses);
if (return_iplist == NULL) {
DEBUG(3,("get_dc_list: malloc fail !\n"));
return False;
}
p = pserver;
local_count = 0;
/* fill in the return list now with real IP's */
while ( (local_count<num_addresses) && next_token(&p,name,LIST_SEP,sizeof(name)) ) {
struct ipv4_addr name_ip;
/* copy any addersses from the auto lookup */
if ( strequal(name, "*") ) {
for ( j=0; j<auto_count; j++ )
return_iplist[local_count++] = auto_ip_list[j];
continue;
}
/* explicit lookup; resolve_name() will handle names & IP addresses */
if ( resolve_name( mem_ctx, name, &name_ip, 0x20) ) {
return_iplist[local_count++] = name_ip;
*ordered = True;
}
}
SAFE_FREE(auto_ip_list);
/* need to remove duplicates in the list if we have
any explicit password servers */
if ( *ordered ) {
/* one loop to remove duplicates */
for ( i=0; i<local_count; i++ ) {
if ( is_zero_ip(return_iplist[i]) )
continue;
for ( j=i+1; j<local_count; j++ ) {
if ( ipv4_equal( return_iplist[i], return_iplist[j]) )
zero_ip(&return_iplist[j]);
}
}
/* one loop to clean up any holes we left */
/* first ip should never be a zero_ip() */
for (i = 0; i<local_count; ) {
if ( is_zero_ip(return_iplist[i]) ) {
if (i != local_count-1 )
memmove(&return_iplist[i], &return_iplist[i+1],
(local_count - i - 1)*sizeof(return_iplist[i]));
local_count--;
continue;
}
i++;
}
}
*ip_list = return_iplist;
*count = local_count;
DEBUG(8,("get_dc_list: return %d ip addresses\n", *count));
return (*count != 0);
}
return internal_resolve_name(mem_ctx, domain, 0x1C, ip_list, count);
}

View File

@ -25,80 +25,3 @@
#include "includes.h"
/*
find the DC for a domain using methods appropriate for a RPC domain
*/
BOOL rpc_find_dc(const char *domain, fstring srv_name, struct ipv4_addr *ip_out)
{
struct ipv4_addr *ip_list = NULL, dc_ip, exclude_ip;
int count, i;
BOOL list_ordered;
BOOL use_pdc_only;
zero_ip(&exclude_ip);
use_pdc_only = must_use_pdc(domain);
/* Lookup domain controller name */
if ( use_pdc_only && get_pdc_ip(domain, &dc_ip) ) {
DEBUG(10,("rpc_find_dc: Atempting to lookup PDC to avoid sam sync delays\n"));
if (name_status_find(domain, 0x1c, 0x20, dc_ip, srv_name)) {
goto done;
}
/* Didn't get name, remember not to talk to this DC. */
exclude_ip = dc_ip;
}
/* get a list of all domain controllers */
if (!get_dc_list( domain, &ip_list, &count, &list_ordered) ) {
DEBUG(3, ("Could not look up dc's for domain %s\n", domain));
return False;
}
/* Remove the entry we've already failed with (should be the PDC). */
if ( use_pdc_only ) {
for (i = 0; i < count; i++) {
if (ipv4_equal( exclude_ip, ip_list[i]))
zero_ip(&ip_list[i]);
}
}
/* Pick a nice close server, but only if the list was not ordered */
if (!list_ordered && (count > 1) ) {
qsort(ip_list, count, sizeof(struct ipv4_addr), QSORT_CAST ip_compare);
}
for (i = 0; i < count; i++) {
if (is_zero_ip(ip_list[i]))
continue;
if (name_status_find(domain, 0x1c, 0x20, ip_list[i], srv_name)) {
dc_ip = ip_list[i];
goto done;
}
}
SAFE_FREE(ip_list);
return False;
done:
/* We have the netbios name and IP address of a domain controller.
Ideally we should sent a SAMLOGON request to determine whether
the DC is alive and kicking. If we can catch a dead DC before
performing a smbcli_connect() we can avoid a 30-second timeout. */
DEBUG(3, ("rpc_find_dc: Returning DC %s (%s) for domain %s\n", srv_name,
inet_ntoa(dc_ip), domain));
*ip_out = dc_ip;
SAFE_FREE(ip_list);
return True;
}