From 838597393580aea0dcc8f461e30928bddd6f87c9 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 23 Aug 2005 13:12:07 +0000 Subject: r9518: - remove the subcontext_size() hack from rev 9509 as it isn't needed - parse some more DsAddEntry() errors - add some more attid constands so that all attribute that are needed for a DsAddEntry in the DC Domain Join are mapped - add value() for __ndr_size, to more attribute container, so that the caller doesn't need to fill them in, that was the reason for getting an NDR_FAULT metze (This used to be commit a9a1a6f861c8db626b3232f057ef0b9c3d0ad1b0) --- source4/include/structs.h | 2 -- source4/librpc/idl/drsuapi.idl | 58 ++++++++++++++++++++++++++++++---------- source4/librpc/ndr/ndr_drsuapi.c | 15 ----------- 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/source4/include/structs.h b/source4/include/structs.h index eec211cec3..f9c4e65591 100644 --- a/source4/include/structs.h +++ b/source4/include/structs.h @@ -80,8 +80,6 @@ struct ntptr_GenericHandle; struct drsuapi_DsCrackNames; struct drsuapi_DsReplicaObjectListItem; struct drsuapi_DsReplicaObjectListItemEx; -struct drsuapi_DsAttributeValueDNString; -struct drsuapi_DsReplicaObjectIdentifier3; struct MULTI_QI; struct COSERVERINFO; diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl index 46b647db78..289f5110e2 100644 --- a/source4/librpc/idl/drsuapi.idl +++ b/source4/librpc/idl/drsuapi.idl @@ -365,21 +365,28 @@ interface drsuapi * 2.5.5.17 => dom_sid */ - typedef [v1_enum] enum { + typedef [flag(NDR_PAHEX),v1_enum] enum { DRSUAPI_OBJECTCLASS_top = 0x00010000 } drsuapi_DsObjectClassId; - typedef [v1_enum,public] enum { + typedef [flag(NDR_PAHEX),v1_enum,public] enum { DRSUAPI_ATTRIBUTE_objectClass = 0x00000000, DRSUAPI_ATTRIBUTE_description = 0x0000000d, + DRSUAPI_ATTRIBUTE_hasMasterNCs = 0x0002000e, DRSUAPI_ATTRIBUTE_invocationId = 0x00020073, + DRSUAPI_ATTRIBUTE_dMDLocation = 0x00020024, DRSUAPI_ATTRIBUTE_ntSecurityDescriptor = 0x00020119, DRSUAPI_ATTRIBUTE_objectSid = 0x00090092, DRSUAPI_ATTRIBUTE_dBCSPwd = 0x00090037,/* lmPwdHash */ DRSUAPI_ATTRIBUTE_unicodePwd = 0x0009005a,/* ntPwdHash */ DRSUAPI_ATTRIBUTE_ntPwdHistory = 0x0009005e, DRSUAPI_ATTRIBUTE_lmPwdHistory = 0x000900a0, - DRSUAPI_ATTRIBUTE_objectCategory = 0x0009030e + DRSUAPI_ATTRIBUTE_systemFlags = 0x00090177, + DRSUAPI_ATTRIBUTE_serverReference = 0x00090203, + DRSUAPI_ATTRIBUTE_objectCategory = 0x0009030e, + DRSUAPI_ATTRIBUTE_msDS_Behavior_Version = 0x000905b3, + DRSUAPI_ATTRIBUTE_msDS_HasDomainNCs = 0x0009071c, + DRSUAPI_ATTRIBUTE_msDS_hasMasterNCs = 0x0009072c } drsuapi_DsAttributeId; /* Generic DATA_BLOB values */ @@ -395,7 +402,7 @@ interface drsuapi /* objectClass values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(4)] uint32 __ndr_size; [subcontext(4)] drsuapi_DsObjectClassId *objectClassId; } drsuapi_DsAttributeValueObjectClassId; @@ -406,7 +413,7 @@ interface drsuapi /* uint32 values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(4)] uint32 __ndr_size; [subcontext(4)] uint32 *value; } drsuapi_DsAttributeValueUINT32; @@ -436,8 +443,8 @@ interface drsuapi } drsuapi_DsReplicaObjectIdentifier3; 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; + [range(0,10485760),value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(object, ndr->flags))] uint32 __ndr_size; + [subcontext(4)] drsuapi_DsReplicaObjectIdentifier3 *object; } drsuapi_DsAttributeValueDNString; typedef struct { @@ -447,7 +454,7 @@ interface drsuapi /* GUID values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(ndr_size_GUID(guid, ndr->flags))] uint32 __ndr_size; [subcontext(4)] GUID *guid; } drsuapi_DsAttributeValueGUID; @@ -458,7 +465,7 @@ interface drsuapi /* SID values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(ndr_size_dom_sid(sid))] uint32 __ndr_size; [subcontext(4)] dom_sid *sid; } drsuapi_DsAttributeValueSID; @@ -469,7 +476,7 @@ interface drsuapi /* SecurityDescriptor values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(ndr_size_security_descriptor(sd))] uint32 __ndr_size; [subcontext(4)] security_descriptor *sd; } drsuapi_DsAttributeValueSecurityDescriptor; @@ -480,7 +487,7 @@ interface drsuapi /* NTTIME_1sec values */ typedef struct { - [range(0,10485760)] uint32 length; + [range(0,10485760),value(8)] uint32 __ndr_size; [subcontext(4)] NTTIME_1sec *time; } drsuapi_DsAttributeValueNTTIME_1sec; @@ -531,7 +538,7 @@ interface drsuapi [default] drsuapi_DsAttributeValueCtrDataBlob data_blob; } drsuapi_DsReplicaAttributeValueCtr; - typedef [flag(NDR_PAHEX)] struct { + typedef struct { drsuapi_DsAttributeId attid; [switch_is(attid)] drsuapi_DsReplicaAttributeValueCtr value_ctr; } drsuapi_DsReplicaAttribute; @@ -941,9 +948,32 @@ interface drsuapi uint16 unknown3; } drsuapi_DsAddEntryErrorInfoX; + typedef struct { + [range(0,10485760)] uint32 size; + [size_is(size)] uint8 *data; + } drsuapi_DsAddEntryExtraErrorBuffer; + + typedef struct { + drsuapi_DsAddEntryErrorInfoX error; + drsuapi_DsAttributeId attid; + uint32 unknown2; + drsuapi_DsAddEntryExtraErrorBuffer buffer; + } drsuapi_DsAddEntryExtraError1; + + typedef /*[noprint]*/ struct { + drsuapi_DsAddEntryErrorListItem1 *next; + drsuapi_DsAddEntryExtraError1 error; + } drsuapi_DsAddEntryErrorListItem1; + + typedef struct { + drsuapi_DsReplicaObjectIdentifier *id; + WERROR status; + drsuapi_DsAddEntryErrorListItem1 first; + } drsuapi_DsAddEntryErrorInfo1; + typedef [switch_type(uint32)] union { -/* [case(1)] drsuapi_DsAddEntryErrorInfo1 error1; - [case(2)] drsuapi_DsAddEntryErrorInfo2 error2; + [case(1)] drsuapi_DsAddEntryErrorInfo1 error1; +/* [case(2)] drsuapi_DsAddEntryErrorInfo2 error2; [case(3)] drsuapi_DsAddEntryErrorInfo3 error3; */ [case(4)] drsuapi_DsAddEntryErrorInfoX error4; [case(5)] drsuapi_DsAddEntryErrorInfoX error5; diff --git a/source4/librpc/ndr/ndr_drsuapi.c b/source4/librpc/ndr/ndr_drsuapi.c index f220966b9d..6f6dd74ea4 100644 --- a/source4/librpc/ndr/ndr_drsuapi.c +++ b/source4/librpc/ndr/ndr_drsuapi.c @@ -61,18 +61,3 @@ void ndr_print_drsuapi_DsReplicaObjectListItemEx(struct ndr_print *ndr, const ch 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; -} -- cgit