summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2013-09-03 12:20:52 -0700
committerKarolin Seeger <kseeger@samba.org>2013-09-06 10:54:03 +0200
commitf3d767ac0f6e3b07abf5672ae488ae57bc557677 (patch)
tree93cbe4482c5efb3ad2e161b1441fb5cb1be62e1b
parentc968f9cb46b44a4d1b257a89381898d16086ae26 (diff)
downloadsamba-f3d767ac0f6e3b07abf5672ae488ae57bc557677.tar.gz
Move the retry logic when site_name is passed in a NULL or "" to the wrapper function.
Bug 5917 - Samba does not work on site with Read Only Domain Controller Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Richard Sharpe <rsharpe@samba.org> (cherry picked from commit 68e7b1c9446c7d1274b0fb85b59b90ac1a7f6041)
-rw-r--r--source3/libsmb/dsgetdcname.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c
index 2318dfbfc8d..43b3fd89807 100644
--- a/source3/libsmb/dsgetdcname.c
+++ b/source3/libsmb/dsgetdcname.c
@@ -1168,12 +1168,14 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
struct netr_DsRGetDCNameInfo **info)
{
NTSTATUS status;
- char *query_site = NULL;
+ const char *query_site = NULL;
+ char *ptr_to_free = NULL;
if ((site_name == NULL) || (site_name[0] == '\0')) {
- query_site = sitename_fetch(domain_name);
+ ptr_to_free = sitename_fetch(domain_name);
+ query_site = ptr_to_free;
} else {
- query_site = SMB_STRDUP(site_name);
+ query_site = site_name;
}
status = dsgetdcname_internal(mem_ctx,
@@ -1184,7 +1186,22 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
flags,
info);
- SAFE_FREE(query_site);
+ SAFE_FREE(ptr_to_free);
+
+ if (!NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND)) {
+ return status;
+ }
+
+ /* Should we try again with site_name == NULL ? */
+ if ((site_name == NULL) || (site_name[0] == '\0')) {
+ status = dsgetdcname_internal(mem_ctx,
+ msg_ctx,
+ domain_name,
+ domain_guid,
+ NULL,
+ flags,
+ info);
+ }
return status;
}