*/
#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"
/*
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;
struct dcesrv_handle *handle;
+ struct drsuapi_DsBindInfoCtr *bind_info;
+ struct GUID site_guid;
- 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);
- if (!b_state) {
- return NT_STATUS_NO_MEMORY;
- }
+ 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) {
talloc_free(b_state);
- return NT_STATUS_NO_MEMORY;
+ return WERR_NOMEM;
}
handle->data = b_state;
handle->destroy = drsuapi_handle_destroy;
+ bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfoCtr);
+ WERR_TALLOC_CHECK(bind_info);
+
+ 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;
- 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
ZERO_STRUCTP(r->out.bind_handle);
- return NT_STATUS_OK;
+ return WERR_OK;
}
/*
- DRSUAPI_REPLICA_SYNC
+ drsuapi_DsReplicaSync
*/
-static NTSTATUS 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: implement this call correct!
+ * for now we just say yes,
+ * because we have no output parameter
+ */
+ return WERR_OK;
}
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);
/*
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
+ drsuapi_DsWriteAccountSpn
*/
-static NTSTATUS 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);
}
/*
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);
/*
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);
/*
- 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 WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+ struct drsuapi_DsGetDomainControllerInfo *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,
+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);
/*
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);
/*
- DRSUAPI_GET_REPL_INFO
+ drsuapi_DsReplicaGetInfo
*/
-static NTSTATUS 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);
}
/*
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);
/*
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);
/*
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);
/*
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);
/*
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);