r8480: fixed a typo
[samba.git] / source4 / librpc / idl / drsuapi.idl
index 94ec5bf1bca585c05c2412023ab61a4c57e56733..1eaa242ff0cf14c7b47346fd55e783b9fce9c7fe 100644 (file)
@@ -7,6 +7,7 @@
   authservice("ldap"),
   helpstring("Active Directory Replication"),
   pointer_default(unique),
+  pointer_default_top(unique),
   depends(security)
 ] 
 interface drsuapi
@@ -234,7 +235,7 @@ 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 {
@@ -244,7 +245,7 @@ interface drsuapi
 
        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 {
@@ -282,9 +283,90 @@ interface drsuapi
                [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 {
@@ -293,7 +375,12 @@ interface drsuapi
                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 */
@@ -304,7 +391,7 @@ interface drsuapi
 
        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 */
@@ -315,7 +402,7 @@ interface drsuapi
 
        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 */
@@ -326,7 +413,7 @@ interface drsuapi
 
        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 */
@@ -337,7 +424,7 @@ interface drsuapi
 
        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 */
@@ -356,7 +443,7 @@ interface drsuapi
 
        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 */
@@ -367,7 +454,7 @@ interface drsuapi
 
        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 */
@@ -378,7 +465,7 @@ interface drsuapi
 
        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 */
@@ -389,7 +476,7 @@ interface drsuapi
 
        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 */
@@ -400,7 +487,7 @@ interface drsuapi
 
        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 {
@@ -452,7 +539,7 @@ interface drsuapi
 
        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 {
@@ -473,7 +560,7 @@ interface drsuapi
                [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;
@@ -671,7 +758,7 @@ interface drsuapi
                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 {
@@ -686,7 +773,7 @@ interface drsuapi
 
        typedef struct {
                uint32 count;
-               [size_is(count)] drsuapi_DsNameInfo1 *array[];
+               [size_is(count)] drsuapi_DsNameInfo1 *array;
        } drsuapi_DsNameCtr1;
 
        typedef [switch_type(int32)] union {
@@ -713,7 +800,7 @@ interface drsuapi
                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 {
@@ -766,7 +853,7 @@ interface drsuapi
 
        typedef struct {
                [range(0,10000)] uint32 count;
-               [size_is(count)] drsuapi_DsGetDCInfo1 *array[];
+               [size_is(count)] drsuapi_DsGetDCInfo1 *array;
        } drsuapi_DsGetDCInfoCtr1;
 
        typedef struct {
@@ -788,7 +875,7 @@ interface drsuapi
 
        typedef struct {
                [range(0,10000)] uint32 count;
-               [size_is(count)] drsuapi_DsGetDCInfo2 *array[];
+               [size_is(count)] drsuapi_DsGetDCInfo2 *array;
        } drsuapi_DsGetDCInfoCtr2;
 
        typedef struct {
@@ -803,7 +890,7 @@ interface drsuapi
 
        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 {
@@ -827,11 +914,19 @@ interface drsuapi
 
        /*****************/
         /* 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;
@@ -860,7 +955,7 @@ interface drsuapi
                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 {
@@ -1024,7 +1119,7 @@ interface drsuapi
                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;
@@ -1079,7 +1174,7 @@ interface drsuapi
                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;