r3999: - reply with the same DsBindInfo blob as w2k3 in the server function
authorStefan Metzmacher <metze@samba.org>
Mon, 29 Nov 2004 11:13:56 +0000 (11:13 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:06:12 +0000 (13:06 -0500)
- 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/librpc/idl/drsuapi.idl
source4/rpc_server/drsuapi/dcesrv_drsuapi.c

index 481c1a1de13d6f2077bff4303247ab0697a8c8b8..b4784da95b9e52c2db7191f0080faae057b04c88 100644 (file)
@@ -20,6 +20,18 @@ interface drsuapi
        /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work */
        const string DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d";
 
+       /* this are the bind info blobs returned (seemed to be const):
+               w2k3    7ffbff1f81a6ff5d80139441a372e9b779d70268f801000000000000
+               w2k     7ffb1f00cb7fb9102391c143bda81fc90e0ff452f4000000
+       */
+       const uint8 DRSUAPI_DS_BIND_INFO_RESPONSE_W2K3[] = {    0x7f,0xfb,0xff,0x1f,0x81,0xa6,0xff,0x5d,
+                                                               0x80,0x13,0x94,0x41,0xa3,0x72,0xe9,0xb7,
+                                                               0x79,0xd7,0x02,0x68,0xf8,0x01,0x00,0x00,
+                                                               0x00,0x00,0x00,0x00};
+       const uint8 DRSUAPI_DS_BIND_INFO_RESPONSE_W2K[] = {     0x7f,0xfb,0x1f,0x00,0xcb,0x7f,0xb9,0x10,
+                                                               0x23,0x91,0xc1,0x43,0xbd,0xa8,0x1f,0xc9,
+                                                               0x0e,0x0f,0xf4,0x52,0xf4,0x00,0x00,0x00};
+
        WERROR drsuapi_DsBind(
                [in]        GUID *bind_guid,
                [in,out]    drsuapi_DsBindInfo *bind_info,
@@ -33,8 +45,31 @@ interface drsuapi
                );
 
        /*****************/
-        /* Function 0x02 */
-       WERROR DRSUAPI_REPLICA_SYNC();
+       /* Function 0x02 */
+       typedef struct {
+               uint32 unknown1;
+               uint32 unknown2;
+               GUID guid1;
+               [size_is(28)] uint8 unknown3[28];
+               [flag(STR_LEN4|STR_CHARLEN)] string nc_dn;
+       } drsuapi_DsReplicaSyncRequest1Info;
+
+       typedef struct {
+               drsuapi_DsReplicaSyncRequest1Info *info;
+               GUID guid1;
+               asclstr string1;
+               uint32 unknown1;
+       } drsuapi_DsReplicaSyncRequest1;
+
+       typedef union {
+               [case(1)] drsuapi_DsReplicaSyncRequest1 req1;
+       } drsuapi_DsReplicaSyncRequest;
+
+       WERROR drsuapi_DsReplicaSync(
+               [in,ref] policy_handle *bind_handle,
+               [in] uint32 level,
+               [in,switch_is(level)] drsuapi_DsReplicaSyncRequest req
+               );
 
        /*****************/
         /* Function 0x03 */
index eb38a22f43e55db8fb74b23cc966d6a8b5c465aa..f033c07ff776e35ad09b6e15ccfb54f11ef348e4 100644 (file)
@@ -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;
 }