summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2017-01-31 15:19:00 +0100
committerKarolin Seeger <kseeger@samba.org>2017-02-28 09:38:24 +0100
commita605f6c5044a1277d5575b0a6df4280eb1feba16 (patch)
tree54f1bfbf5738878cae83eb7d4e7b64b20133bd9c
parent352661537b24abd9262c91d013049cff204b5eb2 (diff)
downloadsamba-a605f6c5044a1277d5575b0a6df4280eb1feba16.tar.gz
s3:winbindd: make sure cm_prepare_connection() only returns OK with a valid tree connect
If cm_get_ipc_credentials() returned anonymous creds and signing is required we were returning the result of cm_get_ipc_credentials() instead of the original error. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12588 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> (similar to commit cebcc2adc7e568d492466bb69f21ba2a9630a0d2)
-rw-r--r--source3/winbindd/winbindd_cm.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index 45e3fad7a4d..801be11dfad 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -995,6 +995,8 @@ static NTSTATUS cm_prepare_connection(struct winbindd_domain *domain,
struct named_mutex *mutex;
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+ NTSTATUS tmp_status;
+ NTSTATUS tcon_status = NT_STATUS_NETWORK_NAME_DELETED;
enum smb_signing_setting smb_sign_client_connections = lp_client_ipc_signing();
@@ -1186,8 +1188,10 @@ static NTSTATUS cm_prepare_connection(struct winbindd_domain *domain,
goto done;
ipc_fallback:
- result = cm_get_ipc_credentials(talloc_tos(), &creds);
- if (!NT_STATUS_IS_OK(result)) {
+ TALLOC_FREE(creds);
+ tmp_status = cm_get_ipc_credentials(talloc_tos(), &creds);
+ if (!NT_STATUS_IS_OK(tmp_status)) {
+ result = tmp_status;
goto done;
}
@@ -1274,11 +1278,11 @@ static NTSTATUS cm_prepare_connection(struct winbindd_domain *domain,
}
result = cli_tree_connect(*cli, "IPC$", "IPC", "", 0);
-
if (!NT_STATUS_IS_OK(result)) {
DEBUG(1,("failed tcon_X with %s\n", nt_errstr(result)));
goto done;
}
+ tcon_status = result;
/* cache the server name for later connections */
@@ -1297,6 +1301,10 @@ static NTSTATUS cm_prepare_connection(struct winbindd_domain *domain,
done:
TALLOC_FREE(mutex);
+ if (NT_STATUS_IS_OK(result)) {
+ result = tcon_status;
+ }
+
if (!NT_STATUS_IS_OK(result)) {
winbind_add_failed_connection_entry(domain, controller, result);
if ((*cli) != NULL) {