summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/idl/drsuapi.idl55
-rw-r--r--source4/librpc/ndr/ndr_drsuapi.c21
2 files changed, 66 insertions, 10 deletions
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index 1329332d6b..dbeaa3ccab 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -114,7 +114,7 @@ interface drsuapi
/*****************/
/* Function 0x02 */
- typedef [gensize,flag(NDR_PAHEX)] struct {
+ typedef [gensize] struct {
[value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size;
[value(ndr_length_dom_sid(&r->sid))] uint32 __ndr_size_sid;
GUID guid;
@@ -295,12 +295,12 @@ interface drsuapi
} drsuapi_DsReplicaObject;
typedef [noprint] struct {
- drsuapi_DsGetNCChangesInfo1 *next;
+ drsuapi_DsReplicaObjectListItemEx *next_object;
drsuapi_DsReplicaObject object;
uint32 unknown1;
GUID *guid;
drsuapi_DsReplicaMetaDataCtr *meta_data_ctr;
- } drsuapi_DsGetNCChangesInfo1;
+ } drsuapi_DsReplicaObjectListItemEx;
typedef struct {
GUID guid1;
@@ -311,7 +311,7 @@ interface drsuapi
drsuapi_DsReplicaCoursorEx05Ctr *coursor_ex;
drsuapi_DsGetNCChangesRequest_Ctr12 ctr12;
uint32 u1[3];
- drsuapi_DsGetNCChangesInfo1 *info1;
+ drsuapi_DsReplicaObjectListItemEx *first_object;
uint32 u2;
} drsuapi_DsGetNCChangesCtr1;
@@ -630,7 +630,52 @@ interface drsuapi
/*****************/
/* Function 0x11 */
- WERROR drsuapi_DsAddEntry();
+ typedef [noprint] struct {
+ drsuapi_DsReplicaObjectListItem *next_object;
+ drsuapi_DsReplicaObject object;
+ } drsuapi_DsReplicaObjectListItem;
+
+ typedef struct {
+ drsuapi_DsReplicaObjectListItem first_object;
+ } drsuapi_DsAddEntryRequest2;
+
+ typedef [switch_type(int32)] union {
+ [case(2)] drsuapi_DsAddEntryRequest2 req2;
+ } drsuapi_DsAddEntryRequest;
+
+ typedef struct {
+ uint32 unknown1;
+ uint32 unknown2;
+ uint32 unknown3;
+ } drsuapi_DsAddEntryCtr3Info1;
+
+ typedef [switch_type(uint32)] union {
+ [case(1)] drsuapi_DsAddEntryCtr3Info1 info1;
+ } drsuapi_DsAddEntryCtr3Info;
+
+ typedef struct {
+ GUID guid;
+ [subcontext_size(28),subcontext(0)] dom_sid sid;
+ } drsuapi_DsReplicaObjectIdentifier2;
+
+ typedef struct {
+ drsuapi_DsReplicaObjectIdentifier *id;
+ uint32 level;
+ [switch_is(level)] drsuapi_DsAddEntryCtr3Info *info;
+ [range(0,10000)] uint32 count;
+ [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects[];
+ } drsuapi_DsAddEntryCtr3;
+
+ typedef [switch_type(int32)] union {
+ [case(3)] drsuapi_DsAddEntryCtr3 ctr3;
+ } drsuapi_DsAddEntryCtr;
+
+ WERROR drsuapi_DsAddEntry(
+ [in,ref] policy_handle *bind_handle,
+ [in,out] int32 level,
+ [in,switch_is(level)] drsuapi_DsAddEntryRequest req,
+ [out,switch_is(level)] drsuapi_DsAddEntryCtr ctr
+ );
/*****************/
/* Function 0x12 */
diff --git a/source4/librpc/ndr/ndr_drsuapi.c b/source4/librpc/ndr/ndr_drsuapi.c
index 5a39c9c5e5..9654e63720 100644
--- a/source4/librpc/ndr/ndr_drsuapi.c
+++ b/source4/librpc/ndr/ndr_drsuapi.c
@@ -24,12 +24,23 @@
#include "includes.h"
#include "librpc/gen_ndr/ndr_drsuapi.h"
+void ndr_print_drsuapi_DsReplicaObjectListItem(struct ndr_print *ndr, const char *name, struct drsuapi_DsReplicaObjectListItem *r)
+{
+ ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectListItem");
+ ndr->depth++;
+ ndr_print_ptr(ndr, "next_object", r->next_object);
+ ndr_print_drsuapi_DsReplicaObject(ndr, "object", &r->object);
+ ndr->depth--;
+ if (r->next_object) {
+ ndr_print_drsuapi_DsReplicaObjectListItem(ndr, "next_object", r->next_object);
+ }
+}
-void ndr_print_drsuapi_DsGetNCChangesInfo1(struct ndr_print *ndr, const char *name, struct drsuapi_DsGetNCChangesInfo1 *r)
+void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const char *name, struct drsuapi_DsReplicaObjectListItemEx *r)
{
- ndr_print_struct(ndr, name, "drsuapi_DsGetNCChangesInfo1");
+ ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectListItemEx");
ndr->depth++;
- ndr_print_ptr(ndr, "next", r->next);
+ ndr_print_ptr(ndr, "next_object", r->next_object);
ndr_print_drsuapi_DsReplicaObject(ndr, "object", &r->object);
ndr_print_uint32(ndr, "unknown1", r->unknown1);
ndr_print_ptr(ndr, "guid", r->guid);
@@ -45,7 +56,7 @@ void ndr_print_drsuapi_DsGetNCChangesInfo1(struct ndr_print *ndr, const char *na
}
ndr->depth--;
ndr->depth--;
- if (r->next) {
- ndr_print_drsuapi_DsGetNCChangesInfo1(ndr, "next", r->next);
+ if (r->next_object) {
+ ndr_print_drsuapi_DsReplicaObjectListItemEx(ndr, "next_object", r->next_object);
}
}