svn commit: samba r9509 - in branches/SAMBA_4_0/source: include librpc/idl librpc/ndr

metze at samba.org metze at samba.org
Tue Aug 23 09:28:38 GMT 2005


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;
+}



More information about the samba-cvs mailing list