From d04cca005c049d52f802f676fba7868ba89e9399 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 2 Oct 2008 11:28:13 +0200 Subject: [PATCH] s3:drsuapi: add a simple DsRemoveDSServer() implementation metze --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 43 ++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 991b39984b7..a9c7eb794a6 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -688,7 +688,48 @@ static WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_cal static WERROR dcesrv_drsuapi_DsRemoveDSServer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsRemoveDSServer *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct drsuapi_bind_state *b_state; + struct dcesrv_handle *h; + struct ldb_dn *ntds_dn; + int ret; + bool ok; + + ZERO_STRUCT(r->out.res); + r->out.level_out = 1; + + DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + b_state = h->data; + + switch (r->in.level) { + case 1: + ntds_dn = ldb_dn_new(mem_ctx, b_state->sam_ctx, r->in.req->req1.server_dn); + W_ERROR_HAVE_NO_MEMORY(ntds_dn); + + ok = ldb_dn_validate(ntds_dn); + if (!ok) { + return WERR_FOOBAR; + } + + /* TODO: it's likely that we need more checks here */ + + ok = ldb_dn_add_child_fmt(ntds_dn, "CN=NTDS Settings"); + if (!ok) { + return WERR_FOOBAR; + } + + if (r->in.req->req1.commit) { + ret = ldb_delete(b_state->sam_ctx, ntds_dn); + if (ret != LDB_SUCCESS) { + return WERR_FOOBAR; + } + } + + return WERR_OK; + default: + break; + } + + return WERR_FOOBAR; } -- 2.34.1