summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
Diffstat (limited to 'source4')
-rw-r--r--source4/include/structs.h2
-rw-r--r--source4/librpc/config.mk5
-rw-r--r--source4/librpc/idl/drsuapi.idl9
-rw-r--r--source4/librpc/ndr/ndr_drsuapi.c51
4 files changed, 61 insertions, 6 deletions
diff --git a/source4/include/structs.h b/source4/include/structs.h
index e506bd3516..5395eebf60 100644
--- a/source4/include/structs.h
+++ b/source4/include/structs.h
@@ -29,6 +29,8 @@ struct spoolss_EnumJobs;
struct spoolss_EnumPrinterDrivers;
struct spoolss_EnumPorts;
+struct drsuapi_DsGetNCChangesInfo1;
+
struct MULTI_QI;
struct COSERVERINFO;
diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk
index e5660af907..bf34207872 100644
--- a/source4/librpc/config.mk
+++ b/source4/librpc/config.mk
@@ -93,7 +93,10 @@ REQUIRED_SUBSYSTEMS = LIBNDR
INIT_FUNCTION = dcerpc_drsuapi_init
INIT_OBJ_FILES = librpc/gen_ndr/ndr_drsuapi.o
NOPROTO = YES
-REQUIRED_SUBSYSTEMS = LIBNDR
+REQUIRED_SUBSYSTEMS = LIBNDR NDR_DRSUAPI_PRINT
+
+[SUBSYSTEM::NDR_DRSUAPI_PRINT]
+INIT_OBJ_FILES = librpc/ndr/ndr_drsuapi.o
[SUBSYSTEM::NDR_DRSBLOBS]
INIT_FUNCTION = dcerpc_drsblobs_init
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index c4b94ba850..1329332d6b 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -256,7 +256,7 @@ interface drsuapi
hyper usn;
} drsuapi_DsReplicaMetaData;
- typedef struct {
+ typedef [public] struct {
[range(0,1048576)] uint32 count;
[size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
} drsuapi_DsReplicaMetaDataCtr;
@@ -288,15 +288,14 @@ interface drsuapi
[size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes[];
} drsuapi_DsReplicaAttributeCtr;
- typedef struct {
+ typedef [public] struct {
drsuapi_DsReplicaObjectIdentifier *identifier;
uint32 unknown1;
drsuapi_DsReplicaAttributeCtr attribute_ctr;
} drsuapi_DsReplicaObject;
- typedef struct {
- /* TODO: fix ndr_print for next_info! */
- [print_option(linked_list_next)] drsuapi_DsGetNCChangesInfo1 *next;
+ typedef [noprint] struct {
+ drsuapi_DsGetNCChangesInfo1 *next;
drsuapi_DsReplicaObject object;
uint32 unknown1;
GUID *guid;
diff --git a/source4/librpc/ndr/ndr_drsuapi.c b/source4/librpc/ndr/ndr_drsuapi.c
new file mode 100644
index 0000000000..5a39c9c5e5
--- /dev/null
+++ b/source4/librpc/ndr/ndr_drsuapi.c
@@ -0,0 +1,51 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ routines for printing some linked list structs in DRSUAPI
+
+ Copyright (C) Stefan (metze) Metzmacher 2005
+
+ 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 "librpc/gen_ndr/ndr_drsuapi.h"
+
+
+void ndr_print_drsuapi_DsGetNCChangesInfo1(struct ndr_print *ndr, const char *name, struct drsuapi_DsGetNCChangesInfo1 *r)
+{
+ ndr_print_struct(ndr, name, "drsuapi_DsGetNCChangesInfo1");
+ ndr->depth++;
+ ndr_print_ptr(ndr, "next", r->next);
+ ndr_print_drsuapi_DsReplicaObject(ndr, "object", &r->object);
+ ndr_print_uint32(ndr, "unknown1", r->unknown1);
+ ndr_print_ptr(ndr, "guid", r->guid);
+ ndr->depth++;
+ if (r->guid) {
+ ndr_print_GUID(ndr, "guid", r->guid);
+ }
+ ndr->depth--;
+ ndr_print_ptr(ndr, "meta_data_ctr", r->meta_data_ctr);
+ ndr->depth++;
+ if (r->meta_data_ctr) {
+ ndr_print_drsuapi_DsReplicaMetaDataCtr(ndr, "meta_data_ctr", r->meta_data_ctr);
+ }
+ ndr->depth--;
+ ndr->depth--;
+ if (r->next) {
+ ndr_print_drsuapi_DsGetNCChangesInfo1(ndr, "next", r->next);
+ }
+}