From ac847898c8dbaeb16ca1f0fec24533441fc1a03c Mon Sep 17 00:00:00 2001 From: Garming Sam Date: Tue, 21 Mar 2017 11:56:39 +1300 Subject: [PATCH] winbindd_cm: Call dcip_check_name even when fetching from cache This is so that we can ensure that the DC is RWDC if required. Signed-off-by: Garming Sam Reviewed-by: Andrew Bartlett --- source3/winbindd/winbindd_cm.c | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c index 9f73b47a7aa..d024d842128 100644 --- a/source3/winbindd/winbindd_cm.c +++ b/source3/winbindd/winbindd_cm.c @@ -1836,39 +1836,39 @@ static NTSTATUS cm_open_connection(struct winbindd_domain *domain, before talking to it. It going down may have triggered the reconnection. */ - if ( saf_servername && NT_STATUS_IS_OK(check_negative_conn_cache( domain->name, saf_servername))) { + if (saf_servername && NT_STATUS_IS_OK(check_negative_conn_cache(domain->name, saf_servername))) { + struct sockaddr_storage ss; + char *dcname = NULL; + bool resolved = true; - DEBUG(10,("cm_open_connection: saf_servername is '%s' for domain %s\n", - saf_servername, domain->name )); + DEBUG(10, ("cm_open_connection: saf_servername is '%s' for domain %s\n", + saf_servername, domain->name)); /* convert an ip address to a name */ - if (is_ipaddress( saf_servername ) ) { - char *dcname = NULL; - struct sockaddr_storage ss; - + if (is_ipaddress(saf_servername)) { if (!interpret_string_addr(&ss, saf_servername, - AI_NUMERICHOST)) { + AI_NUMERICHOST)) { TALLOC_FREE(mem_ctx); return NT_STATUS_UNSUCCESSFUL; } - if (dcip_check_name(mem_ctx, domain, &ss, &dcname, request_flags)) { - domain->dcname = talloc_strdup(domain, - dcname); - if (domain->dcname == NULL) { - TALLOC_FREE(mem_ctx); - return NT_STATUS_NO_MEMORY; - } - } else { - winbind_add_failed_connection_entry( - domain, saf_servername, - NT_STATUS_UNSUCCESSFUL); - } } else { - domain->dcname = talloc_strdup(domain, saf_servername); + if (!resolve_name(saf_servername, &ss, 0x20, true)) { + resolved = false; + } + } + + if (resolved && dcip_check_name(mem_ctx, domain, &ss, &dcname, request_flags)) { + domain->dcname = talloc_strdup(domain, + dcname); if (domain->dcname == NULL) { TALLOC_FREE(mem_ctx); return NT_STATUS_NO_MEMORY; } + + domain->dcaddr = ss; + } else { + winbind_add_failed_connection_entry(domain, saf_servername, + NT_STATUS_UNSUCCESSFUL); } } @@ -1879,12 +1879,12 @@ static NTSTATUS cm_open_connection(struct winbindd_domain *domain, result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; - DEBUG(10,("cm_open_connection: dcname is '%s' for domain %s\n", - domain->dcname ? domain->dcname : "", domain->name )); + DEBUG(10, ("cm_open_connection: dcname is '%s' for domain %s\n", + domain->dcname ? domain->dcname : "", domain->name)); - if (domain->dcname != NULL - && NT_STATUS_IS_OK(check_negative_conn_cache( domain->name, domain->dcname)) - && (resolve_name(domain->dcname, &domain->dcaddr, 0x20, true))) + if (domain->dcname != NULL && + NT_STATUS_IS_OK(check_negative_conn_cache(domain->name, + domain->dcname))) { NTSTATUS status; -- 2.47.2