From 68e7b1c9446c7d1274b0fb85b59b90ac1a7f6041 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2013 12:20:52 -0700 Subject: 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 Reviewed-by: Andrew Bartlett Reviewed-by: Richard Sharpe --- source3/libsmb/dsgetdcname.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'source3/libsmb') diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c index cad212827d..bdaa250aaf 100644 --- a/source3/libsmb/dsgetdcname.c +++ b/source3/libsmb/dsgetdcname.c @@ -1179,12 +1179,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, @@ -1195,7 +1197,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; } -- cgit