authservice("ldap"),
helpstring("Active Directory Replication"),
pointer_default(unique),
+ pointer_default_top(unique),
depends(security)
]
interface drsuapi
typedef [flag(NDR_PAHEX)] struct {
[range(0,10000)] uint32 length;
- [size_is(length)] uint8 *byte_array[];
+ [size_is(length)] uint8 *byte_array;
} drsuapi_DsGetNCChangesRequest_Ctr14;
typedef struct {
typedef struct {
[range(0,0x100000)] uint32 count;
- [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array[];
+ [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array;
} drsuapi_DsGetNCChangesRequest_Ctr12;
typedef struct {
[size_is(count)] drsuapi_DsReplicaCoursor2 coursors[];
} drsuapi_DsReplicaCoursor2CtrEx;
+ /*
+ * In DRSUAPI the objectClasses and attributes
+ * are identified by uint32 values, but in the schema
+ * they are identified by the governsID (objectClasses)
+ * and attributeID (attributes)
+ *
+ * the following table shows the mapping used between the two representations
+ * e.g. - objectClass 'nTDSDSA' has governsID: 1.2.840.113556.1.5.7000.47
+ * and a UINT32-ID of '0x0017002F'.
+ * - so the OID 1.2.840.113556.1.5.7000.47 is splitted into a
+ * OID-prefix: 1.2.840.113556.1.5.7000
+ * and a value: 47 => 0x2F
+ * - the mapping table gives a UINT32-prefix: 0x00170000
+ * - and the UINT32-ID is 0x0017002F = 0x00170000 | 0x2F
+ *
+ * OID-prefix => UINT32-Id prefix
+ *
+ * 2.5.4.* => 0x00000000 (standard attributes RFC2256 core.schema)
+ * 2.5.6.* => 0x00010000 (standard object classes RFC2256 core.schema)
+ * 1.2.840.113556.1.2.* => 0x00020000
+ * 1.2.840.113556.1.3.* => 0x00030000
+ * 1.2.840.113556.1.4.* => 0x00090000
+ * 1.2.840.113556.1.5.* => 0x000A0000
+ * 2.16.840.1.113730.3.* => 0x00140000
+ * 0.9.2342.19200300.100.1.* => 0x00150000
+ * 2.16.840.1.113730.3.1.* => 0x00160000
+ * 1.2.840.113556.1.5.7000.* => 0x00170000
+ * 2.5.20.* => 0x001A0000
+ * 2.16.840.1.113730.3.2.* => 0x001C0000
+ * 1.3.6.1.4.1.250.1.* => 0x001D0000
+ * 0.9.2342.19200300.100.4.* => 0x001F0000
+ *
+ * 1.2.840.113549.1.9.* (unstructuredAddress,unstructuredName)
+ * 1.3.6.1.4.1.1466.101.119.2 (dynamicObject)
+ * 1.3.6.1.4.1.1466.101.119.3 (entryTTL)
+ * 2.5.18.* (createTimeStamp,modifyTimeStamp, SubSchema)
+ * 2.5.21.* (attrs for SubSchema)
+ *
+ * Here's a list of used 'attributeSyntax' OID's
+ *
+ * 2.5.5.1 => Object(DS-DN) string
+ * struct drsuapi_DsObjectIdentifier3
+ *
+ * 2.5.5.2 => OID-string
+ * => mayContain, mustContain... also have this syntax but have string values
+ *
+ * 2.5.5.4 => String(Teletex) case-insensitive string with teletex charset
+ *
+ * 2.5.5.5 => String(IA5) case-sensitive string
+ *
+ * 2.5.5.6 => String(Numeric)
+ * => eg. internationalISDNNumber
+ *
+ * 2.5.5.7 => Object(DN-Binary) B:<byte count>:<bytes>:<object DN>
+ * => e.g. wellKnownObjects
+ *
+ * 2.5.5.8 => BOOL
+ *
+ * 2.5.5.9 => int32
+ *
+ * 2.5.5.10 => DATA_BLOB
+ * => struct GUID
+ *
+ * 2.5.5.11 => LDAP timestring
+ * => NTTIME_1sec
+ *
+ * 2.5.5.12 => String(Unicode) case-insensitive string
+ * => 'standard strings'
+ *
+ * 2.5.5.13 => Object(Presentation-Address) string
+ * => used in objectClass applicationEntity
+ *
+ * 2.5.5.14 => Object(DN-String) S:<char count>:<string>:<object DN>
+ * => not used
+ *
+ * 2.5.5.15 => ntSecurityDescriptor
+ *
+ * 2.5.5.16 => int64
+ *
+ * 2.5.5.17 => dom_sid
+ */
+
typedef [v1_enum] enum {
- DRSUAPI_OBJECTCLASS_top = 0x00010000,
- DRSUAPI_OBJECTCLASS_test = 0x00000000
+ DRSUAPI_OBJECTCLASS_top = 0x00010000
} drsuapi_DsObjectClassId;
typedef [v1_enum,public] enum {
DRSUAPI_ATTRIBUTE_invocationId = 0x00020073,
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_ */
} drsuapi_DsAttributeId;
/* Generic DATA_BLOB values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueDataBlob *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueDataBlob *values;
} drsuapi_DsAttributeValueCtrDataBlob;
/* objectClass values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueObjectClassId *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueObjectClassId *values;
} drsuapi_DsAttributeValueCtrObjectClassId;
/* uint32 values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueUINT32 *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueUINT32 *values;
} drsuapi_DsAttributeValueCtrUINT32;
/* UnicodeString values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueUnicodeString *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueUnicodeString *values;
} drsuapi_DsAttributeValueCtrUnicodeString;
/* DN String values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueDNString *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueDNString *values;
} drsuapi_DsAttributeValueCtrDNString;
/* GUID values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueGUID *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueGUID *values;
} drsuapi_DsAttributeValueCtrGUID;
/* SID values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueSID *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueSID *values;
} drsuapi_DsAttributeValueCtrSID;
/* SecurityDescriptor values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueSecurityDescriptor *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueSecurityDescriptor *values;
} drsuapi_DsAttributeValueCtrSecurityDescriptor;
/* NTTIME_1sec values */
typedef struct {
[range(0,10485760)] uint32 num_values;
- [size_is(num_values)] drsuapi_DsAttributeValueNTTIME_1sec *values[];
+ [size_is(num_values)] drsuapi_DsAttributeValueNTTIME_1sec *values;
} drsuapi_DsAttributeValueCtrNTTIME_1sec;
typedef [nodiscriminant] union {
typedef struct {
[range(0,1048576)] uint32 num_attributes;
- [size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes[];
+ [size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes;
} drsuapi_DsReplicaAttributeCtr;
typedef [public] struct {
[size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
} drsuapi_DsReplicaMetaDataCtr;
- typedef [noprint] struct {
+ typedef [public,noprint] struct {
drsuapi_DsReplicaObjectListItemEx *next_object;
drsuapi_DsReplicaObject object;
uint32 unknown1;
drsuapi_DsNameFormat format_offered;
drsuapi_DsNameFormat format_desired;
[range(1,10000)] uint32 count;
- [size_is(count)] drsuapi_DsNameString *names[];
+ [size_is(count)] drsuapi_DsNameString *names;
} drsuapi_DsNameRequest1;
typedef [switch_type(int32)] union {
typedef struct {
uint32 count;
- [size_is(count)] drsuapi_DsNameInfo1 *array[];
+ [size_is(count)] drsuapi_DsNameInfo1 *array;
} drsuapi_DsNameCtr1;
typedef [switch_type(int32)] union {
uint32 unknown1;
unistr *object_dn;
[range(0,10000)] uint32 count;
- [size_is(count)] drsuapi_DsNameString *spn_names[];
+ [size_is(count)] drsuapi_DsNameString *spn_names;
} drsuapi_DsWriteAccountSpnRequest1;
typedef [switch_type(int32)] union {
typedef struct {
[range(0,10000)] uint32 count;
- [size_is(count)] drsuapi_DsGetDCInfo1 *array[];
+ [size_is(count)] drsuapi_DsGetDCInfo1 *array;
} drsuapi_DsGetDCInfoCtr1;
typedef struct {
typedef struct {
[range(0,10000)] uint32 count;
- [size_is(count)] drsuapi_DsGetDCInfo2 *array[];
+ [size_is(count)] drsuapi_DsGetDCInfo2 *array;
} drsuapi_DsGetDCInfoCtr2;
typedef struct {
typedef struct {
[range(0,10000)] uint32 count;
- [size_is(count)] drsuapi_DsGetDCInfo01 *array[];
+ [size_is(count)] drsuapi_DsGetDCInfo01 *array;
} drsuapi_DsGetDCInfoCtr01;
typedef [v1_enum] enum {
/*****************/
/* Function 0x11 */
- typedef [noprint] struct {
+ typedef [public,noprint] struct {
drsuapi_DsReplicaObjectListItem *next_object;
drsuapi_DsReplicaObject object;
} drsuapi_DsReplicaObjectListItem;
+ /*
+ * please note the the current idl
+ * for DsAddEntry does only parse
+ * what I saw between 2 w2k3 boxes
+ * in my dssync experiments I got some other replies
+ * so all I want to say is that this is very incomplete yet...
+ * --metze
+ */
typedef struct {
drsuapi_DsReplicaObjectListItem first_object;
} drsuapi_DsAddEntryRequest2;
uint32 level;
[switch_is(level)] drsuapi_DsAddEntryCtr3Info *info;
[range(0,10000)] uint32 count;
- [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects[];
+ [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects;
} drsuapi_DsAddEntryCtr3;
typedef [switch_type(int32)] union {
unistr *attribute_name;
unistr *object_dn;
uint32 value_length;
- [size_is(value_length)] uint8 *value[];
+ [size_is(value_length)] uint8 *value;
NTTIME deleted;
NTTIME created;
uint32 version;
unistr *attribute_name;
unistr *object_dn;
uint32 value_length;
- [size_is(value_length)] uint8 *value[];
+ [size_is(value_length)] uint8 *value;
NTTIME deleted;
NTTIME created;
uint32 version;