r5800: fix recursiv printing in ndr_print_DsGetNCChangesInfo1()
authorStefan Metzmacher <metze@samba.org>
Tue, 15 Mar 2005 16:05:43 +0000 (16:05 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:11:04 +0000 (13:11 -0500)
metze

source/include/structs.h
source/librpc/config.mk
source/librpc/idl/drsuapi.idl
source/librpc/ndr/ndr_drsuapi.c [new file with mode: 0644]

index e506bd35167236f425a73bb53bc6e0e6c54644a2..5395eebf6057c4f8bdb77ab4c3f24dd350a1dbfe 100644 (file)
@@ -29,6 +29,8 @@ struct spoolss_EnumJobs;
 struct spoolss_EnumPrinterDrivers;
 struct spoolss_EnumPorts;
 
+struct drsuapi_DsGetNCChangesInfo1;
+
 struct MULTI_QI;
 struct COSERVERINFO;
 
index e5660af9075ea01fb4a9685cf85bb52a31933cb9..bf34207872e21ecae2be72b3075e1fe014f9b118 100644 (file)
@@ -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
index c4b94ba850bf049983b4e8001ba31f02272491c9..1329332d6b3b839923711f24ec3eae25d4131f2b 100644 (file)
@@ -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/source/librpc/ndr/ndr_drsuapi.c b/source/librpc/ndr/ndr_drsuapi.c
new file mode 100644 (file)
index 0000000..5a39c9c
--- /dev/null
@@ -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);
+       }
+}