summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/include/doserr.h3
-rw-r--r--source4/librpc/idl/drsuapi.idl50
-rw-r--r--source4/rpc_server/drsuapi/dcesrv_drsuapi.c62
-rw-r--r--source4/rpc_server/drsuapi/drsuapi_cracknames.c36
-rw-r--r--source4/torture/rpc/drsuapi.c146
5 files changed, 201 insertions, 96 deletions
diff --git a/source4/include/doserr.h b/source4/include/doserr.h
index e3582889d8..ffaad7f936 100644
--- a/source4/include/doserr.h
+++ b/source4/include/doserr.h
@@ -231,6 +231,9 @@
#define WERR_DFS_INTERNAL_ERROR W_ERROR(NERR_BASE+590)
#define WERR_DFS_CANT_CREATE_JUNCT W_ERROR(NERR_BASE+569)
+/* DS errors */
+#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208d)
+
#define WERR_FOOBAR WERR_GENERAL_FAILURE
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index 4a0cc7297e..f933437edb 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -17,7 +17,7 @@ interface drsuapi
[size_is(length)] uint8 data[];
} drsuapi_DsBindInfo;
- NTSTATUS drsuapi_DsBind(
+ WERROR drsuapi_DsBind(
[in] GUID *server_guid,
[in,out] drsuapi_DsBindInfo *bind_info,
[out,ref] policy_handle *bind_handle
@@ -25,49 +25,49 @@ interface drsuapi
/*****************/
/* Function 0x01 */
- NTSTATUS drsuapi_DsUnbind(
+ WERROR drsuapi_DsUnbind(
[in,out,ref] policy_handle *bind_handle
);
/*****************/
/* Function 0x02 */
- NTSTATUS DRSUAPI_REPLICA_SYNC();
+ WERROR DRSUAPI_REPLICA_SYNC();
/*****************/
/* Function 0x03 */
- NTSTATUS DRSUAPI_GET_NC_CHANGES();
+ WERROR DRSUAPI_GET_NC_CHANGES();
/*****************/
/* Function 0x04 */
- NTSTATUS DRSUAPI_UPDATE_REFS();
+ WERROR DRSUAPI_UPDATE_REFS();
/*****************/
/* Function 0x05 */
- NTSTATUS DRSUAPI_REPLICA_ADD();
+ WERROR DRSUAPI_REPLICA_ADD();
/*****************/
/* Function 0x06 */
- NTSTATUS DRSUAPI_REPLICA_DEL();
+ WERROR DRSUAPI_REPLICA_DEL();
/*****************/
/* Function 0x07 */
- NTSTATUS DRSUAPI_REPLICA_MODIFY();
+ WERROR DRSUAPI_REPLICA_MODIFY();
/*****************/
/* Function 0x08 */
- NTSTATUS DRSUAPI_VERIFY_NAMES();
+ WERROR DRSUAPI_VERIFY_NAMES();
/*****************/
/* Function 0x09 */
- NTSTATUS DRSUAPI_GET_MEMBERSHIPS();
+ WERROR DRSUAPI_GET_MEMBERSHIPS();
/*****************/
/* Function 0x0a */
- NTSTATUS DRSUAPI_INTER_DOMAIN_MOVE();
+ WERROR DRSUAPI_INTER_DOMAIN_MOVE();
/*****************/
/* Function 0x0b */
- NTSTATUS DRSUAPI_GET_NT4_CHANGELOG();
+ WERROR DRSUAPI_GET_NT4_CHANGELOG();
/*****************/
/* Function 0x0c */
@@ -137,7 +137,7 @@ interface drsuapi
[case(1)] drsuapi_DsNameCtr1 *ctr1;
} drsuapi_DsNameCtr;
- NTSTATUS drsuapi_DsCrackNames(
+ WERROR drsuapi_DsCrackNames(
[in,ref] policy_handle *bind_handle,
[in, out] uint32 level,
[in,switch_is(level)] drsuapi_DsNameRequest req,
@@ -146,15 +146,15 @@ interface drsuapi
/*****************/
/* Function 0x0d */
- NTSTATUS DRSUAPI_WRITE_SPN();
+ WERROR DRSUAPI_WRITE_SPN();
/*****************/
/* Function 0x0e */
- NTSTATUS DRSUAPI_REMOVE_DS_SERVER();
+ WERROR DRSUAPI_REMOVE_DS_SERVER();
/*****************/
/* Function 0x0f */
- NTSTATUS DRSUAPI_REMOVE_DS_DOMAIN();
+ WERROR DRSUAPI_REMOVE_DS_DOMAIN();
/*****************/
/* Function 0x10 */
@@ -226,7 +226,7 @@ interface drsuapi
} drsuapi_DsGetDCInfoCtr;
/* maybe WERROR function */
- NTSTATUS drsuapi_DsGetDomainControllerInfo(
+ WERROR drsuapi_DsGetDomainControllerInfo(
[in,ref] policy_handle *bind_handle,
[in, out] int32 level,
[in,switch_is(level)] drsuapi_DsGetDCInfoRequest req,
@@ -235,33 +235,33 @@ interface drsuapi
/*****************/
/* Function 0x11 */
- NTSTATUS DRSUAPI_ADD_ENTRY();
+ WERROR DRSUAPI_ADD_ENTRY();
/*****************/
/* Function 0x12 */
- NTSTATUS DRSUAPI_EXECUTE_KCC();
+ WERROR DRSUAPI_EXECUTE_KCC();
/*****************/
/* Function 0x13 */
- NTSTATUS DRSUAPI_GET_REPL_INFO();
+ WERROR DRSUAPI_GET_REPL_INFO();
/*****************/
/* Function 0x14 */
- NTSTATUS DRSUAPI_ADD_SID_HISTORY();
+ WERROR DRSUAPI_ADD_SID_HISTORY();
/*****************/
/* Function 0x15 */
- NTSTATUS DRSUAPI_GET_MEMBERSHIPS2();
+ WERROR DRSUAPI_GET_MEMBERSHIPS2();
/*****************/
/* Function 0x16 */
- NTSTATUS DRSUAPI_REPLICA_VERIFY_OBJECTS();
+ WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS();
/*****************/
/* Function 0x17 */
- NTSTATUS DRSUAPI_GET_OBJECT_EXISTENCE();
+ WERROR DRSUAPI_GET_OBJECT_EXISTENCE();
/*****************/
/* Function 0x18 */
- NTSTATUS DRSUAPI_QUERY_SITES_BY_COST();
+ WERROR DRSUAPI_QUERY_SITES_BY_COST();
}
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);
diff --git a/source4/rpc_server/drsuapi/drsuapi_cracknames.c b/source4/rpc_server/drsuapi/drsuapi_cracknames.c
index 1a31d541ba..45b1b362c7 100644
--- a/source4/rpc_server/drsuapi/drsuapi_cracknames.c
+++ b/source4/rpc_server/drsuapi/drsuapi_cracknames.c
@@ -26,7 +26,7 @@
#include "rpc_server/drsuapi/dcesrv_drsuapi.h"
-static NTSTATUS DsCrackNameOneName(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ctx,
+static WERROR DsCrackNameOneName(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ctx,
uint32 format_offered, uint32 format_desired, const char *name,
struct drsuapi_DsNameInfo1 *info1)
{
@@ -41,53 +41,53 @@ static NTSTATUS DsCrackNameOneName(struct drsuapi_bind_state *b_state, TALLOC_CT
char *str;
str = talloc_asprintf(mem_ctx, "%s/", lp_realm());
- NTSTATUS_TALLOC_CHECK(str);
+ WERR_TALLOC_CHECK(str);
ret = strcasecmp(str, name);
talloc_free(str);
if (ret != 0) {
info1->status = DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
- return NT_STATUS_OK;
+ return WERR_OK;
}
info1->status = DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY;
info1->dns_domain_name = talloc_asprintf(mem_ctx, "%s", lp_realm());
- NTSTATUS_TALLOC_CHECK(info1->dns_domain_name);
+ WERR_TALLOC_CHECK(info1->dns_domain_name);
switch (format_desired) {
case DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT:
info1->status = DRSUAPI_DS_NAME_STATUS_OK;
info1->result_name = talloc_asprintf(mem_ctx, "%s\\",
lp_workgroup());
- NTSTATUS_TALLOC_CHECK(info1->result_name);
- return NT_STATUS_OK;
+ WERR_TALLOC_CHECK(info1->result_name);
+ return WERR_OK;
default:
- return NT_STATUS_OK;
+ return WERR_OK;
}
- return NT_STATUS_INVALID_PARAMETER;
+ return WERR_INVALID_PARAM;
}
default: {
info1->status = DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
- return NT_STATUS_OK;
+ return WERR_OK;
}
}
- return NT_STATUS_INVALID_PARAMETER;
+ return WERR_INVALID_PARAM;
}
/*
drsuapi_DsCrackNames
*/
-NTSTATUS dcesrv_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)
{
- NTSTATUS status;
+ 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(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE);
+ DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE);
b_state = h->data;
switch (r->in.level) {
@@ -97,14 +97,14 @@ NTSTATUS dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_
int i;
r->out.ctr.ctr1 = talloc_p(mem_ctx, struct drsuapi_DsNameCtr1);
- NTSTATUS_TALLOC_CHECK(r->out.ctr.ctr1);
+ WERR_TALLOC_CHECK(r->out.ctr.ctr1);
r->out.ctr.ctr1->count = 0;
r->out.ctr.ctr1->array = NULL;
count = r->in.req.req1.count;
names = talloc_array_p(mem_ctx, struct drsuapi_DsNameInfo1, count);
- NTSTATUS_TALLOC_CHECK(names);
+ WERR_TALLOC_CHECK(names);
for (i=0; i < count; i++) {
status = DsCrackNameOneName(b_state, mem_ctx,
@@ -112,7 +112,7 @@ NTSTATUS dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_
r->in.req.req1.format_desired,
r->in.req.req1.names[i].str,
&names[i]);
- if (!NT_STATUS_IS_OK(status)) {
+ if (!W_ERROR_IS_OK(status)) {
return status;
}
}
@@ -120,9 +120,9 @@ NTSTATUS dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TALLOC_
r->out.ctr.ctr1->count = count;
r->out.ctr.ctr1->array = names;
- return NT_STATUS_OK;
+ return WERR_OK;
}
}
- return NT_STATUS_INVALID_LEVEL;
+ return WERR_UNKNOWN_LEVEL;
}
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c
index a387aaa337..be1582e57f 100644
--- a/source4/torture/rpc/drsuapi.c
+++ b/source4/torture/rpc/drsuapi.c
@@ -34,13 +34,18 @@ static BOOL test_DsBind(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.bind_info = NULL;
r.out.bind_handle = bind_handle;
+ printf("testing DsBind\n");
+
status = dcerpc_drsuapi_DsBind(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsBind failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsBind failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsBind failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -72,13 +77,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT;
names[0].str = talloc_asprintf(mem_ctx, "%s/", lp_realm());
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -93,13 +104,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_FQDN_1779;
names[0].str = nt4_domain;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -113,13 +130,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_FQDN_1779;
names[0].str = talloc_asprintf(mem_ctx, "%s%s$", nt4_domain, dcerpc_server_name(p));
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -133,13 +156,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_CANONICAL;
names[0].str = FQDN_1779_name;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -149,13 +178,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_DISPLAY;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -165,13 +200,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_GUID;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -181,13 +222,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -197,13 +244,19 @@ static BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL;
+ printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ names[0].str, r.in.req.req1.format_desired);
+
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -223,72 +276,118 @@ static BOOL test_DsGetDCInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.bind_handle = bind_handle;
r.in.level = 1;
+
r.in.req.req1.domain_name = talloc_strdup(mem_ctx, lp_realm());
r.in.req.req1.level = 1;
+ printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
+ r.in.req.req1.level, r.in.req.req1.domain_name);
+
status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsGetDomainControllerInfo failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, win_errstr(r.out.result));
ret = False;
}
r.in.req.req1.level = 2;
+ printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
+ r.in.req.req1.level, r.in.req.req1.domain_name);
+
status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsGetDomainControllerInfo failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, win_errstr(r.out.result));
ret = False;
}
r.in.req.req1.level = -1;
+ printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
+ r.in.req.req1.level, r.in.req.req1.domain_name);
+
status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsGetDomainControllerInfo failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsGetDomainControllerInfo level %d\n"
+ " with dns domain failed - %s\n",
+ r.in.req.req1.level, win_errstr(r.out.result));
ret = False;
}
r.in.req.req1.domain_name = talloc_strdup(mem_ctx, lp_workgroup());
r.in.req.req1.level = 2;
+ printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
+ r.in.req.req1.level, r.in.req.req1.domain_name);
+
status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsGetDomainControllerInfo failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n"
+ " with netbios domain failed - %s\n",
+ r.in.req.req1.level, errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsGetDomainControllerInfo level %d\n"
+ " with netbios domain failed - %s\n",
+ r.in.req.req1.level, win_errstr(r.out.result));
ret = False;
}
r.in.req.req1.domain_name = "__UNKNOWN_DOMAIN__";
r.in.req.req1.level = 2;
+ printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n",
+ r.in.req.req1.level, r.in.req.req1.domain_name);
+
status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
-
- if (!NT_STATUS_EQUAL(status, NT_STATUS(0x0000208d))) {
- printf("drsuapi_DsGetDomainControllerInfo level %d with invalid domain name\n"
- " - %s != NTSTATUS[0x0000208d]\n",
- r.in.req.req1.level, errstr);
- ret = False;
- }
+ printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n"
+ " with invalid domain failed - %s\n",
+ r.in.req.req1.level, errstr);
+ ret = False;
+ } else if (!W_ERROR_EQUAL(r.out.result, WERR_DS_OBJ_NOT_FOUND)) {
+ printf("DsGetDomainControllerInfo level %d\n"
+ " with invalid domain not expected error (WERR_DS_OBJ_NOT_FOUND) - %s\n",
+ r.in.req.req1.level, win_errstr(r.out.result));
+ ret = False;
}
return ret;
@@ -304,13 +403,18 @@ static BOOL test_DsUnbind(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.bind_handle = bind_handle;
r.out.bind_handle = bind_handle;
+ printf("testing DsUnbind\n");
+
status = dcerpc_drsuapi_DsUnbind(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("drsuapi_DsUnbind failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsUnbind failed - %s\n", errstr);
+ ret = False;
+ } else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("DsBind failed - %s\n", win_errstr(r.out.result));
ret = False;
}