1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-02 00:23:50 +03:00

Remove pstrings from namequery.c.

Jeremy.
This commit is contained in:
Jeremy Allison
2007-11-27 23:10:20 -08:00
parent 9755c53114
commit 71ccd0c42e

View File

@@ -1421,7 +1421,7 @@ NTSTATUS internal_resolve_name(const char *name,
int *return_count, int *return_count,
const char *resolve_order) const char *resolve_order)
{ {
pstring name_resolve_list; const char *name_resolve_list;
fstring tok; fstring tok;
const char *ptr; const char *ptr;
NTSTATUS status = NT_STATUS_UNSUCCESSFUL; NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
@@ -1475,9 +1475,9 @@ NTSTATUS internal_resolve_name(const char *name,
} }
if (!resolve_order) { if (!resolve_order) {
pstrcpy(name_resolve_list, lp_name_resolve_order()); name_resolve_list = lp_name_resolve_order();
} else { } else {
pstrcpy(name_resolve_list, resolve_order); name_resolve_list = resolve_order;
} }
if (!name_resolve_list[0]) { if (!name_resolve_list[0]) {
@@ -1732,20 +1732,25 @@ static NTSTATUS get_dc_list(const char *domain,
enum dc_lookup_type lookup_type, enum dc_lookup_type lookup_type,
bool *ordered) bool *ordered)
{ {
fstring resolve_order; char *resolve_order = NULL;
char *saf_servername; char *saf_servername = NULL;
pstring pserver; char *pserver = NULL;
const char *p; const char *p;
char *port_str; char *port_str = NULL;
int port; int port;
fstring name; fstring name;
int num_addresses = 0; int num_addresses = 0;
int local_count, i, j; int local_count, i, j;
struct ip_service *return_iplist = NULL; struct ip_service *return_iplist = NULL;
struct ip_service *auto_ip_list = NULL; struct ip_service *auto_ip_list = NULL;
bool done_auto_lookup = False; bool done_auto_lookup = false;
int auto_count = 0; int auto_count = 0;
NTSTATUS status; NTSTATUS status;
TALLOC_CTX *ctx = talloc_init("get_dc_list");
if (!ctx) {
return NT_STATUS_NO_MEMORY;
}
*ordered = False; *ordered = False;
@@ -1755,23 +1760,31 @@ static NTSTATUS get_dc_list(const char *domain,
are disabled and ads_only is True, then set the string to are disabled and ads_only is True, then set the string to
NULL. */ NULL. */
fstrcpy(resolve_order, lp_name_resolve_order()); resolve_order = talloc_strdup(ctx, lp_name_resolve_order());
if (!resolve_order) {
status = NT_STATUS_NO_MEMORY;
goto out;
}
strlower_m(resolve_order); strlower_m(resolve_order);
if (lookup_type == DC_ADS_ONLY) { if (lookup_type == DC_ADS_ONLY) {
if (strstr( resolve_order, "host")) { if (strstr( resolve_order, "host")) {
fstrcpy( resolve_order, "ads"); resolve_order = talloc_strdup(ctx, "ads");
/* DNS SRV lookups used by the ads resolver /* DNS SRV lookups used by the ads resolver
are already sorted by priority and weight */ are already sorted by priority and weight */
*ordered = true; *ordered = true;
} else { } else {
fstrcpy(resolve_order, "NULL"); resolve_order = talloc_strdup(ctx, "NULL");
} }
} else if (lookup_type == DC_KDC_ONLY) { } else if (lookup_type == DC_KDC_ONLY) {
/* DNS SRV lookups used by the ads/kdc resolver /* DNS SRV lookups used by the ads/kdc resolver
are already sorted by priority and weight */ are already sorted by priority and weight */
*ordered = true; *ordered = true;
fstrcpy(resolve_order, "kdc"); resolve_order = talloc_strdup(ctx, "kdc");
}
if (!resolve_order) {
status = NT_STATUS_NO_MEMORY;
goto out;
} }
/* fetch the server we have affinity for. Add the /* fetch the server we have affinity for. Add the
@@ -1780,22 +1793,27 @@ static NTSTATUS get_dc_list(const char *domain,
saf_servername = saf_fetch( domain); saf_servername = saf_fetch( domain);
if (strequal(domain, lp_workgroup()) || strequal(domain, lp_realm())) { if (strequal(domain, lp_workgroup()) || strequal(domain, lp_realm())) {
pstr_sprintf(pserver, "%s, %s", pserver = talloc_asprintf(NULL, "%s, %s",
saf_servername ? saf_servername : "", saf_servername ? saf_servername : "",
lp_passwordserver()); lp_passwordserver());
} else { } else {
pstr_sprintf(pserver, "%s, *", pserver = talloc_asprintf(NULL, "%s, *",
saf_servername ? saf_servername : ""); saf_servername ? saf_servername : "");
} }
SAFE_FREE( saf_servername ); SAFE_FREE(saf_servername);
if (!pserver) {
status = NT_STATUS_NO_MEMORY;
goto out;
}
/* if we are starting from scratch, just lookup DOMAIN<0x1c> */ /* if we are starting from scratch, just lookup DOMAIN<0x1c> */
if (!*pserver ) { if (!*pserver ) {
DEBUG(10,("get_dc_list: no preferred domain controllers.\n")); DEBUG(10,("get_dc_list: no preferred domain controllers.\n"));
return internal_resolve_name(domain, 0x1C, sitename, ip_list, status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
count, resolve_order); count, resolve_order);
goto out;
} }
DEBUG(3,("get_dc_list: preferred server list: \"%s\"\n", pserver )); DEBUG(3,("get_dc_list: preferred server list: \"%s\"\n", pserver ));
@@ -1831,18 +1849,19 @@ static NTSTATUS get_dc_list(const char *domain,
if ((num_addresses == 0)) { if ((num_addresses == 0)) {
if (done_auto_lookup) { if (done_auto_lookup) {
DEBUG(4,("get_dc_list: no servers found\n")); DEBUG(4,("get_dc_list: no servers found\n"));
SAFE_FREE(auto_ip_list); status = NT_STATUS_NO_LOGON_SERVERS;
return NT_STATUS_NO_LOGON_SERVERS; goto out;
} }
return internal_resolve_name(domain, 0x1C, sitename, ip_list, status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
count, resolve_order); count, resolve_order);
goto out;
} }
if ((return_iplist = SMB_MALLOC_ARRAY(struct ip_service, if ((return_iplist = SMB_MALLOC_ARRAY(struct ip_service,
num_addresses)) == NULL) { num_addresses)) == NULL) {
DEBUG(3,("get_dc_list: malloc fail !\n")); DEBUG(3,("get_dc_list: malloc fail !\n"));
SAFE_FREE(auto_ip_list); status = NT_STATUS_NO_MEMORY;
return NT_STATUS_NO_MEMORY; goto out;
} }
p = pserver; p = pserver;
@@ -1918,8 +1937,6 @@ static NTSTATUS get_dc_list(const char *domain,
} }
} }
SAFE_FREE(auto_ip_list);
/* need to remove duplicates in the list if we have any /* need to remove duplicates in the list if we have any
explicit password servers */ explicit password servers */
@@ -1947,7 +1964,13 @@ static NTSTATUS get_dc_list(const char *domain,
*ip_list = return_iplist; *ip_list = return_iplist;
*count = local_count; *count = local_count;
return ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS ); status = ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS );
out:
SAFE_FREE(auto_ip_list);
TALLOC_FREE(ctx);
return status;
} }
/********************************************************************* /*********************************************************************