Skip to content

Commit

Permalink
Move the manipulation of site_name into the caller function dsgetdcna…
Browse files Browse the repository at this point in the history
…me().

Leave dsgetdcname_internal() only using const char *site_name.

Bug 5917 - Samba does not work on site with Read Only Domain Controller

Signed-off-by: Jeremy Allison <[email protected]>

Reviewed-by: Andrew Bartlett <[email protected]>
Reviewed-by: Richard Sharpe <[email protected]>
(cherry picked from commit 181c110)
  • Loading branch information
jrasamba authored and kseeger committed Sep 6, 2013
1 parent ac4ce44 commit c968f9c
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions source3/libsmb/dsgetdcname.c
Original file line number Diff line number Diff line change
Expand Up @@ -1095,15 +1095,14 @@ static NTSTATUS dsgetdcname_internal(TALLOC_CTX *mem_ctx,
{
NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
struct netr_DsRGetDCNameInfo *myinfo = NULL;
char *query_site = NULL;
bool first = true;
struct netr_DsRGetDCNameInfo *first_info = NULL;

DEBUG(10,("dsgetdcname_internal: domain_name: %s, "
"domain_guid: %s, site_name: %s, flags: 0x%08x\n",
domain_name,
domain_guid ? GUID_string(mem_ctx, domain_guid) : "(null)",
site_name, flags));
site_name ? site_name : "(null)", flags));

*info = NULL;

Expand All @@ -1112,18 +1111,12 @@ static NTSTATUS dsgetdcname_internal(TALLOC_CTX *mem_ctx,
return NT_STATUS_INVALID_PARAMETER;
}

if ((site_name == NULL) || (site_name[0] == '\0')) {
query_site = sitename_fetch(domain_name);
} else {
query_site = SMB_STRDUP(site_name);
}

if (flags & DS_FORCE_REDISCOVERY) {
goto rediscover;
}

status = dsgetdcname_cached(mem_ctx, msg_ctx, domain_name, domain_guid,
flags, query_site, &myinfo);
flags, site_name, &myinfo);
if (NT_STATUS_IS_OK(status)) {
goto done;
}
Expand All @@ -1134,12 +1127,10 @@ static NTSTATUS dsgetdcname_internal(TALLOC_CTX *mem_ctx,

rediscover:
status = dsgetdcname_rediscover(mem_ctx, msg_ctx, domain_name,
domain_guid, flags, query_site,
domain_guid, flags, site_name,
&myinfo);

done:
SAFE_FREE(query_site);

if (!NT_STATUS_IS_OK(status)) {
if (!first) {
*info = first_info;
Expand All @@ -1154,7 +1145,7 @@ static NTSTATUS dsgetdcname_internal(TALLOC_CTX *mem_ctx,
first = false;
first_info = myinfo;
/* TODO: may use the next_closest_site here */
query_site = SMB_STRDUP(myinfo->client_site_name);
site_name = myinfo->client_site_name;
goto rediscover;
}

Expand All @@ -1176,11 +1167,24 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
uint32_t flags,
struct netr_DsRGetDCNameInfo **info)
{
return dsgetdcname_internal(mem_ctx,
NTSTATUS status;
char *query_site = NULL;

if ((site_name == NULL) || (site_name[0] == '\0')) {
query_site = sitename_fetch(domain_name);
} else {
query_site = SMB_STRDUP(site_name);
}

status = dsgetdcname_internal(mem_ctx,
msg_ctx,
domain_name,
domain_guid,
site_name,
query_site,
flags,
info);

SAFE_FREE(query_site);

return status;
}

0 comments on commit c968f9c

Please sign in to comment.