From 3dd56175abf1a4580cc4d506f84ecc17e867c21e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sun, 10 Oct 2004 01:35:33 +0000 Subject: r2889: add DRSUAPI server - with DsBind and DsUnbind implmented :-) the RPC-DRSUAPI test works metze (This used to be commit 536af87ef12024615728ce0060b557f6f504e33f) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 323 ++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 source4/rpc_server/drsuapi/dcesrv_drsuapi.c (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c new file mode 100644 index 0000000000..d909209211 --- /dev/null +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -0,0 +1,323 @@ +/* + Unix SMB/CIFS implementation. + + endpoint server for the drsuapi pipe + + Copyright (C) Stefan Metzmacher 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "rpc_server/common/common.h" +#include "rpc_server/drsuapi/dcesrv_drsuapi.h" + +/* + destroy a general handle. +*/ +static void drsuapi_handle_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h) +{ + talloc_free(h->data); +} + +/* + drsuapi_DsBind +*/ +static NTSTATUS drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsBind *r) +{ + struct drsuapi_bind_state *b_state; + struct dcesrv_handle *handle; + + r->out.info = NULL; + ZERO_STRUCTP(r->out.bind_handle); + + b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state); + if (!b_state) { + return NT_STATUS_NO_MEMORY; + } + + /* TODO: fill b_state here */ + + handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE); + if (!handle) { + talloc_free(b_state); + return NT_STATUS_NO_MEMORY; + } + + handle->data = b_state; + handle->destroy = drsuapi_handle_destroy; + + *r->out.bind_handle = handle->wire_handle; + + return NT_STATUS_OK; +} + + +/* + drsuapi_DsUnbind +*/ +static NTSTATUS drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsUnbind *r) +{ + struct dcesrv_handle *h; + + *r->out.bind_handle = *r->in.bind_handle; + + DCESRV_PULL_HANDLE(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + + /* this causes the callback drsuapi_handle_destroy() to be called by + the handle destroy code which destroys the state associated + with the handle */ + dcesrv_handle_destroy(dce_call->conn, h); + + ZERO_STRUCTP(r->out.bind_handle); + + return NT_STATUS_OK; +} + + +/* + DRSUAPI_REPLICA_SYNC +*/ +static NTSTATUS DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REPLICA_SYNC *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_NC_CHANGES +*/ +static NTSTATUS DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_NC_CHANGES *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_UPDATE_REFS +*/ +static NTSTATUS DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_UPDATE_REFS *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REPLICA_ADD +*/ +static NTSTATUS DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REPLICA_ADD *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REPLICA_DEL +*/ +static NTSTATUS DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REPLICA_DEL *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REPLICA_MODIFY +*/ +static NTSTATUS DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REPLICA_MODIFY *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_VERIFY_NAMES +*/ +static NTSTATUS DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_VERIFY_NAMES *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_MEMBERSHIPS +*/ +static NTSTATUS DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_MEMBERSHIPS *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_INTER_DOMAIN_MOVE +*/ +static NTSTATUS DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_INTER_DOMAIN_MOVE *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_NT4_CHANGELOG +*/ +static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_NT4_CHANGELOG *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_CRACKNAMES +*/ +static NTSTATUS DRSUAPI_CRACKNAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_CRACKNAMES *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_WRITE_SPN +*/ +static NTSTATUS DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_WRITE_SPN *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REMOVE_DS_SERVER +*/ +static NTSTATUS DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REMOVE_DS_SERVER *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REMOVE_DS_DOMAIN +*/ +static NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REMOVE_DS_DOMAIN *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_DOMAIN_CONTROLLER_INFO +*/ +static NTSTATUS DRSUAPI_DOMAIN_CONTROLLER_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_DOMAIN_CONTROLLER_INFO *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_ADD_ENTRY +*/ +static NTSTATUS DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_ADD_ENTRY *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_EXECUTE_KCC +*/ +static NTSTATUS DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_EXECUTE_KCC *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_REPL_INFO +*/ +static NTSTATUS DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_REPL_INFO *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_ADD_SID_HISTORY +*/ +static NTSTATUS DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_ADD_SID_HISTORY *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_MEMBERSHIPS2 +*/ +static NTSTATUS DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_MEMBERSHIPS2 *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_REPLICA_VERIFY_OBJECTS +*/ +static NTSTATUS DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_GET_OBJECT_EXISTENCE +*/ +static NTSTATUS DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_GET_OBJECT_EXISTENCE *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* + DRSUAPI_QUERY_SITES_BY_COST +*/ +static NTSTATUS DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct DRSUAPI_QUERY_SITES_BY_COST *r) +{ + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +} + + +/* include the generated boilerplate */ +#include "librpc/gen_ndr/ndr_drsuapi_s.c" -- cgit From 78e29c0491a36285ed1c09a684a9fc516aec4beb Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 13 Oct 2004 14:25:44 +0000 Subject: r2952: add idl and torture test for DsCrackNames (I need to find out what the fields mean but it works) metze (This used to be commit eff51fc623f2e7b57e7e53eb81760684815db2f4) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index d909209211..9d1e5968a2 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -190,10 +190,10 @@ static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TA /* - DRSUAPI_CRACKNAMES + drsuapi_DsCrackNames */ -static NTSTATUS DRSUAPI_CRACKNAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_CRACKNAMES *r) +static NTSTATUS drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsCrackNames *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From b5fde9d2df707638f0244af925fa4e85be395eef Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 13 Oct 2004 15:06:43 +0000 Subject: r2954: add server cracknames code: - we currently only do it for our REALM metze (This used to be commit e2df8c4285d3430085594a3a3b5534c514acd1f9) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 42 ++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 9d1e5968a2..06fa1bba95 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -195,7 +195,47 @@ static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TA static NTSTATUS drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsCrackNames *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *h; + + r->out.level = r->in.level; + ZERO_STRUCT(r->out.out); + + DCESRV_PULL_HANDLE(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + + switch (r->in.level) { + case 1: { + int i; + + r->out.out.info1 = talloc_p(mem_ctx, struct drsuapi_DsCrackNamesOutInfo1); + NTSTATUS_TALLOC_CHECK(r->out.out.info1); + + r->out.out.info1->names = talloc_array_p(mem_ctx, + struct drsuapi_DsCrackNamesOutInfo1Names, + r->in.in.info1.count); + NTSTATUS_TALLOC_CHECK(r->out.out.info1->names); + + r->out.out.info1->count = r->in.in.info1.count; + + for (i=0; i < r->out.out.info1->count; i++) { + const char *name; + r->out.out.info1->names[i].unknown1 = 2; + r->out.out.info1->names[i].name1 = NULL; + r->out.out.info1->names[i].name2 = NULL; + + /* TODO: fill crack the right names! */ + name = talloc_asprintf(mem_ctx, "%s/", lp_realm()); + if (strcmp(name, r->in.in.info1.names[i].str) != 0) { + continue; + } + r->out.out.info1->names[i].unknown1 = 0; + r->out.out.info1->names[i].name1 = talloc_asprintf(mem_ctx, "%s", lp_realm()); + r->out.out.info1->names[i].name2 = talloc_asprintf(mem_ctx, "%s\\", lp_workgroup()); + } + return NT_STATUS_OK; + } + } + + return NT_STATUS_INVALID_LEVEL; } -- cgit From 64344b88d17fa92275f564f972566c4e600e7501 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 14 Oct 2004 09:56:04 +0000 Subject: r2970: - give somefields names and typdef enums for the possible values - do more crackname tests in the torture test - move server code for cracknames to a different file metze (This used to be commit 18050ea6037b3c0c7cfe975eb9c872368b9e3328) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 50 ++--------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 06fa1bba95..503a54b6b3 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -190,54 +190,10 @@ static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TA /* - drsuapi_DsCrackNames + drsuapi_DsCrackNames => drsuapip_cracknames.c */ -static NTSTATUS drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct drsuapi_DsCrackNames *r) -{ - struct dcesrv_handle *h; - - r->out.level = r->in.level; - ZERO_STRUCT(r->out.out); - - DCESRV_PULL_HANDLE(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); - - switch (r->in.level) { - case 1: { - int i; - - r->out.out.info1 = talloc_p(mem_ctx, struct drsuapi_DsCrackNamesOutInfo1); - NTSTATUS_TALLOC_CHECK(r->out.out.info1); - - r->out.out.info1->names = talloc_array_p(mem_ctx, - struct drsuapi_DsCrackNamesOutInfo1Names, - r->in.in.info1.count); - NTSTATUS_TALLOC_CHECK(r->out.out.info1->names); - - r->out.out.info1->count = r->in.in.info1.count; - - for (i=0; i < r->out.out.info1->count; i++) { - const char *name; - r->out.out.info1->names[i].unknown1 = 2; - r->out.out.info1->names[i].name1 = NULL; - r->out.out.info1->names[i].name2 = NULL; - - /* TODO: fill crack the right names! */ - name = talloc_asprintf(mem_ctx, "%s/", lp_realm()); - if (strcmp(name, r->in.in.info1.names[i].str) != 0) { - continue; - } - r->out.out.info1->names[i].unknown1 = 0; - r->out.out.info1->names[i].name1 = talloc_asprintf(mem_ctx, "%s", lp_realm()); - r->out.out.info1->names[i].name2 = talloc_asprintf(mem_ctx, "%s\\", lp_workgroup()); - } - return NT_STATUS_OK; - } - } - - return NT_STATUS_INVALID_LEVEL; -} - +static NTSTATUS (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames; /* DRSUAPI_WRITE_SPN -- cgit From c88518cc0e68ce1cb66ecf94fc59b73deab5a278 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 14 Oct 2004 11:11:21 +0000 Subject: r2974: fix the build metze (This used to be commit 1bb71e7a8699bfd32d171a48c4c3b5f35faf3e51) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 503a54b6b3..6e169e0c5c 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -41,7 +41,7 @@ static NTSTATUS drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m struct drsuapi_bind_state *b_state; struct dcesrv_handle *handle; - r->out.info = NULL; + r->out.bind_info = NULL; ZERO_STRUCTP(r->out.bind_handle); b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state); -- cgit From f4e4989cb79dfe7fb2317ca8072f34b66895a696 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 15 Oct 2004 09:48:40 +0000 Subject: r2991: add drsuapi_DsGetDomainControllerInfo() idl and torture test metze (This used to be commit 98ca7640c59aa8694abde03f5661b8908cf088bb) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 6e169e0c5c..9b9f4df3fc 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -226,10 +226,10 @@ static NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TAL /* - DRSUAPI_DOMAIN_CONTROLLER_INFO + drsuapi_DsGetDomainControllerInfo */ -static NTSTATUS DRSUAPI_DOMAIN_CONTROLLER_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_DOMAIN_CONTROLLER_INFO *r) +static NTSTATUS drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetDomainControllerInfo *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 1890e6a6593d3ddb6bcbda8446e02169e97e9030 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 15 Oct 2004 11:08:14 +0000 Subject: r2992: drsuapi uses WERROR not NTSTATUS metze (This used to be commit 757f67c08b0b1309d8a0b900539111c7bc430b0e) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 62 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 32 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 9b9f4df3fc..42022dea01 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -35,7 +35,7 @@ static void drsuapi_handle_destroy(struct dcesrv_connection *conn, struct dcesrv /* drsuapi_DsBind */ -static NTSTATUS drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsBind *r) { struct drsuapi_bind_state *b_state; @@ -45,16 +45,14 @@ static NTSTATUS drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m ZERO_STRUCTP(r->out.bind_handle); b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state); - if (!b_state) { - return NT_STATUS_NO_MEMORY; - } + WERR_TALLOC_CHECK(b_state); /* TODO: fill b_state here */ handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE); if (!handle) { talloc_free(b_state); - return NT_STATUS_NO_MEMORY; + return WERR_NOMEM; } handle->data = b_state; @@ -62,21 +60,21 @@ static NTSTATUS drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m *r->out.bind_handle = handle->wire_handle; - return NT_STATUS_OK; + return WERR_OK; } /* drsuapi_DsUnbind */ -static NTSTATUS drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsUnbind *r) { struct dcesrv_handle *h; *r->out.bind_handle = *r->in.bind_handle; - DCESRV_PULL_HANDLE(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); /* this causes the callback drsuapi_handle_destroy() to be called by the handle destroy code which destroys the state associated @@ -85,14 +83,14 @@ static NTSTATUS drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX ZERO_STRUCTP(r->out.bind_handle); - return NT_STATUS_OK; + return WERR_OK; } /* DRSUAPI_REPLICA_SYNC */ -static NTSTATUS DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_SYNC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -102,7 +100,7 @@ static NTSTATUS DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_ /* DRSUAPI_GET_NC_CHANGES */ -static NTSTATUS DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_NC_CHANGES *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -112,7 +110,7 @@ static NTSTATUS DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLO /* DRSUAPI_UPDATE_REFS */ -static NTSTATUS DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_UPDATE_REFS *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -122,7 +120,7 @@ static NTSTATUS DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_C /* DRSUAPI_REPLICA_ADD */ -static NTSTATUS DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_ADD *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -132,7 +130,7 @@ static NTSTATUS DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_C /* DRSUAPI_REPLICA_DEL */ -static NTSTATUS DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_DEL *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -142,7 +140,7 @@ static NTSTATUS DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_C /* DRSUAPI_REPLICA_MODIFY */ -static NTSTATUS DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_MODIFY *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -152,7 +150,7 @@ static NTSTATUS DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLO /* DRSUAPI_VERIFY_NAMES */ -static NTSTATUS DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_VERIFY_NAMES *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -162,7 +160,7 @@ static NTSTATUS DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_ /* DRSUAPI_GET_MEMBERSHIPS */ -static NTSTATUS DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_MEMBERSHIPS *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -172,7 +170,7 @@ static NTSTATUS DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALL /* DRSUAPI_INTER_DOMAIN_MOVE */ -static NTSTATUS DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_INTER_DOMAIN_MOVE *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -182,7 +180,7 @@ static NTSTATUS DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TA /* DRSUAPI_GET_NT4_CHANGELOG */ -static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_NT4_CHANGELOG *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -192,13 +190,13 @@ static NTSTATUS DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TA /* drsuapi_DsCrackNames => drsuapip_cracknames.c */ -static NTSTATUS (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames; /* DRSUAPI_WRITE_SPN */ -static NTSTATUS DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_WRITE_SPN *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -208,7 +206,7 @@ static NTSTATUS DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX /* DRSUAPI_REMOVE_DS_SERVER */ -static NTSTATUS DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REMOVE_DS_SERVER *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -218,7 +216,7 @@ static NTSTATUS DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TAL /* DRSUAPI_REMOVE_DS_DOMAIN */ -static NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REMOVE_DS_DOMAIN *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -228,7 +226,7 @@ static NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TAL /* drsuapi_DsGetDomainControllerInfo */ -static NTSTATUS drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetDomainControllerInfo *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -238,7 +236,7 @@ static NTSTATUS drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_ /* DRSUAPI_ADD_ENTRY */ -static NTSTATUS DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_ADD_ENTRY *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -248,7 +246,7 @@ static NTSTATUS DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX /* DRSUAPI_EXECUTE_KCC */ -static NTSTATUS DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_EXECUTE_KCC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -258,7 +256,7 @@ static NTSTATUS DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_C /* DRSUAPI_GET_REPL_INFO */ -static NTSTATUS DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_REPL_INFO *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -268,7 +266,7 @@ static NTSTATUS DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC /* DRSUAPI_ADD_SID_HISTORY */ -static NTSTATUS DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_ADD_SID_HISTORY *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -278,7 +276,7 @@ static NTSTATUS DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALL /* DRSUAPI_GET_MEMBERSHIPS2 */ -static NTSTATUS DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_MEMBERSHIPS2 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -288,7 +286,7 @@ static NTSTATUS DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TAL /* DRSUAPI_REPLICA_VERIFY_OBJECTS */ -static NTSTATUS DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -298,7 +296,7 @@ static NTSTATUS DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_cal /* DRSUAPI_GET_OBJECT_EXISTENCE */ -static NTSTATUS DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_OBJECT_EXISTENCE *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -308,7 +306,7 @@ static NTSTATUS DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, /* DRSUAPI_QUERY_SITES_BY_COST */ -static NTSTATUS DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_QUERY_SITES_BY_COST *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); -- cgit From 90067934cd3195df80f8b1e614629d51fffcb38b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 1 Nov 2004 10:30:34 +0000 Subject: r3428: switched to using minimal includes for the auto-generated RPC code. The thing that finally convinced me that minimal includes was worth pursuing for rpc was a compiler (tcc) that failed to build Samba due to reaching internal limits of the size of include files. Also the fact that includes.h.gch was 16MB, which really seems excessive. This patch brings it back to 12M, which is still too large, but better. Note that this patch speeds up compile times for both the pch and non-pch case. This change also includes the addition iof a "depends()" option in our IDL files, allowing you to specify that one IDL file depends on another. This capability was needed for the auto-includes generation. (This used to be commit b8f5fa8ac8e8725f3d321004f0aedf4246fc6b49) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 42022dea01..56d0acc88c 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -21,6 +21,7 @@ */ #include "includes.h" +#include "librpc/gen_ndr/ndr_drsuapi.h" #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" -- cgit From c051779a0a34a9c40a5425fb1eb821983b8dc852 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 2 Nov 2004 07:42:47 +0000 Subject: r3468: split out dcerpc_server.h (This used to be commit 729e0026e4408f74f140375537d4fe48c1fc3242) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 56d0acc88c..468d608f4f 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -22,6 +22,7 @@ #include "includes.h" #include "librpc/gen_ndr/ndr_drsuapi.h" +#include "rpc_server/dcerpc_server.h" #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" -- cgit From 43f500244ba0995067b023854dbc448d05ad751f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 16 Nov 2004 10:56:51 +0000 Subject: r3784: do a samdb lookup for the DsCrackNames server metze (This used to be commit a2776eca83117131f8316ca222a2f385ffa5d7d5) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 468d608f4f..c758f70da7 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -50,6 +50,11 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem WERR_TALLOC_CHECK(b_state); /* TODO: fill b_state here */ + b_state->sam_ctx = samdb_connect(b_state); + if (!b_state->sam_ctx) { + talloc_free(b_state); + return WERR_FOOBAR; + } handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE); if (!handle) { -- cgit From 83d29e9bac43f643eb4ab11871425019f2ea9421 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 16 Nov 2004 14:43:28 +0000 Subject: r3789: - fix error handling - formating changes metze (This used to be commit 7bb3e3751b1193cd16e6ff8aa468b36c823c1cd5) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index c758f70da7..617bc02742 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -49,7 +49,6 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state); WERR_TALLOC_CHECK(b_state); - /* TODO: fill b_state here */ b_state->sam_ctx = samdb_connect(b_state); if (!b_state->sam_ctx) { talloc_free(b_state); -- cgit From 2f39a9fe621a0c80688fe06712bd5b0495ca7e65 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 23 Nov 2004 08:57:42 +0000 Subject: r3920: - it seem that we need to send a magic bind_guid in DsBind() to make DsWriteAccountSpn() work - add idl and torture test for DsWriteAccountSpn() metze (This used to be commit 625826ad9050c68407ae5e8abfee13699986303c) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 617bc02742..eb38a22f43 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -200,10 +200,10 @@ static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames; /* - DRSUAPI_WRITE_SPN + drsuapi_DsWriteAccountSpn */ -static WERROR DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_WRITE_SPN *r) +static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsWriteAccountSpn *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 114b43a167e8470666125ff0b2ac08c4b5c4f14d Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 29 Nov 2004 11:13:56 +0000 Subject: r3999: - reply with the same DsBindInfo blob as w2k3 in the server function - add idl for drsuapi_DsReplicaSync() not yet complete - just return WERR_OK for the drsuapi_DsReplicaSync() server function metze (This used to be commit e896925ac0b58bd48b5b9cc2d675682409d09ae1) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index eb38a22f43..f033c07ff7 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -42,6 +42,8 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem { struct drsuapi_bind_state *b_state; struct dcesrv_handle *handle; + struct drsuapi_DsBindInfo *bind_info; + const uint8_t bind_info_data[] = DRSUAPI_DS_BIND_INFO_RESPONSE_W2K3; r->out.bind_info = NULL; ZERO_STRUCTP(r->out.bind_handle); @@ -64,6 +66,14 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem handle->data = b_state; handle->destroy = drsuapi_handle_destroy; + bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfo); + WERR_TALLOC_CHECK(bind_info); + + bind_info->length = sizeof(bind_info_data); + bind_info->data = talloc_memdup(mem_ctx, bind_info_data, sizeof(bind_info_data)); + WERR_TALLOC_CHECK(bind_info->data); + + r->out.bind_info = bind_info; *r->out.bind_handle = handle->wire_handle; return WERR_OK; @@ -94,12 +104,15 @@ static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m /* - DRSUAPI_REPLICA_SYNC + drsuapi_DsReplicaSync */ -static WERROR DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_REPLICA_SYNC *r) +static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsReplicaSync *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + /* TODO: implment this call correct! + * for now we just say yes + */ + return WERR_OK; } -- cgit From 57314e0df30296291ef3b9698de44249fa1fc77e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 7 Dec 2004 12:20:28 +0000 Subject: r4087: - add idl and torture tests for drsuapi_DsReplicaGetInfo() (NOTE: that the drsuapi_DsReplicaObjMetaData2 struct is not corrently parsed yet and there're some unknown fields left in someother infotypes) metze (This used to be commit 4fd57d5e7cff085a8c003ea82f282e26dc1346d9) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index f033c07ff7..a8c48d6805 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -273,10 +273,10 @@ static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX /* - DRSUAPI_GET_REPL_INFO + drsuapi_DsReplicaGetInfo */ -static WERROR DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_GET_REPL_INFO *r) +static WERROR drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsReplicaGetInfo *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 75f02f9d4daf4a16b408ce145f841f11d4b0ca67 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 14 Dec 2004 07:18:58 +0000 Subject: r4203: the bind_info blob isn't a const. here's the idl to parse it, because we don't want the callers to manually de/encode this metze (This used to be commit 983f74c3651759991378b0d7b13b0952d77b3544) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index a8c48d6805..5539c9117f 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -42,8 +42,8 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem { struct drsuapi_bind_state *b_state; struct dcesrv_handle *handle; - struct drsuapi_DsBindInfo *bind_info; - const uint8_t bind_info_data[] = DRSUAPI_DS_BIND_INFO_RESPONSE_W2K3; + struct drsuapi_DsBindInfoCtr *bind_info; + struct GUID site_guid; r->out.bind_info = NULL; ZERO_STRUCTP(r->out.bind_handle); @@ -66,12 +66,16 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem handle->data = b_state; handle->destroy = drsuapi_handle_destroy; - bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfo); + bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfoCtr); WERR_TALLOC_CHECK(bind_info); - - bind_info->length = sizeof(bind_info_data); - bind_info->data = talloc_memdup(mem_ctx, bind_info_data, sizeof(bind_info_data)); - WERR_TALLOC_CHECK(bind_info->data); + + ZERO_STRUCT(site_guid); + + bind_info->length = 28; + bind_info->info.info28.supported_extensions = 0; + bind_info->info.info28.site_guid = site_guid; + bind_info->info.info28.u1 = 0; + bind_info->info.info28.repl_epoch = 0; r->out.bind_info = bind_info; *r->out.bind_handle = handle->wire_handle; @@ -109,8 +113,9 @@ static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaSync *r) { - /* TODO: implment this call correct! - * for now we just say yes + /* TODO: implement this call correct! + * for now we just say yes, + * because we have no output parameter */ return WERR_OK; } -- cgit From 577218b2aded7adb367f3f33bcc5560f3d4c0ec2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 10 Jan 2005 12:15:26 +0000 Subject: r4640: first stage in the server side support for multiple context_ids on one pipe this stage does the following: - simplifies the dcerpc_handle handling, and all the callers of it - split out the context_id depenent state into a linked list of established contexts - fixed some talloc handling in several rpc servers that i noticed while doing the above (This used to be commit fde042b3fc609c94e2c7eedcdd72ecdf489cf63b) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 5539c9117f..508a2dec5e 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -26,14 +26,6 @@ #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" -/* - destroy a general handle. -*/ -static void drsuapi_handle_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h) -{ - talloc_free(h->data); -} - /* drsuapi_DsBind */ @@ -57,14 +49,13 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem return WERR_FOOBAR; } - handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE); + handle = dcesrv_handle_new(dce_call->context, DRSUAPI_BIND_HANDLE); if (!handle) { talloc_free(b_state); return WERR_NOMEM; } - handle->data = b_state; - handle->destroy = drsuapi_handle_destroy; + handle->data = talloc_steal(handle, b_state); bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfoCtr); WERR_TALLOC_CHECK(bind_info); @@ -88,7 +79,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem drsuapi_DsUnbind */ static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct drsuapi_DsUnbind *r) + struct drsuapi_DsUnbind *r) { struct dcesrv_handle *h; @@ -96,10 +87,7 @@ static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); - /* this causes the callback drsuapi_handle_destroy() to be called by - the handle destroy code which destroys the state associated - with the handle */ - dcesrv_handle_destroy(dce_call->conn, h); + talloc_free(h); ZERO_STRUCTP(r->out.bind_handle); -- cgit From 759da3b915e2006d4c87b5ace47f399accd9ce91 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 27 Jan 2005 07:08:20 +0000 Subject: r5037: got rid of all of the TALLOC_DEPRECATED stuff. My apologies for the large commit. I thought this was worthwhile to get done for consistency. (This used to be commit ec32b22ed5ec224f6324f5e069d15e92e38e15c0) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 508a2dec5e..6a1ccb00d5 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -40,7 +40,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem r->out.bind_info = NULL; ZERO_STRUCTP(r->out.bind_handle); - b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state); + b_state = talloc(dce_call->conn, struct drsuapi_bind_state); WERR_TALLOC_CHECK(b_state); b_state->sam_ctx = samdb_connect(b_state); @@ -57,7 +57,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem handle->data = talloc_steal(handle, b_state); - bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfoCtr); + bind_info = talloc(mem_ctx, struct drsuapi_DsBindInfoCtr); WERR_TALLOC_CHECK(bind_info); ZERO_STRUCT(site_guid); -- cgit From 4b83366b6cf81a29fab0f9dac5e6074784c639a8 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 11 Mar 2005 12:15:50 +0000 Subject: r5742: - add torture test and idl for DsReplicaUpdateRefs() (the torture test currently only tests if the idl is correct) - add start for idl for DsGetNCChanges() (if someone didn't noticed the current ethereal trunk code can successful decrypt DCERPC and LDAP gsskrb5 encrypted blobs, when you provide a keytab and have compiled against heimdal :-) - add a view bitmaps and enum's for better debugging metze (This used to be commit cf7c1352ab2857b80256e02f70ab3fbd5177d596) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 6a1ccb00d5..13058296a5 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -110,20 +110,20 @@ static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_C /* - DRSUAPI_GET_NC_CHANGES + drsuapi_DsGetNCChanges */ -static WERROR DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_GET_NC_CHANGES *r) +static WERROR drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetNCChanges *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } /* - DRSUAPI_UPDATE_REFS + drsuapi_DsReplicaUpdateRefs */ -static WERROR DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_UPDATE_REFS *r) +static WERROR drsuapi_DsReplicaUpdateRefs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsReplicaUpdateRefs *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } @@ -246,10 +246,10 @@ static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_ca /* - DRSUAPI_ADD_ENTRY + drsuapi_DsAddEntry */ -static WERROR DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_ADD_ENTRY *r) +static WERROR drsuapi_DsAddEntry(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsAddEntry *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From f3bce652c8c33712ffbb6c0a731f61b05f9d4be0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 17 Sep 2005 01:11:50 +0000 Subject: r10286: This patch is ugly and disgusting, but for now it works better than the other ideas I have had. When I get a full list of things I want to do to a krb5_context I'll either add gsskrb5_ wrappers, or a way of speicfying the krb5 context per gssapi context. (I want to ensure that the only krb5_context variables created while executing Samba4 are via our wrapper). Andrew Bartlett (This used to be commit 8a22d46e70e9f863831aba0c9913d195f833d625) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 13058296a5..94a16d0a09 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -239,7 +239,7 @@ static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLO drsuapi_DsGetDomainControllerInfo */ static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct drsuapi_DsGetDomainControllerInfo *r) + struct drsuapi_DsGetDomainControllerInfo *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 1377cca5f4beb43cf67fcc65eed79f14178d6349 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 7 Oct 2005 11:31:45 +0000 Subject: r10810: This adds the hooks required to communicate the current user from the authenticated session down into LDB. This associates a session info structure with the open LDB, allowing a future ldb_ntacl module to allow/deny operations on that basis. Along the way, I cleaned up a few things, and added new helper functions to assist. In particular the LSA pipe uses simpler queries for some of the setup. In ldap_server, I have removed the 'ldasrv:hacked' module, which hasn't been worked on (other than making it continue to compile) since January, and I think the features of this module are being put into ldb anyway. I have also changed the partitions in ldap_server to be initialised after the connection, with the private pointer used to associate the ldb with the incoming session. Andrew Bartlett (This used to be commit fd7203789a2c0929eecea8125b57b833a67fed71) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 94a16d0a09..c8578a7cc1 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -25,6 +25,7 @@ #include "rpc_server/dcerpc_server.h" #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" +#include "auth/auth.h" /* drsuapi_DsBind @@ -43,7 +44,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem b_state = talloc(dce_call->conn, struct drsuapi_bind_state); WERR_TALLOC_CHECK(b_state); - b_state->sam_ctx = samdb_connect(b_state); + b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { talloc_free(b_state); return WERR_FOOBAR; -- cgit From db4b95827e4e6d13577513946bff4f956c849756 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 23 Oct 2005 22:20:42 +0000 Subject: r11270: Move the core CrackNames code from rpc_server/drsuapi to dsdb/samdb. I'm sure this will not be the final resting place, but it will do for now. Use the cracknames code in auth/ for creating a server_info given a principal name only (should avoid assumtions about spliting a user@realm principal). Andrew Bartlett (This used to be commit c9d5d8e45dd7b7c99b6cf35b087bc18012f31222) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 53 +++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index c8578a7cc1..a762b44878 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -201,10 +201,57 @@ static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALL /* - drsuapi_DsCrackNames => drsuapip_cracknames.c + drsuapi_DsCrackNames */ -static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames; +WERROR drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsCrackNames *r) +{ + WERROR status; + struct drsuapi_bind_state *b_state; + struct dcesrv_handle *h; + + r->out.level = r->in.level; + ZERO_STRUCT(r->out.ctr); + + DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + b_state = h->data; + + switch (r->in.level) { + case 1: { + struct drsuapi_DsNameCtr1 *ctr1; + struct drsuapi_DsNameInfo1 *names; + int count; + int i; + + ctr1 = talloc(mem_ctx, struct drsuapi_DsNameCtr1); + WERR_TALLOC_CHECK(ctr1); + + count = r->in.req.req1.count; + names = talloc_array(mem_ctx, struct drsuapi_DsNameInfo1, count); + WERR_TALLOC_CHECK(names); + + for (i=0; i < count; i++) { + status = DsCrackNameOneName(b_state->sam_ctx, mem_ctx, + r->in.req.req1.format_flags, + r->in.req.req1.format_offered, + r->in.req.req1.format_desired, + r->in.req.req1.names[i].str, + &names[i]); + if (!W_ERROR_IS_OK(status)) { + return status; + } + } + + ctr1->count = count; + ctr1->array = names; + r->out.ctr.ctr1 = ctr1; + + return WERR_OK; + } + } + + return WERR_UNKNOWN_LEVEL; +} /* drsuapi_DsWriteAccountSpn -- cgit From 2cd5ca7d25f12aa9198bf8c2deb6aea282f573ee Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Dec 2005 15:38:36 +0000 Subject: r12542: Move some more prototypes out to seperate headers (This used to be commit 0aca5fd5130d980d07398f3291d294202aefe3c2) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index a762b44878..68bac0f2ce 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -26,6 +26,7 @@ #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" #include "auth/auth.h" +#include "dsdb/samdb/samdb.h" /* drsuapi_DsBind -- cgit From d4de4c2d210d2e8c9b5aedf70695594809ad6a0b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 30 Dec 2005 13:16:54 +0000 Subject: r12608: Remove some unused #include lines. (This used to be commit 70e7449318aa0e9d2639c76730a7d1683b2f4981) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 68bac0f2ce..6bfcfb2017 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -25,7 +25,6 @@ #include "rpc_server/dcerpc_server.h" #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" -#include "auth/auth.h" #include "dsdb/samdb/samdb.h" /* -- cgit From 657325d684b838ee7dd6379a4a6034c1fedabcae Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 29 Apr 2006 11:48:56 +0000 Subject: r15319: remove unneeded macros metze (This used to be commit 9611c8aa9ce0eba1703d5eecc52e67a9e5fba15f) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 6bfcfb2017..11ad149044 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -42,7 +42,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem ZERO_STRUCTP(r->out.bind_handle); b_state = talloc(dce_call->conn, struct drsuapi_bind_state); - WERR_TALLOC_CHECK(b_state); + W_ERROR_HAVE_NO_MEMORY(b_state); b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { @@ -59,7 +59,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem handle->data = talloc_steal(handle, b_state); bind_info = talloc(mem_ctx, struct drsuapi_DsBindInfoCtr); - WERR_TALLOC_CHECK(bind_info); + W_ERROR_HAVE_NO_MEMORY(bind_info); ZERO_STRUCT(site_guid); @@ -224,11 +224,11 @@ WERROR drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ int i; ctr1 = talloc(mem_ctx, struct drsuapi_DsNameCtr1); - WERR_TALLOC_CHECK(ctr1); + W_ERROR_HAVE_NO_MEMORY(ctr1); count = r->in.req.req1.count; names = talloc_array(mem_ctx, struct drsuapi_DsNameInfo1, count); - WERR_TALLOC_CHECK(names); + W_ERROR_HAVE_NO_MEMORY(names); for (i=0; i < count; i++) { status = DsCrackNameOneName(b_state->sam_ctx, mem_ctx, -- cgit From eda5759e4566c69f03e13137473980a10dfedde4 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Tue, 4 Jul 2006 10:25:04 +0000 Subject: r16796: Fill in dsr_GetMemberships() / dsr_GetMemberships2(). This intersting call is apparently used to construct the user token, collect memberships from other DSAs and to retrieve (nested) memberships of a given group. Torture test to follow (once I cleaned it up). Guenther (This used to be commit ca5e133e8c6fca188fcaa834cdcd4cb2cd801d79) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 11ad149044..4028e4c4f9 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -171,10 +171,10 @@ static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CT /* - DRSUAPI_GET_MEMBERSHIPS + drsuapi_DsGetMemberships */ -static WERROR DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_GET_MEMBERSHIPS *r) +static WERROR drsuapi_DsGetMemberships(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetMemberships *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } @@ -332,17 +332,15 @@ static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } - /* - DRSUAPI_GET_MEMBERSHIPS2 + drsuapi_DsGetMemberships2 */ -static WERROR DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_GET_MEMBERSHIPS2 *r) +static WERROR drsuapi_DsGetMemberships2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetMemberships2 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } - /* DRSUAPI_REPLICA_VERIFY_OBJECTS */ -- cgit From 08452bd7389dc7a18aa2620724a2029bd2e9c640 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 17 Nov 2006 11:27:33 +0000 Subject: r19761: This may need work, but here is an initial implementation of DsWriteAccountSpn(). It passes the client toture test. Andrew Bartlett (This used to be commit a1e80eeb9561a856ac5aa1f5a991dcd648b152ff) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 65 ++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 4028e4c4f9..e101195d9c 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -259,7 +259,70 @@ WERROR drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsWriteAccountSpn *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct drsuapi_bind_state *b_state; + struct dcesrv_handle *h; + + r->out.level = r->in.level; + + DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + b_state = h->data; + + switch (r->in.level) { + case 1: { + struct drsuapi_DsWriteAccountSpnRequest1 *req; + struct ldb_message *msg; + int count, i, ret; + req = &r->in.req.req1; + count = req->count; + + msg = ldb_msg_new(mem_ctx); + if (msg == NULL) { + return WERR_NOMEM; + } + + msg->dn = ldb_dn_explode(msg, req->object_dn); + if (msg->dn == NULL) { + r->out.res.res1.status = WERR_OK; + return WERR_OK; + } + + /* construct mods */ + for (i = 0; i < count; i++) { + samdb_msg_add_string(b_state->sam_ctx, + msg, msg, "servicePrincipalName", + req->spn_names[i].str); + } + for (i=0;inum_elements;i++) { + switch (req->operation) { + case DRSUAPI_DS_SPN_OPERATION_ADD: + msg->elements[i].flags = LDB_FLAG_MOD_ADD; + break; + case DRSUAPI_DS_SPN_OPERATION_REPLACE: + msg->elements[i].flags = LDB_FLAG_MOD_REPLACE; + break; + case DRSUAPI_DS_SPN_OPERATION_DELETE: + msg->elements[i].flags = LDB_FLAG_MOD_DELETE; + break; + } + } + + /* Apply to database */ + + ret = samdb_modify(b_state->sam_ctx, mem_ctx, msg); + if (ret != 0) { + DEBUG(0,("Failed to modify SPNs on %s: %s\n", + ldb_dn_linearize(mem_ctx, msg->dn), + ldb_errstring(b_state->sam_ctx))); + r->out.res.res1.status = WERR_ACCESS_DENIED; + } else { + r->out.res.res1.status = WERR_OK; + } + + return WERR_OK; + } + } + + return WERR_UNKNOWN_LEVEL; } -- cgit From 4889eb9f7aae9349e426d0f6d2217adff67eaebd Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 22 Nov 2006 00:59:34 +0000 Subject: r19831: Big ldb_dn optimization and interfaces enhancement patch This patch changes a lot of the code in ldb_dn.c, and also removes and add a number of manipulation functions around. The aim is to avoid validating a dn if not necessary as the validation code is necessarily slow. This is mainly to speed up internal operations where input is not user generated and so we can assume the DNs need no validation. The code is designed to keep the data as a string if possible. The code is not yet 100% perfect, but pass all the tests so far. A memleak is certainly present, I'll work on that next. Simo. (This used to be commit a580c871d3784602a9cce32d33419e63c8236e63) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index e101195d9c..b7a5b2d242 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -280,8 +280,8 @@ static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL return WERR_NOMEM; } - msg->dn = ldb_dn_explode(msg, req->object_dn); - if (msg->dn == NULL) { + msg->dn = ldb_dn_new(msg, b_state->sam_ctx, req->object_dn); + if ( ! ldb_dn_validate(msg->dn)) { r->out.res.res1.status = WERR_OK; return WERR_OK; } -- cgit From a9e31b33b55a873c2f01db5e348560176adf863d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 22 Nov 2006 02:05:19 +0000 Subject: r19832: better prototypes for the linearization functions: - ldb_dn_get_linearized returns a const string - ldb_dn_alloc_linearized allocs astring with the linearized dn (This used to be commit 3929c086d5d0b3f08b1c4f2f3f9602c3f4a9a4bd) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index b7a5b2d242..1eb106066b 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -311,7 +311,7 @@ static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL ret = samdb_modify(b_state->sam_ctx, mem_ctx, msg); if (ret != 0) { DEBUG(0,("Failed to modify SPNs on %s: %s\n", - ldb_dn_linearize(mem_ctx, msg->dn), + ldb_dn_get_linearized(msg->dn), ldb_errstring(b_state->sam_ctx))); r->out.res.res1.status = WERR_ACCESS_DENIED; } else { -- cgit From 9671a72a4c3e0950585575da72e2c740f294031c Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 22 Nov 2006 18:40:27 +0000 Subject: r19847: add idl for DsRemoveDSServer(), this is used when a server unbecomes a DC metze (This used to be commit df133cd22a350d422c49844e50a67f4cc1fb61e4) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 1eb106066b..1773c61629 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -327,10 +327,10 @@ static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL /* - DRSUAPI_REMOVE_DS_SERVER + drsuapi_DsRemoveDSServer */ -static WERROR DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_REMOVE_DS_SERVER *r) +static WERROR drsuapi_DsRemoveDSServer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsRemoveDSServer *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 400a56d6dd2f02569a626f4507ec06fa49cf0839 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 22 Dec 2006 07:04:06 +0000 Subject: r20315: Implement the server side of DsGetDomainControllerInfo. This is a supprisingly complex call... It turns out that the in/out parameter 'level' is not in/out, but set seperatly by the server-side code from r->req.req1.level. This commit also breaks out some common code from samldb into samdb. Andrew Bartlett (This used to be commit 2eb9e6445c64840399171f4f56b1e43786dbcfa7) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 274 +++++++++++++++++++++++++++- 1 file changed, 273 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 1773c61629..dd26145522 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -345,6 +345,268 @@ static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLO DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } +/* Obtain the site name from a server DN */ +const char *result_site_name(struct ldb_dn *site_dn) +{ + /* Format is cn=,cn=Servers,cn=,cn=sites.... */ + const struct ldb_val *val = ldb_dn_get_component_val(site_dn, 2); + const char *name = ldb_dn_get_component_name(site_dn, 2); + + if (!name || (ldb_attr_cmp(name, "cn") != 0)) { + /* Ensure this matches the format. This gives us a + * bit more confidence that a 'cn' value will be a + * ascii string */ + return NULL; + } + if (val) { + return (char *)val->data; + } + return NULL; +} + +/* + drsuapi_DsGetDomainControllerInfo +*/ +static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_state, + TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetDomainControllerInfo *r) +{ + struct ldb_dn *sites_dn; + struct ldb_result *res; + + const char *attrs_account_01[] = { "samAccountName", NULL }; + const char *attrs_account_1[] = { "cn", "dnsHostName", NULL }; + const char *attrs_account_2[] = { "cn", "dnsHostName", "objectGUID", NULL }; + + const char *attrs_none[] = { NULL }; + + const char *attrs_site[] = { "objectGUID", NULL }; + + const char *attrs_ntds[] = { "options", "objectGUID", NULL }; + + const char *attrs_01[] = { "serverReference", NULL }; + const char *attrs_1[] = { "serverReference", "cn", "dnsHostName", NULL }; + const char *attrs_2[] = { "serverReference", "cn", "dnsHostName", "objectGUID", NULL }; + const char **attrs; + + struct drsuapi_DsGetDCInfoCtr01 *ctr01; + struct drsuapi_DsGetDCInfoCtr1 *ctr1; + struct drsuapi_DsGetDCInfoCtr2 *ctr2; + + int ret, i; + + r->out.level_out = r->in.req.req1.level; + + sites_dn = samdb_domain_to_dn(b_state->sam_ctx, mem_ctx, r->in.req.req1.domain_name); + if (!sites_dn) { + return WERR_DS_OBJ_NOT_FOUND; + } + + if (!ldb_dn_add_child_fmt(sites_dn, "CN=Sites,CN=Configuration")) { + return WERR_NOMEM; + } + + switch (r->out.level_out) { + case -1: + attrs = attrs_01; + break; + case 1: + attrs = attrs_1; + break; + case 2: + attrs = attrs_2; + break; + default: + return WERR_UNKNOWN_LEVEL; + } + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res, sites_dn, LDB_SCOPE_SUBTREE, attrs, + "objectClass=server"); + + if (ret) { + return WERR_GENERAL_FAILURE; + } + + switch (r->out.level_out) { + case -1: + ctr01 = &r->out.ctr.ctr01; + ctr01->count = res->count; + ctr01->array = talloc_zero_array(mem_ctx, + struct drsuapi_DsGetDCInfo01, + res->count); + for (i=0; i < res->count; i++) { + struct ldb_result *res_account; + struct ldb_dn *ref_dn + = ldb_msg_find_attr_as_dn(b_state->sam_ctx, + mem_ctx, res->msgs[i], + "serverReference"); + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, + LDB_SCOPE_BASE, attrs_account_01, "objectClass=computer"); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_account->count == 1) { + ctr01->array[i].server_nt4_account + = ldb_msg_find_attr_as_string(res_account->msgs[0], "samAccountName", NULL); + } + } + break; + case 1: + ctr1 = &r->out.ctr.ctr1; + ctr1->count = res->count; + ctr1->array = talloc_zero_array(mem_ctx, + struct drsuapi_DsGetDCInfo1, + res->count); + for (i=0; i < res->count; i++) { + struct ldb_dn *domain_dn; + struct ldb_result *res_domain; + struct ldb_result *res_account; + struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + + struct ldb_dn *ref_dn + = ldb_msg_find_attr_as_dn(b_state->sam_ctx, + mem_ctx, res->msgs[i], + "serverReference"); + + if (!ntds_dn || !ldb_dn_add_child_fmt(ntds_dn, "CN=NTDS Settings")) { + return WERR_NOMEM; + } + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, + LDB_SCOPE_BASE, attrs_account_1, "objectClass=computer"); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_account->count == 1) { + ctr1->array[i].dns_name + = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); + ctr1->array[i].netbios_name + = ldb_msg_find_attr_as_string(res_account->msgs[0], "cn", NULL); + ctr1->array[i].computer_dn + = ldb_dn_get_linearized(res_account->msgs[0]->dn); + + /* Determine if this is the PDC */ + domain_dn = samdb_search_for_parent_domain(b_state->sam_ctx, + mem_ctx, res_account->msgs[0]->dn); + + if (domain_dn) { + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, + LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", + ldb_dn_get_linearized(ntds_dn)); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_domain->count == 1) { + ctr1->array[i].is_pdc = True; + } + } + } + + /* Look at server DN and extract site component */ + ctr1->array[i].site_name = result_site_name(res->msgs[i]->dn); + ctr1->array[i].server_dn = ldb_dn_get_linearized(res->msgs[i]->dn); + + + ctr1->array[i].is_enabled = True; + + } + break; + case 2: + ctr2 = &r->out.ctr.ctr2; + ctr2->count = res->count; + ctr2->array = talloc_zero_array(mem_ctx, + struct drsuapi_DsGetDCInfo2, + res->count); + for (i=0; i < res->count; i++) { + struct ldb_dn *domain_dn; + struct ldb_result *res_domain; + struct ldb_result *res_account; + struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_result *res_ntds; + struct ldb_dn *site_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_result *res_site; + struct ldb_dn *ref_dn + = ldb_msg_find_attr_as_dn(b_state->sam_ctx, + mem_ctx, res->msgs[i], + "serverReference"); + + if (!ntds_dn || !ldb_dn_add_child_fmt(ntds_dn, "CN=NTDS Settings")) { + return WERR_NOMEM; + } + + /* Format is cn=,cn=Servers,cn=,cn=sites.... */ + if (!site_dn || !ldb_dn_remove_child_components(site_dn, 2)) { + return WERR_NOMEM; + } + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_ntds, ntds_dn, + LDB_SCOPE_BASE, attrs_ntds, "objectClass=nTDSDSA"); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_ntds->count == 1) { + ctr2->array[i].is_gc + = (ldb_msg_find_attr_as_int(res_ntds->msgs[0], "options", 0) == 1); + ctr2->array[i].ntds_guid + = samdb_result_guid(res_ntds->msgs[0], "objectGUID"); + ctr2->array[i].ntds_dn = ldb_dn_get_linearized(res_ntds->msgs[0]->dn); + } + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_site, site_dn, + LDB_SCOPE_BASE, attrs_site, "objectClass=site"); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_site->count == 1) { + ctr2->array[i].site_guid + = samdb_result_guid(res_site->msgs[0], "objectGUID"); + ctr2->array[i].site_dn = ldb_dn_get_linearized(res_site->msgs[0]->dn); + } + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, + LDB_SCOPE_BASE, attrs_account_2, "objectClass=computer"); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_account->count == 1) { + ctr2->array[i].dns_name + = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); + ctr2->array[i].netbios_name + = ldb_msg_find_attr_as_string(res_account->msgs[0], "cn", NULL); + ctr2->array[i].computer_dn = ldb_dn_get_linearized(res_account->msgs[0]->dn); + ctr2->array[i].computer_guid + = samdb_result_guid(res_account->msgs[0], "objectGUID"); + + /* Determine if this is the PDC */ + domain_dn = samdb_search_for_parent_domain(b_state->sam_ctx, + mem_ctx, res_account->msgs[0]->dn); + + if (domain_dn) { + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, + LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", + ldb_dn_get_linearized(ntds_dn)); + if (ret) { + return WERR_GENERAL_FAILURE; + } + if (res_domain->count == 1) { + ctr2->array[i].is_pdc = True; + } + } + } + + /* Look at server DN and extract site component */ + ctr2->array[i].site_name = result_site_name(res->msgs[i]->dn); + ctr2->array[i].server_dn = ldb_dn_get_linearized(res->msgs[i]->dn); + ctr2->array[i].server_guid + = samdb_result_guid(res->msgs[i], "objectGUID"); + + ctr2->array[i].is_enabled = True; + + } + break; + } + return WERR_OK; +} /* drsuapi_DsGetDomainControllerInfo @@ -352,7 +614,17 @@ static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLO static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetDomainControllerInfo *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *h; + struct drsuapi_bind_state *b_state; + DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE); + b_state = h->data; + + switch (r->in.level) { + case 1: + return drsuapi_DsGetDomainControllerInfo_1(b_state, mem_ctx, r); + } + + return WERR_UNKNOWN_LEVEL; } -- cgit From ea4c64388bb00f41a083fb37a2689ae09f33399b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 27 Dec 2006 02:01:38 +0000 Subject: r20353: Restructure the DRSUAPI DsGetDomainControllerInfo test, because as usual things are more complex than they appear. Also remove the incorrect server-side implementation, which blindly assumed some sense of consistancy across the API switch levels. Andrew Bartlett (This used to be commit 79941adbff843f5027dacd31b972deca4a1557ec) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 30 ++--------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index dd26145522..eaf2c65919 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -374,7 +374,6 @@ static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_s struct ldb_dn *sites_dn; struct ldb_result *res; - const char *attrs_account_01[] = { "samAccountName", NULL }; const char *attrs_account_1[] = { "cn", "dnsHostName", NULL }; const char *attrs_account_2[] = { "cn", "dnsHostName", "objectGUID", NULL }; @@ -384,12 +383,10 @@ static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_s const char *attrs_ntds[] = { "options", "objectGUID", NULL }; - const char *attrs_01[] = { "serverReference", NULL }; const char *attrs_1[] = { "serverReference", "cn", "dnsHostName", NULL }; const char *attrs_2[] = { "serverReference", "cn", "dnsHostName", "objectGUID", NULL }; const char **attrs; - struct drsuapi_DsGetDCInfoCtr01 *ctr01; struct drsuapi_DsGetDCInfoCtr1 *ctr1; struct drsuapi_DsGetDCInfoCtr2 *ctr2; @@ -408,8 +405,8 @@ static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_s switch (r->out.level_out) { case -1: - attrs = attrs_01; - break; + /* this level is not like the others */ + return WERR_UNKNOWN_LEVEL; case 1: attrs = attrs_1; break; @@ -428,29 +425,6 @@ static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_s } switch (r->out.level_out) { - case -1: - ctr01 = &r->out.ctr.ctr01; - ctr01->count = res->count; - ctr01->array = talloc_zero_array(mem_ctx, - struct drsuapi_DsGetDCInfo01, - res->count); - for (i=0; i < res->count; i++) { - struct ldb_result *res_account; - struct ldb_dn *ref_dn - = ldb_msg_find_attr_as_dn(b_state->sam_ctx, - mem_ctx, res->msgs[i], - "serverReference"); - ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, - LDB_SCOPE_BASE, attrs_account_01, "objectClass=computer"); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_account->count == 1) { - ctr01->array[i].server_nt4_account - = ldb_msg_find_attr_as_string(res_account->msgs[0], "samAccountName", NULL); - } - } - break; case 1: ctr1 = &r->out.ctr.ctr1; ctr1->count = res->count; -- cgit From f4fd6d97e6c29499fa76f3e5ac8f5ed6f5ee8967 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 28 Dec 2006 03:31:50 +0000 Subject: r20374: It's still 2006 (just...). Add copyright. Andrew Bartlett (This used to be commit 21b38ae1e4c48dab4b89f234f4dc26a3aed401c3) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index eaf2c65919..e6113073ca 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -4,6 +4,7 @@ endpoint server for the drsuapi pipe Copyright (C) Stefan Metzmacher 2004 + Copyright (C) Andrew Bartlett 2006 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -- cgit From 57f5bf78fa9fc9d190c3cb25251e686a1488f790 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 3 Jan 2007 19:09:34 +0000 Subject: r20514: implement idl for DsGetNT4ChangeLog() which transferres the meta data for NT4 DC's in mixed mode domains. This call is triggered by tranferring the PDC FSMO Role to another DC the real meta data is encoded in the user buffer which is just a DATA_BLOB in idl metze (This used to be commit d883815c8d64429e4dac26a93a15e67d31dc263e) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index e6113073ca..743abdde6f 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -192,10 +192,10 @@ static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALL /* - DRSUAPI_GET_NT4_CHANGELOG + drsuapi_DsGetNT4ChangeLog */ -static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_GET_NT4_CHANGELOG *r) +static WERROR drsuapi_DsGetNT4ChangeLog(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_DsGetNT4ChangeLog *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 64e88a8ccf2faa34ee9d182f4e89fa6e44c609a6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 17 Jan 2007 14:49:36 +0000 Subject: r20850: Prefix all server calls with dcesrv_ (This used to be commit 76c78b0339cd88c61a13745f7f4e037f400db21b) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 54 ++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 743abdde6f..1a498012c5 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -31,7 +31,7 @@ /* drsuapi_DsBind */ -static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsBind *r) { struct drsuapi_bind_state *b_state; @@ -80,7 +80,7 @@ static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem /* drsuapi_DsUnbind */ -static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsUnbind *r) { struct dcesrv_handle *h; @@ -100,7 +100,7 @@ static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *m /* drsuapi_DsReplicaSync */ -static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaSync *r) { /* TODO: implement this call correct! @@ -114,7 +114,7 @@ static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_C /* drsuapi_DsGetNCChanges */ -static WERROR drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetNCChanges *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -124,7 +124,7 @@ static WERROR drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_ /* drsuapi_DsReplicaUpdateRefs */ -static WERROR drsuapi_DsReplicaUpdateRefs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsReplicaUpdateRefs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaUpdateRefs *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -134,7 +134,7 @@ static WERROR drsuapi_DsReplicaUpdateRefs(struct dcesrv_call_state *dce_call, TA /* DRSUAPI_REPLICA_ADD */ -static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_ADD *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -144,7 +144,7 @@ static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX /* DRSUAPI_REPLICA_DEL */ -static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_DEL *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -154,7 +154,7 @@ static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX /* DRSUAPI_REPLICA_MODIFY */ -static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_MODIFY *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -164,7 +164,7 @@ static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_ /* DRSUAPI_VERIFY_NAMES */ -static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_VERIFY_NAMES *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -174,7 +174,7 @@ static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CT /* drsuapi_DsGetMemberships */ -static WERROR drsuapi_DsGetMemberships(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsGetMemberships(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetMemberships *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -184,7 +184,7 @@ static WERROR drsuapi_DsGetMemberships(struct dcesrv_call_state *dce_call, TALLO /* DRSUAPI_INTER_DOMAIN_MOVE */ -static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_INTER_DOMAIN_MOVE *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -194,7 +194,7 @@ static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALL /* drsuapi_DsGetNT4ChangeLog */ -static WERROR drsuapi_DsGetNT4ChangeLog(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsGetNT4ChangeLog(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetNT4ChangeLog *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -204,7 +204,7 @@ static WERROR drsuapi_DsGetNT4ChangeLog(struct dcesrv_call_state *dce_call, TALL /* drsuapi_DsCrackNames */ -WERROR drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +WERROR dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsCrackNames *r) { WERROR status; @@ -257,7 +257,7 @@ WERROR drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ /* drsuapi_DsWriteAccountSpn */ -static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsWriteAccountSpn *r) { struct drsuapi_bind_state *b_state; @@ -330,7 +330,7 @@ static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL /* drsuapi_DsRemoveDSServer */ -static WERROR drsuapi_DsRemoveDSServer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +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); @@ -340,7 +340,7 @@ static WERROR drsuapi_DsRemoveDSServer(struct dcesrv_call_state *dce_call, TALLO /* DRSUAPI_REMOVE_DS_DOMAIN */ -static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REMOVE_DS_DOMAIN *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -368,7 +368,7 @@ const char *result_site_name(struct ldb_dn *site_dn) /* drsuapi_DsGetDomainControllerInfo */ -static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_state, +static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetDomainControllerInfo *r) { @@ -586,7 +586,7 @@ static WERROR drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_state *b_s /* drsuapi_DsGetDomainControllerInfo */ -static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetDomainControllerInfo *r) { struct dcesrv_handle *h; @@ -596,7 +596,7 @@ static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_ca switch (r->in.level) { case 1: - return drsuapi_DsGetDomainControllerInfo_1(b_state, mem_ctx, r); + return dcesrv_drsuapi_DsGetDomainControllerInfo_1(b_state, mem_ctx, r); } return WERR_UNKNOWN_LEVEL; @@ -606,7 +606,7 @@ static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_ca /* drsuapi_DsAddEntry */ -static WERROR drsuapi_DsAddEntry(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsAddEntry(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsAddEntry *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -616,7 +616,7 @@ static WERROR drsuapi_DsAddEntry(struct dcesrv_call_state *dce_call, TALLOC_CTX /* DRSUAPI_EXECUTE_KCC */ -static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_EXECUTE_KCC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -626,7 +626,7 @@ static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX /* drsuapi_DsReplicaGetInfo */ -static WERROR drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsReplicaGetInfo *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -636,7 +636,7 @@ static WERROR drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLO /* DRSUAPI_ADD_SID_HISTORY */ -static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_ADD_SID_HISTORY *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -645,7 +645,7 @@ static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC /* drsuapi_DsGetMemberships2 */ -static WERROR drsuapi_DsGetMemberships2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_drsuapi_DsGetMemberships2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct drsuapi_DsGetMemberships2 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -654,7 +654,7 @@ static WERROR drsuapi_DsGetMemberships2(struct dcesrv_call_state *dce_call, TALL /* DRSUAPI_REPLICA_VERIFY_OBJECTS */ -static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -664,7 +664,7 @@ static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, /* DRSUAPI_GET_OBJECT_EXISTENCE */ -static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_GET_OBJECT_EXISTENCE *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -674,7 +674,7 @@ static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, T /* DRSUAPI_QUERY_SITES_BY_COST */ -static WERROR DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct DRSUAPI_QUERY_SITES_BY_COST *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); -- cgit From ced4976d94b89c2c38473622372f617429152a18 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 15 Feb 2007 11:57:23 +0000 Subject: r21356: we have a function to get the sites dn also it's not always under the domain dn metze (This used to be commit b8c940f1e2bbd65ed5d2f4279434dd526456ad8b) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 1a498012c5..833413dd08 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -395,15 +395,11 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta r->out.level_out = r->in.req.req1.level; - sites_dn = samdb_domain_to_dn(b_state->sam_ctx, mem_ctx, r->in.req.req1.domain_name); + sites_dn = samdb_sites_dn(b_state->sam_ctx, mem_ctx); if (!sites_dn) { return WERR_DS_OBJ_NOT_FOUND; } - if (!ldb_dn_add_child_fmt(sites_dn, "CN=Sites,CN=Configuration")) { - return WERR_NOMEM; - } - switch (r->out.level_out) { case -1: /* this level is not like the others */ -- cgit From 89e28a0ec8e3a76e712946fd0313e7dfcc969402 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 23 Feb 2007 07:56:29 +0000 Subject: r21512: finish DsBind() in the DRSUAPI server: - fill in our on bind_info struct correctly - remember the local and remote DsBindInfo28 struct - remember the remote bind_buid w2k3 now tries replicate using DsGetNCChanges() from us, after the NET-API-BECOME-DC test created the domain controller and replicated all data. (But we still give a DCERPC fault in DsGetNCChanges()...) metze (This used to be commit 33550c063d4e206fce63fdd99dc93a56995db580) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 149 +++++++++++++++++++++++++--- 1 file changed, 136 insertions(+), 13 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 833413dd08..7ba74c3528 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -27,6 +27,7 @@ #include "rpc_server/common/common.h" #include "rpc_server/drsuapi/dcesrv_drsuapi.h" #include "dsdb/samdb/samdb.h" +#include "lib/ldb/include/ldb_errors.h" /* drsuapi_DsBind @@ -38,38 +39,160 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C struct dcesrv_handle *handle; struct drsuapi_DsBindInfoCtr *bind_info; struct GUID site_guid; + struct ldb_result *site_res; + struct ldb_dn *server_site_dn; + static const char *site_attrs[] = { "objectGUID", NULL }; + struct ldb_result *ntds_res; + struct ldb_dn *ntds_dn; + static const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; + uint32_t u1; + uint32_t repl_epoch; + int ret; r->out.bind_info = NULL; ZERO_STRUCTP(r->out.bind_handle); - b_state = talloc(dce_call->conn, struct drsuapi_bind_state); + b_state = talloc_zero(mem_ctx, struct drsuapi_bind_state); W_ERROR_HAVE_NO_MEMORY(b_state); + /* + * connect to the samdb + */ b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { - talloc_free(b_state); return WERR_FOOBAR; } - handle = dcesrv_handle_new(dce_call->context, DRSUAPI_BIND_HANDLE); - if (!handle) { - talloc_free(b_state); - return WERR_NOMEM; + /* + * find out the guid of our own site + */ + server_site_dn = samdb_server_site_dn(b_state->sam_ctx, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(server_site_dn); + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &site_res, + server_site_dn, LDB_SCOPE_BASE, site_attrs, + "(objectClass=*)"); + if (ret != LDB_SUCCESS) { + return WERR_DS_DRA_INTERNAL_ERROR; + } + if (site_res->count != 1) { + return WERR_DS_DRA_INTERNAL_ERROR; } + site_guid = samdb_result_guid(site_res->msgs[0], "objectGUID"); - handle->data = talloc_steal(handle, b_state); + /* + * lookup the local servers Replication Epoch + */ + ntds_dn = samdb_ntds_settings_dn(b_state->sam_ctx); + W_ERROR_HAVE_NO_MEMORY(ntds_dn); + + ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &ntds_res, + ntds_dn, LDB_SCOPE_BASE, ntds_attrs, + "(objectClass=*)"); + if (ret != LDB_SUCCESS) { + return WERR_DS_DRA_INTERNAL_ERROR; + } + if (ntds_res->count != 1) { + return WERR_DS_DRA_INTERNAL_ERROR; + } + repl_epoch = samdb_result_uint(ntds_res->msgs[0], "ms-DS-ReplicationEpoch", 0); + + /* + * TODO: find out what this is... + */ + u1 = 0; + + /* + * store the clients bind_guid + */ + if (r->in.bind_guid) { + b_state->remote_bind_guid = *r->in.bind_guid; + } + /* + * store the clients bind_info + */ + if (r->in.bind_info) { + switch (r->in.bind_info->length) { + case 24: { + struct drsuapi_DsBindInfo24 *info24; + info24 = &r->in.bind_info->info.info24; + b_state->remote_info28.supported_extensions = info24->supported_extensions; + b_state->remote_info28.site_guid = info24->site_guid; + b_state->remote_info28.u1 = info24->u1; + b_state->remote_info28.repl_epoch = 0; + break; + } + case 28: + b_state->remote_info28 = r->in.bind_info->info.info28; + break; + } + } + + /* + * fill in our local bind info 28 + */ + b_state->local_info28.supported_extensions = 0; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_BASE; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2; +#if 0 /* we don't support MSZIP compression (only decompression) */ + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS; +#endif + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2; + if (0 /*domain.behavior_version == 2*/) { + /* TODO: find out how this is really triggered! */ + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION; + } + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_00100000; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7; + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT; +#if 0 /* we don't support XPRESS compression yet */ + b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS; +#endif + b_state->local_info28.site_guid = site_guid; + b_state->local_info28.u1 = u1; + b_state->local_info28.repl_epoch = repl_epoch; + + /* + * allocate the return bind_info + */ bind_info = talloc(mem_ctx, struct drsuapi_DsBindInfoCtr); W_ERROR_HAVE_NO_MEMORY(bind_info); - ZERO_STRUCT(site_guid); + bind_info->length = 28; + bind_info->info.info28 = b_state->local_info28; - bind_info->length = 28; - bind_info->info.info28.supported_extensions = 0; - bind_info->info.info28.site_guid = site_guid; - bind_info->info.info28.u1 = 0; - bind_info->info.info28.repl_epoch = 0; + /* + * allocate a bind handle + */ + handle = dcesrv_handle_new(dce_call->context, DRSUAPI_BIND_HANDLE); + W_ERROR_HAVE_NO_MEMORY(handle); + handle->data = talloc_steal(handle, b_state); + /* + * prepare reply + */ r->out.bind_info = bind_info; *r->out.bind_handle = handle->wire_handle; -- cgit From a62b46b4b2e39a5d1dfb032c60cca82ceb58f550 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 23 Apr 2007 07:26:08 +0000 Subject: r22477: When an invaild base is specified to ldb_search, it should return LDB_ERR_NO_SUCH_OBJECT. Handle this (found against LDAP, ldb_tdb is being updated). Andrew Bartlett (This used to be commit 93e2ff2e85c57a192aadac96ce09a678d464e8ad) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 47 +++++++++++++++++------------ 1 file changed, 27 insertions(+), 20 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 7ba74c3528..f1f0b4a54e 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -541,6 +541,8 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta "objectClass=server"); if (ret) { + DEBUG(1, ("searching for servers in sites DN %s failed: %s\n", + ldb_dn_get_linearized(sites_dn), ldb_errstring(b_state->sam_ctx))); return WERR_GENERAL_FAILURE; } @@ -568,10 +570,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, LDB_SCOPE_BASE, attrs_account_1, "objectClass=computer"); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_account->count == 1) { + if (ret == LDB_SUCCESS && res_account->count == 1) { ctr1->array[i].dns_name = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); ctr1->array[i].netbios_name @@ -595,6 +594,10 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta } } } + if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { + DEBUG(5, ("warning: searching for computer DN %s failed: %s\n", + ldb_dn_get_linearized(ref_dn), ldb_errstring(b_state->sam_ctx))); + } /* Look at server DN and extract site component */ ctr1->array[i].site_name = result_site_name(res->msgs[i]->dn); @@ -635,34 +638,33 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_ntds, ntds_dn, LDB_SCOPE_BASE, attrs_ntds, "objectClass=nTDSDSA"); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_ntds->count == 1) { + if (ret == LDB_SUCCESS && res_ntds->count == 1) { ctr2->array[i].is_gc = (ldb_msg_find_attr_as_int(res_ntds->msgs[0], "options", 0) == 1); ctr2->array[i].ntds_guid = samdb_result_guid(res_ntds->msgs[0], "objectGUID"); ctr2->array[i].ntds_dn = ldb_dn_get_linearized(res_ntds->msgs[0]->dn); } + if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { + DEBUG(5, ("warning: searching for NTDS DN %s failed: %s\n", + ldb_dn_get_linearized(ntds_dn), ldb_errstring(b_state->sam_ctx))); + } ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_site, site_dn, LDB_SCOPE_BASE, attrs_site, "objectClass=site"); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_site->count == 1) { + if (ret == LDB_SUCCESS && res_site->count == 1) { ctr2->array[i].site_guid = samdb_result_guid(res_site->msgs[0], "objectGUID"); ctr2->array[i].site_dn = ldb_dn_get_linearized(res_site->msgs[0]->dn); } + if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { + DEBUG(5, ("warning: searching for site DN %s failed: %s\n", + ldb_dn_get_linearized(site_dn), ldb_errstring(b_state->sam_ctx))); + } ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, LDB_SCOPE_BASE, attrs_account_2, "objectClass=computer"); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_account->count == 1) { + if (ret == LDB_SUCCESS && res_account->count == 1) { ctr2->array[i].dns_name = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); ctr2->array[i].netbios_name @@ -679,14 +681,19 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", ldb_dn_get_linearized(ntds_dn)); - if (ret) { - return WERR_GENERAL_FAILURE; - } - if (res_domain->count == 1) { + if (ret == LDB_SUCCESS && res_domain->count == 1) { ctr2->array[i].is_pdc = True; } + if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { + DEBUG(5, ("warning: searching for domain DN %s failed: %s\n", + ldb_dn_get_linearized(domain_dn), ldb_errstring(b_state->sam_ctx))); + } } } + if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { + DEBUG(5, ("warning: searching for computer account DN %s failed: %s\n", + ldb_dn_get_linearized(ref_dn), ldb_errstring(b_state->sam_ctx))); + } /* Look at server DN and extract site component */ ctr2->array[i].site_name = result_site_name(res->msgs[i]->dn); -- cgit From 4d1a21f24d9d2f4326e380cadb24c842c2dfb688 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Wed, 30 May 2007 09:54:19 +0000 Subject: r23239: Fill in drsuapi_QuerySitesByCost. Guenther (This used to be commit cf953d04813d193da5e9714ceebb7826dc7e4d0b) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index f1f0b4a54e..9bb35c06c9 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -798,10 +798,10 @@ static WERROR dcesrv_DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_ /* - DRSUAPI_QUERY_SITES_BY_COST + drsuapi_QuerySitesByCost */ -static WERROR dcesrv_DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct DRSUAPI_QUERY_SITES_BY_COST *r) +static WERROR dcesrv_drsuapi_QuerySitesByCost(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct drsuapi_QuerySitesByCost *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -- cgit From 0479a2f1cbae51fcd8dbdc3c148c808421fb4d25 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 02:07:03 +0000 Subject: r23792: convert Samba4 to GPLv3 There are still a few tidyups of old FSF addresses to come (in both s3 and s4). More commits soon. (This used to be commit fcf38a38ac691abd0fa51b89dc951a08e89fdafa) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 9bb35c06c9..f315cae102 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -8,7 +8,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,8 +17,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . */ #include "includes.h" -- cgit From 58d9f6ed9dc054f4046be660353f1fb627145911 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 6 Aug 2007 03:01:59 +0000 Subject: r24246: Avoid the annoying 'probable memory leak in ldb' messages, by fixing some issues in the NBT server (this was a false positive, but easily worked around) and DRSUAPI server. We should take care not to use the ldb_context as a talloc pool, and to always ensure that any results from ldb_search() are moved off that pool with talloc_steal or talloc_free(). To work around the issue in provision, for which I can find no fault (other than a lot of work being done in provision), I've moved the detector trigger to 400 additional blocks. This fixes Bug #4810 by Andrew Bartlett (This used to be commit 42bcf856203ae3cf43130519904828a143ac8d18) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index f315cae102..0c22e856f2 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -556,7 +556,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta struct ldb_dn *domain_dn; struct ldb_result *res_domain; struct ldb_result *res_account; - struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *ntds_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_dn *ref_dn = ldb_msg_find_attr_as_dn(b_state->sam_ctx, @@ -617,9 +617,9 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta struct ldb_dn *domain_dn; struct ldb_result *res_domain; struct ldb_result *res_account; - struct ldb_dn *ntds_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *ntds_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_result *res_ntds; - struct ldb_dn *site_dn = ldb_dn_copy(b_state->sam_ctx, res->msgs[i]->dn); + struct ldb_dn *site_dn = ldb_dn_copy(mem_ctx, res->msgs[i]->dn); struct ldb_result *res_site; struct ldb_dn *ref_dn = ldb_msg_find_attr_as_dn(b_state->sam_ctx, -- cgit From 05e7c481465e3065effaf21b43636d6605d7c313 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 6 Oct 2007 22:25:41 +0000 Subject: r25553: Convert to standard bool type. (This used to be commit b7371f1a191fb86834c0d586d094f39f0b04544b) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 0c22e856f2..d8b361ca27 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -589,7 +589,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta return WERR_GENERAL_FAILURE; } if (res_domain->count == 1) { - ctr1->array[i].is_pdc = True; + ctr1->array[i].is_pdc = true; } } } @@ -603,7 +603,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ctr1->array[i].server_dn = ldb_dn_get_linearized(res->msgs[i]->dn); - ctr1->array[i].is_enabled = True; + ctr1->array[i].is_enabled = true; } break; @@ -681,7 +681,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", ldb_dn_get_linearized(ntds_dn)); if (ret == LDB_SUCCESS && res_domain->count == 1) { - ctr2->array[i].is_pdc = True; + ctr2->array[i].is_pdc = true; } if ((ret != LDB_SUCCESS) && (ret != LDB_ERR_NO_SUCH_OBJECT)) { DEBUG(5, ("warning: searching for domain DN %s failed: %s\n", @@ -700,7 +700,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ctr2->array[i].server_guid = samdb_result_guid(res->msgs[i], "objectGUID"); - ctr2->array[i].is_enabled = True; + ctr2->array[i].is_enabled = true; } break; -- cgit From 3f2ca10d2d86f0cd64822f9e5f95633f41263237 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 13 Nov 2007 22:38:55 +0100 Subject: r25940: Rework the samldb and templates handling. Templates just don't belong in the sam.ldb, as they don't obey any of the other rules. This moves them to a seperate templates.ldb. In samldb, this patch reworks the duplicate SID and Name detection code, to use ldb_search_exp_fmt() rather than gendb_search. This returns far more useful errors, which we now handle and report better. The call to samdb_search_for_parent_domain() has been moved in samldb, to allow both the account and SID uniqueness checks to be in the same domain. This function also returns better errors. dcesrv_drsuapi.c is updated for the new prototype of samdb_search_for_parent_domain() Andrew Bartlett (This used to be commit f1ab90c88c782c693b41795d70368650806543b5) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index d8b361ca27..21c4d36e9b 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -570,6 +570,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, LDB_SCOPE_BASE, attrs_account_1, "objectClass=computer"); if (ret == LDB_SUCCESS && res_account->count == 1) { + const char *errstr; ctr1->array[i].dns_name = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); ctr1->array[i].netbios_name @@ -578,10 +579,11 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta = ldb_dn_get_linearized(res_account->msgs[0]->dn); /* Determine if this is the PDC */ - domain_dn = samdb_search_for_parent_domain(b_state->sam_ctx, - mem_ctx, res_account->msgs[0]->dn); + ret = samdb_search_for_parent_domain(b_state->sam_ctx, + mem_ctx, res_account->msgs[0]->dn, + &domain_dn, &errstr); - if (domain_dn) { + if (ret == LDB_SUCCESS) { ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", ldb_dn_get_linearized(ntds_dn)); @@ -664,6 +666,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, LDB_SCOPE_BASE, attrs_account_2, "objectClass=computer"); if (ret == LDB_SUCCESS && res_account->count == 1) { + const char *errstr; ctr2->array[i].dns_name = ldb_msg_find_attr_as_string(res_account->msgs[0], "dNSHostName", NULL); ctr2->array[i].netbios_name @@ -673,10 +676,11 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta = samdb_result_guid(res_account->msgs[0], "objectGUID"); /* Determine if this is the PDC */ - domain_dn = samdb_search_for_parent_domain(b_state->sam_ctx, - mem_ctx, res_account->msgs[0]->dn); + ret = samdb_search_for_parent_domain(b_state->sam_ctx, + mem_ctx, res_account->msgs[0]->dn, + &domain_dn, &errstr); - if (domain_dn) { + if (ret == LDB_SUCCESS) { ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s", ldb_dn_get_linearized(ntds_dn)); -- cgit From 25143a26481e735c46c61aa3673eb4858a7819be Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 27 Nov 2007 01:25:11 +0100 Subject: r26135: Remove samdb_add(), samdb_delete() and samdb_modify(), which were just wrappers to ldb_add() etc. samdb_replace() remains, as it sets flags on all entries as 'replace'. Andrew Bartlett (This used to be commit 09c0faa5b7e1a560bf13b99a2584012a47377bb6) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 21c4d36e9b..a0663a588d 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -431,7 +431,7 @@ static WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_cal /* Apply to database */ - ret = samdb_modify(b_state->sam_ctx, mem_ctx, msg); + ret = ldb_modify(b_state->sam_ctx, msg); if (ret != 0) { DEBUG(0,("Failed to modify SPNs on %s: %s\n", ldb_dn_get_linearized(msg->dn), -- cgit From f4a1083cf9f64b4d2b65b68942e93861409ea90f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 2 Dec 2007 17:09:52 +0100 Subject: r26227: Make loadparm_context part of a server task, move loadparm_contexts further up the call stack. (This used to be commit 0721a07aada6a1fae6dcbd610b8783df57d7bbad) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index a0663a588d..cf2d259907 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -27,6 +27,7 @@ #include "rpc_server/drsuapi/dcesrv_drsuapi.h" #include "dsdb/samdb/samdb.h" #include "lib/ldb/include/ldb_errors.h" +#include "param/param.h" /* drsuapi_DsBind @@ -57,7 +58,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C /* * connect to the samdb */ - b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->auth_state.session_info); + b_state->sam_ctx = samdb_connect(b_state, global_loadparm, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { return WERR_FOOBAR; } -- cgit From 57f20ccd242e45ff91850341594aa040d113c19e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 4 Dec 2007 20:05:00 +0100 Subject: r26296: Store loadparm context in DCE/RPC server context. (This used to be commit fc1f4d2d65d4c983cba5421e7ffb64dd75482860) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index cf2d259907..a97b93a051 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -58,7 +58,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C /* * connect to the samdb */ - b_state->sam_ctx = samdb_connect(b_state, global_loadparm, dce_call->conn->auth_state.session_info); + b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->dce_ctx->lp_ctx, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { return WERR_FOOBAR; } -- cgit From 3e75f222bcdf114238cc4f2bcc61332dc059135f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 19 Dec 2007 23:27:42 +0100 Subject: r26539: Remove unnecessary statics. (This used to be commit e53e79eebef3ece6978f0a2b4a1ee0a0814bb5d2) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index a97b93a051..9142495a8a 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -41,10 +41,10 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C struct GUID site_guid; struct ldb_result *site_res; struct ldb_dn *server_site_dn; - static const char *site_attrs[] = { "objectGUID", NULL }; + const char *site_attrs[] = { "objectGUID", NULL }; struct ldb_result *ntds_res; struct ldb_dn *ntds_dn; - static const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; + const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; uint32_t u1; uint32_t repl_epoch; int ret; -- cgit From 0500b87092540d300b4e021a0fb95ce16a44fbd2 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 20 Dec 2007 00:02:15 +0100 Subject: r26540: Revert my previous commit after concerns raised by Andrew. (This used to be commit 6ac86f8be7d9a8c5ab396a93e6d1e6819e11f173) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index 9142495a8a..a97b93a051 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -41,10 +41,10 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C struct GUID site_guid; struct ldb_result *site_res; struct ldb_dn *server_site_dn; - const char *site_attrs[] = { "objectGUID", NULL }; + static const char *site_attrs[] = { "objectGUID", NULL }; struct ldb_result *ntds_res; struct ldb_dn *ntds_dn; - const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; + static const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; uint32_t u1; uint32_t repl_epoch; int ret; -- cgit From 21fc7673780aa1d7c0caab7b17ff9171238913ba Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 17 Apr 2008 12:23:44 +0200 Subject: Specify event_context to ldb_wrap_connect explicitly. (This used to be commit b4e1ae07a284c044704322446c94351c2decff91) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index a97b93a051..e0a222e767 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -58,7 +58,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C /* * connect to the samdb */ - b_state->sam_ctx = samdb_connect(b_state, dce_call->conn->dce_ctx->lp_ctx, dce_call->conn->auth_state.session_info); + b_state->sam_ctx = samdb_connect(b_state, dce_call->event_ctx, dce_call->conn->dce_ctx->lp_ctx, dce_call->conn->auth_state.session_info); if (!b_state->sam_ctx) { return WERR_FOOBAR; } -- cgit From 7fba6c649ba36ca5b76dcfed7b773567c9933077 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Tue, 22 Jul 2008 15:35:23 +0200 Subject: Change occurrences of the u1 member of DsBindInfo* to pid after idl change. Michael (This used to be commit b91bbc5fe4a47e5823be6be5f2f203f1f14105de) --- source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'source4/rpc_server/drsuapi/dcesrv_drsuapi.c') diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c index e0a222e767..bbb78cb778 100644 --- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c +++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c @@ -45,7 +45,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C struct ldb_result *ntds_res; struct ldb_dn *ntds_dn; static const char *ntds_attrs[] = { "ms-DS-ReplicationEpoch", NULL }; - uint32_t u1; + uint32_t pid; uint32_t repl_epoch; int ret; @@ -98,9 +98,12 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C repl_epoch = samdb_result_uint(ntds_res->msgs[0], "ms-DS-ReplicationEpoch", 0); /* - * TODO: find out what this is... + * The "process identifier" of the client. + * According to the WSPP docs, sectin 5.35, this is + * for informational and debugging purposes only. + * The assignment is implementation specific. */ - u1 = 0; + pid = 0; /* * store the clients bind_guid @@ -119,7 +122,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C info24 = &r->in.bind_info->info.info24; b_state->remote_info28.supported_extensions = info24->supported_extensions; b_state->remote_info28.site_guid = info24->site_guid; - b_state->remote_info28.u1 = info24->u1; + b_state->remote_info28.pid = info24->pid; b_state->remote_info28.repl_epoch = 0; break; } @@ -171,8 +174,8 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C b_state->local_info28.supported_extensions |= DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS; #endif b_state->local_info28.site_guid = site_guid; - b_state->local_info28.u1 = u1; - b_state->local_info28.repl_epoch = repl_epoch; + b_state->local_info28.pid = pid; + b_state->local_info28.repl_epoch = repl_epoch; /* * allocate the return bind_info -- cgit