Author: metze Date: 2005-08-23 09:28:37 +0000 (Tue, 23 Aug 2005) New Revision: 9509
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9509 Log: start to fix the pushing of drsuapi_DsAttributeValueDNString structs, this uses a trick with talloc_get_type() to workaround using [value()] vars in [subcontext_size()] metze Modified: branches/SAMBA_4_0/source/include/structs.h branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl branches/SAMBA_4_0/source/librpc/ndr/ndr_drsuapi.c Changeset: Modified: branches/SAMBA_4_0/source/include/structs.h =================================================================== --- branches/SAMBA_4_0/source/include/structs.h 2005-08-23 09:21:05 UTC (rev 9508) +++ branches/SAMBA_4_0/source/include/structs.h 2005-08-23 09:28:37 UTC (rev 9509) @@ -77,8 +77,11 @@ struct ntptr_context; struct ntptr_GenericHandle; +struct drsuapi_DsCrackNames; struct drsuapi_DsReplicaObjectListItem; struct drsuapi_DsReplicaObjectListItemEx; +struct drsuapi_DsAttributeValueDNString; +struct drsuapi_DsReplicaObjectIdentifier3; struct MULTI_QI; struct COSERVERINFO; @@ -87,8 +90,6 @@ struct epm_floor; struct epm_tower; -struct drsuapi_DsCrackNames; - struct PAC_BUFFER; struct PAC_DATA; Modified: branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl =================================================================== --- branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl 2005-08-23 09:21:05 UTC (rev 9508) +++ branches/SAMBA_4_0/source/librpc/idl/drsuapi.idl 2005-08-23 09:28:37 UTC (rev 9509) @@ -428,16 +428,16 @@ /* DN String values */ typedef [gensize] struct { - [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags)-4)] uint32 __ndr_size; + [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size; [value(ndr_length_dom_sid(&r->sid))] uint32 __ndr_size_sid; GUID guid; dom_sid28 sid; [flag(STR_SIZE4|STR_CHARLEN)] string dn; } drsuapi_DsReplicaObjectIdentifier3; - typedef struct { - [range(0,10485760)] uint32 length; - [subcontext(4)] drsuapi_DsReplicaObjectIdentifier3 *object; + typedef struct { + [range(0,10485760),value(_ndr_size_drsuapi_DsReplicaObjectIdentifier3(ndr, r, object, ndr->flags))] uint32 __ndr_size; + [subcontext(4),subcontext_size(_ndr_size_drsuapi_DsReplicaObjectIdentifier3(ndr, r, object, ndr->flags))] drsuapi_DsReplicaObjectIdentifier3 *object; } drsuapi_DsAttributeValueDNString; typedef struct { Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr_drsuapi.c =================================================================== --- branches/SAMBA_4_0/source/librpc/ndr/ndr_drsuapi.c 2005-08-23 09:21:05 UTC (rev 9508) +++ branches/SAMBA_4_0/source/librpc/ndr/ndr_drsuapi.c 2005-08-23 09:28:37 UTC (rev 9509) @@ -61,3 +61,18 @@ ndr_print_drsuapi_DsReplicaObjectListItemEx(ndr, "next_object", r->next_object); } } + +uint32_t _ndr_size_drsuapi_DsReplicaObjectIdentifier3(const void *ndr, + const struct drsuapi_DsAttributeValueDNString *dn, + const struct drsuapi_DsReplicaObjectIdentifier3 *id, + uint32_t flags) +{ + if (talloc_get_type(ndr, struct ndr_pull)) { + return dn->__ndr_size; + } else if (talloc_get_type(ndr, struct ndr_push)) { + return ndr_size_drsuapi_DsReplicaObjectIdentifier3(id, flags) + 2; + } else if (talloc_get_type(ndr, struct ndr_print)) { + return ndr_size_drsuapi_DsReplicaObjectIdentifier3(id, flags) + 2; + } + return 0; +}
