summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-08-23 13:12:07 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:34:26 -0500
commit838597393580aea0dcc8f461e30928bddd6f87c9 (patch)
tree558e4d0154aedffe412b3271a3ba58afa432b46a
parente987658582b4c726c461bfb0230ec2db53a032d2 (diff)
downloadsamba-838597393580aea0dcc8f461e30928bddd6f87c9.tar.gz
samba-838597393580aea0dcc8f461e30928bddd6f87c9.tar.bz2
samba-838597393580aea0dcc8f461e30928bddd6f87c9.zip
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)
-rw-r--r--source4/include/structs.h2
-rw-r--r--source4/librpc/idl/drsuapi.idl58
-rw-r--r--source4/librpc/ndr/ndr_drsuapi.c15
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;
-}