mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
drs-fsmo: Improve handling of FSMO role takeover.
This needs to be more async, and give less scary errors. Andrew Bartlett Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
parent
6a1025551e
commit
316fd085ad
@ -108,9 +108,8 @@ NTSTATUS drepl_take_FSMO_role(struct irpc_message *msg,
|
|||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_us ||
|
if (is_us) {
|
||||||
(extended_op == DRSUAPI_EXOP_NONE)) {
|
DEBUG(5,("FSMO role check failed, we already own DN %s with %s\n",
|
||||||
DEBUG(0,("FSMO role check failed for DN %s and owner %s \n",
|
|
||||||
ldb_dn_get_linearized(fsmo_role_dn),
|
ldb_dn_get_linearized(fsmo_role_dn),
|
||||||
ldb_dn_get_linearized(role_owner_dn)));
|
ldb_dn_get_linearized(role_owner_dn)));
|
||||||
r->out.result = WERR_OK;
|
r->out.result = WERR_OK;
|
||||||
|
@ -1377,9 +1377,18 @@ static int rootdse_become_master(struct ldb_module *module,
|
|||||||
fsmo->ldb = ldb;
|
fsmo->ldb = ldb;
|
||||||
fsmo->req = req;
|
fsmo->req = req;
|
||||||
|
|
||||||
/* we send the call asynchronously, as the ldap client is
|
/*
|
||||||
|
* we send the call asynchronously, as the ldap client is
|
||||||
* expecting to get an error back if the role transfer fails
|
* expecting to get an error back if the role transfer fails
|
||||||
|
*
|
||||||
|
* We need more than the default 10 seconds IRPC allows, so
|
||||||
|
* set a longer timeout (default ldb timeout is 300 seconds).
|
||||||
|
* We send an async reply when we are done.
|
||||||
|
*
|
||||||
|
* We are the first module, so don't bother working out how
|
||||||
|
* long we have spent so far.
|
||||||
*/
|
*/
|
||||||
|
dcerpc_binding_handle_set_timeout(irpc_handle, req->timeout);
|
||||||
|
|
||||||
treq = dcerpc_drepl_takeFSMORole_send(req, ldb_get_event_context(ldb), irpc_handle, role);
|
treq = dcerpc_drepl_takeFSMORole_send(req, ldb_get_event_context(ldb), irpc_handle, role);
|
||||||
if (treq == NULL) {
|
if (treq == NULL) {
|
||||||
|
@ -2022,7 +2022,8 @@ allowed:
|
|||||||
|
|
||||||
werr = drsuapi_UpdateRefs(b_state, mem_ctx, &ureq);
|
werr = drsuapi_UpdateRefs(b_state, mem_ctx, &ureq);
|
||||||
if (!W_ERROR_IS_OK(werr)) {
|
if (!W_ERROR_IS_OK(werr)) {
|
||||||
DEBUG(0,(__location__ ": Failed UpdateRefs in DsGetNCChanges - %s\n",
|
DEBUG(0,(__location__ ": Failed UpdateRefs on %s for %s in DsGetNCChanges - %s\n",
|
||||||
|
drs_ObjectIdentifier_to_string(mem_ctx, ncRoot), ureq.dest_dsa_dns_name,
|
||||||
win_errstr(werr)));
|
win_errstr(werr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user