/* drsuapi_DsExecuteKCC */ static WERROR dcesrv_drsuapi_DsExecuteKCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsExecuteKCC *r) { WERROR status; uint32_t timeout; status = drs_security_level_check(dce_call, "DsExecuteKCC", SECURITY_DOMAIN_CONTROLLER, NULL); if (!W_ERROR_IS_OK(status)) { return status; } if (r->in.req->ctr1.taskID != 0) { return WERR_INVALID_PARAM; } if (r->in.req->ctr1.flags & DRSUAPI_DS_EXECUTE_KCC_ASYNCHRONOUS_OPERATION) { timeout = IRPC_CALL_TIMEOUT; } else { /* * use Infinite time for timeout in case * the caller made a sync call */ timeout = IRPC_CALL_TIMEOUT_INF; } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSEXECUTEKCC, &ndr_table_drsuapi, "kccsrv", "DsExecuteKCC", timeout); DEBUG(0, ("Forwarded the call to execute the KCC\n")); return WERR_OK; }
/* drsuapi_DsReplicaSync */ static WERROR dcesrv_drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaSync *r) { WERROR status; uint32_t timeout; status = drs_security_level_check(dce_call, "DsReplicaSync", SECURITY_DOMAIN_CONTROLLER, NULL); if (!W_ERROR_IS_OK(status)) { return status; } if (r->in.level != 1) { DEBUG(0,("DsReplicaSync called with unsupported level %d\n", r->in.level)); return WERR_DS_DRA_INVALID_PARAMETER; } if (r->in.req->req1.options & DRSUAPI_DRS_ASYNC_OP) { timeout = IRPC_CALL_TIMEOUT; } else { /* * use Infinite time for timeout in case * the caller made a sync call */ timeout = IRPC_CALL_TIMEOUT_INF; } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICASYNC, &ndr_table_drsuapi, "dreplsrv", "DsReplicaSync", timeout); return WERR_OK; }
/* drsuapi_DsExecuteKCC */ static WERROR dcesrv_drsuapi_DsExecuteKCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsExecuteKCC *r) { WERROR status; status = drs_security_level_check(dce_call, "DsExecuteKCC"); if (!W_ERROR_IS_OK(status)) { return status; } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSEXECUTEKCC, &ndr_table_drsuapi, "kccsrv", "DsExecuteKCC"); return WERR_OK; }
/* drsuapi_DsReplicaSync */ static WERROR dcesrv_drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaSync *r) { WERROR status; status = drs_security_level_check(dce_call, "DsReplicaSync"); if (!W_ERROR_IS_OK(status)) { return status; } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICASYNC, &ndr_table_drsuapi, "dreplsrv", "DsReplicaSync"); return WERR_OK; }
/* drsuapi_DsReplicaModify */ static WERROR dcesrv_drsuapi_DsReplicaMod(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaMod *r) { WERROR status; status = drs_security_level_check(dce_call, "DsReplicaMod", SECURITY_DOMAIN_CONTROLLER, NULL); if (!W_ERROR_IS_OK(status)) { return status; } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICAMOD, &ndr_table_drsuapi, "dreplsrv", "DsReplicaMod", IRPC_CALL_TIMEOUT); return WERR_OK; }
/* drsuapi_DsReplicaGetInfo */ static WERROR dcesrv_drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaGetInfo *r) { enum security_user_level level; if (!lp_parm_bool(dce_call->conn->dce_ctx->lp_ctx, NULL, "drs", "disable_sec_check", false)) { level = security_session_user_level(dce_call->conn->auth_state.session_info); if (level < SECURITY_ADMINISTRATOR) { DEBUG(1,(__location__ ": Administrator access required for DsReplicaGetInfo\n")); security_token_debug(2, dce_call->conn->auth_state.session_info->security_token); return WERR_DS_DRA_ACCESS_DENIED; } } dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICAGETINFO, &ndr_table_drsuapi, "kccsrv", "DsReplicaGetInfo"); return WERR_OK; }