diff options
author | Jeremy Allison <jra@samba.org> | 2013-09-03 12:20:52 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2013-09-06 10:54:03 +0200 |
commit | f3d767ac0f6e3b07abf5672ae488ae57bc557677 (patch) | |
tree | 93cbe4482c5efb3ad2e161b1441fb5cb1be62e1b | |
parent | c968f9cb46b44a4d1b257a89381898d16086ae26 (diff) | |
download | samba-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.c | 25 |
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; } |