diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/include/structs.h | 2 | ||||
-rw-r--r-- | source4/librpc/config.mk | 5 | ||||
-rw-r--r-- | source4/librpc/idl/drsuapi.idl | 9 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_drsuapi.c | 51 |
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); + } +} |