1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

s3:winbindd: make use of trust_pw_change() in _wbint_ChangeMachineAccount()

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Stefan Metzmacher 2013-09-16 18:37:34 +02:00
parent 57741dd4ba
commit 3c30e19c4a

View File

@ -616,48 +616,27 @@ again:
NTSTATUS _wbint_ChangeMachineAccount(struct pipes_struct *p,
struct wbint_ChangeMachineAccount *r)
{
struct messaging_context *msg_ctx = winbind_messaging_context();
struct winbindd_domain *domain;
int num_retries = 0;
NTSTATUS status;
struct rpc_pipe_client *netlogon_pipe;
TALLOC_CTX *tmp_ctx;
again:
domain = wb_child_domain();
if (domain == NULL) {
return NT_STATUS_REQUEST_NOT_ACCEPTED;
}
invalidate_cm_connection(&domain->conn);
{
status = cm_connect_netlogon(domain, &netlogon_pipe);
}
/* There is a race condition between fetching the trust account
password and the periodic machine password change. So it's
possible that the trust account password has been changed on us.
We are returned NT_STATUS_ACCESS_DENIED if this happens. */
#define MAX_RETRIES 3
if ((num_retries < MAX_RETRIES)
&& NT_STATUS_EQUAL(status, NT_STATUS_ACCESS_DENIED)) {
num_retries++;
goto again;
}
status = cm_connect_netlogon(domain, &netlogon_pipe);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(3, ("could not open handle to NETLOGON pipe\n"));
goto done;
}
tmp_ctx = talloc_new(p->mem_ctx);
status = trust_pw_find_change_and_store_it(netlogon_pipe,
tmp_ctx,
domain->name);
talloc_destroy(tmp_ctx);
status = trust_pw_change(domain->conn.netlogon_creds,
msg_ctx,
netlogon_pipe->binding_handle,
domain->name,
true); /* force */
/* Pass back result code - zero for success, other values for
specific failures. */