Merge branch 'master' of ssh://jra@git.samba.org/data/git/samba
[amitay/samba.git] / librpc / idl / drsuapi.idl
index e4b5dc1fd9a99fe139c449e3fadf956831236c7b..f53db00f5b81be8c9884afe00e5c8cbf8c4f8c55 100644 (file)
@@ -15,6 +15,40 @@ interface drsuapi
 {
        typedef bitmap samr_GroupAttrs samr_GroupAttrs;
 
+       /* see MS-DRSR section 5.37 */
+       typedef [public,bitmap32bit] bitmap {
+               DRSUAPI_DRS_ASYNC_OP                  = 0x00000001,
+               DRSUAPI_DRS_GETCHG_CHECK              = 0x00000002,
+               DRSUAPI_DRS_ADD_REF                   = 0x00000004,
+               DRSUAPI_DRS_SYNC_ALL                  = 0x00000008,
+               DRSUAPI_DRS_DEL_REF                   = 0x00000008,
+               DRSUAPI_DRS_WRIT_REP                  = 0x00000010,
+               DRSUAPI_DRS_INIT_SYNC                 = 0x00000020,
+               DRSUAPI_DRS_PER_SYNC                  = 0x00000040,
+               DRSUAPI_DRS_MAIL_REP                  = 0x00000080,
+               DRSUAPI_DRS_ASYNC_REP                 = 0x00000100,
+               DRSUAPI_DRS_IGNORE_ERROR              = 0x00000100,
+               DRSUAPI_DRS_TWOWAY_SYNC               = 0x00000200,
+               DRSUAPI_DRS_CRITICAL_ONLY             = 0x00000400,
+               DRSUAPI_DRS_GET_ANC                   = 0x00000800,
+               DRSUAPI_DRS_GET_NC_SIZE               = 0x00001000,
+               DRSUAPI_DRS_LOCAL_ONLY                = 0x00001000,
+               DRSUAPI_DRS_SYNC_BYNAME               = 0x00004000,
+               DRSUAPI_DRS_REF_OK                    = 0x00004000,
+               DRSUAPI_DRS_FULL_SYNC_NOW             = 0x00008000,
+               DRSUAPI_DRS_NO_SOURCE                 = 0x00008000,
+               DRSUAPI_DRS_FULL_SYNC_PACKET          = 0x00020000,
+               DRSUAPI_DRS_REF_GCSPN                 = 0x00100000,
+               DRSUAPI_DRS_SPECIAL_SECRET_PROCESSING = 0x00800000,
+               DRSUAPI_DRS_SYNC_FORCED               = 0x02000000,
+               DRSUAPI_DRS_DISABLE_AUTO_SYNC         = 0x04000000,
+               DRSUAPI_DRS_DISABLE_PERIODIC_SYNC     = 0x08000000,
+               DRSUAPI_DRS_USE_COMPRESSION           = 0x10000000,
+               DRSUAPI_DRS_NEVER_NOTIFY              = 0x20000000,
+               DRSUAPI_DRS_SYNC_PAS                  = 0x40000000,
+               DRSUAPI_DRS_GET_ALL_GROUP_MEMBERSHIP  = 0x80000000
+       } drsuapi_DrsOptions;
+
        /*****************/
         /* Function 0x00 */
         typedef [bitmap32bit] bitmap {
@@ -142,7 +176,7 @@ interface drsuapi
        /*****************/
        /* Function 0x02 */
        typedef [public,gensize] struct {
-               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size;
+               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->iconv_convenience, ndr->flags)-4)] uint32 __ndr_size;
                [value(ndr_size_dom_sid28(&sid, ndr->flags))]  uint32 __ndr_size_sid;
                GUID guid;
                dom_sid28 sid;
@@ -219,16 +253,22 @@ interface drsuapi
                /* the _WRITEABLE flag indicates a replication with all attributes
                 *
                 * --metze
+                *
+                * See drsuapi_DrsOptions for the WSPP bit names 
                 */
                DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE                          = 0x00000010,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP                    = 0x00000020,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS                 = 0x00000040,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_USE_ASYNC_INTERSIDE_TRANSPORT      = 0x00000080,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_ASYNC_REP                          = 0x00000100,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_ERROR                       = 0x00000100,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_TWO_WAY_SYNC                       = 0x00000200,
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              = 0x00000800,
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   = 0x00001000, /* was 0x00010000, */
-               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_NEXT_PACKET                   = 0x00002000, /* was 0x00020000, */
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY                      = 0x00000400,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_RETURN_OBJECT_PARENTS              = 0x00000800,/*Include updates to ancestor objects before updates to their descendants*/
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_IN_PROGRESS                   = 0x00010000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_FULL_SYNC_PACKET                   = 0x00020000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_NEVER_SYNCED                       = 0x00200000,
+               DRSUAPI_DS_REPLICA_NEIGHBOUR_SPECIAL_SECRET_PROCESSING          = 0x00800000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_PREEMPTED                          = 0x01000000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_IGNORE_CHANGE_NOTIFICATIONS        = 0x04000000,
                DRSUAPI_DS_REPLICA_NEIGHBOUR_DISABLE_SCHEDULED_SYNC             = 0x08000000,
@@ -374,9 +414,9 @@ interface drsuapi
         *
         * 2.5.5.17     => dom_sid
         */
-       typedef [nopush,nopull] struct {
-               [range(0,10000),value(ndr_size_drsuapi_DsReplicaOID_oid(oid, 0))] uint32 __ndr_size;
-               [size_is(__ndr_size),charset(DOS)] uint8 *oid; /* it's encoded with asn1_write_OID_String() */
+       typedef [noprint] struct {
+               [range(0,10000)] uint32 length;
+               [size_is(length)] uint8 *binary_oid; /* partial-binary-OID encoded with asn1_write_partial_OID_String() */
        } drsuapi_DsReplicaOID;
 
        typedef struct {
@@ -401,8 +441,12 @@ interface drsuapi
                DRSUAPI_ATTRIBUTE_member                        = 0x0000001f,
                DRSUAPI_ATTRIBUTE_instanceType                  = 0x00020001,
                DRSUAPI_ATTRIBUTE_whenCreated                   = 0x00020002,
+               DRSUAPI_ATTRIBUTE_possSuperiors                 = 0x00020008,
                DRSUAPI_ATTRIBUTE_hasMasterNCs                  = 0x0002000e,
+               DRSUAPI_ATTRIBUTE_subClassOf                    = 0x00020015,
                DRSUAPI_ATTRIBUTE_governsID                     = 0x00020016,
+               DRSUAPI_ATTRIBUTE_mustContain                   = 0x00020018,
+               DRSUAPI_ATTRIBUTE_mayContain                    = 0x00020019,
                DRSUAPI_ATTRIBUTE_attributeID                   = 0x0002001e,
                DRSUAPI_ATTRIBUTE_attributeSyntax               = 0x00020020,
                DRSUAPI_ATTRIBUTE_isSingleValued                = 0x00020021,
@@ -417,6 +461,7 @@ interface drsuapi
                DRSUAPI_ATTRIBUTE_oMSyntax                      = 0x000200e7,
                DRSUAPI_ATTRIBUTE_ntSecurityDescriptor          = 0x00020119,
                DRSUAPI_ATTRIBUTE_searchFlags                   = 0x0002014e,
+               DRSUAPI_ATTRIBUTE_auxiliaryClass                = 0x0002015f,
                DRSUAPI_ATTRIBUTE_lDAPDisplayName               = 0x000201cc,
                DRSUAPI_ATTRIBUTE_name                          = 0x00090001,
                DRSUAPI_ATTRIBUTE_userAccountControl            = 0x00090008,
@@ -437,6 +482,9 @@ interface drsuapi
                DRSUAPI_ATTRIBUTE_trustAuthIncoming             = 0x00090081,
                DRSUAPI_ATTRIBUTE_trustAuthOutgoing             = 0x00090087,
                DRSUAPI_ATTRIBUTE_lmPwdHistory                  = 0x000900a0,
+               DRSUAPI_ATTRIBUTE_systemPossSuperiors           = 0x000900c3,
+               DRSUAPI_ATTRIBUTE_systemMayContain              = 0x000900c4,
+               DRSUAPI_ATTRIBUTE_systemMustContain             = 0x000900c5,
                DRSUAPI_ATTRIBUTE_sAMAccountName                = 0x000900dd,
                DRSUAPI_ATTRIBUTE_sAMAccountType                = 0x0009012e,
                DRSUAPI_ATTRIBUTE_fSMORoleOwner                 = 0x00090171,
@@ -482,9 +530,27 @@ interface drsuapi
                drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
        } drsuapi_DsGetNCChangesRequest8;
 
+       typedef struct {
+               GUID destination_dsa_guid;
+               GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
+               [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
+               drsuapi_DsReplicaHighWaterMark highwatermark;
+               drsuapi_DsReplicaCursorCtrEx *uptodateness_vector;
+               drsuapi_DsReplicaNeighbourFlags replica_flags;
+               uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */
+               uint32 max_ndr_size; /* w2k3 seems to ignore this */
+               drsuapi_DsExtendedOperation extended_op;
+               hyper fsmo_info;
+               drsuapi_DsPartialAttributeSet *partial_attribute_set;
+               drsuapi_DsPartialAttributeSet *partial_attribute_set_ex;
+               drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr;
+               uint32 more_flags;
+       } drsuapi_DsGetNCChangesRequest10;
+
        typedef [switch_type(int32)] union {
                [case(5)] drsuapi_DsGetNCChangesRequest5 req5;
                [case(8)] drsuapi_DsGetNCChangesRequest8 req8;
+               [case(10)] drsuapi_DsGetNCChangesRequest10 req10;
        } drsuapi_DsGetNCChangesRequest;
 
        typedef [public] struct {
@@ -514,7 +580,7 @@ interface drsuapi
 
        /* DN String values */
        typedef [public,gensize] struct {
-               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size;
+               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size;
                [value(ndr_size_dom_sid28(&sid,ndr->flags))]  uint32 __ndr_size_sid;
                GUID guid;
                dom_sid28 sid;
@@ -523,7 +589,7 @@ interface drsuapi
        } drsuapi_DsReplicaObjectIdentifier3;
 
        typedef [public,gensize] struct {
-               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary(r, ndr->flags))] uint32 __ndr_size;
+               [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size;
                [value(ndr_size_dom_sid28(&sid,ndr->flags))]  uint32 __ndr_size_sid;
                GUID guid;
                dom_sid28 sid;
@@ -586,7 +652,7 @@ interface drsuapi
                drsuapi_DsExtendedError extended_ret; /* w2k sends the nc_object_count value here */
                uint32 object_count;
                /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
-               [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->flags)+55)] uint32 __ndr_size;
+               [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->iconv_convenience,ndr->flags)+55)] uint32 __ndr_size;
                drsuapi_DsReplicaObjectListItemEx *first_object;
                boolean32 more_data;
        } drsuapi_DsGetNCChangesCtr1;
@@ -608,6 +674,7 @@ interface drsuapi
                drsuapi_DsReplicaMetaData meta_data;
        } drsuapi_DsReplicaLinkedAttribute;
 
+       /* [MS-DRSR] section 4.1.10.2.11 DRS_MSG_GETCHGREPLY_V6 */
        typedef [public,gensize] struct {
                GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */
                GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */
@@ -619,7 +686,7 @@ interface drsuapi
                drsuapi_DsExtendedError extended_ret;
                uint32 object_count;
                /* this +55 is sometimes +56, so I don't know where this comes from... --metze */
-               [value(ndr_size_drsuapi_DsGetNCChangesCtr6(r,ndr->flags)+55)] uint32 __ndr_size;
+               [value(ndr_size_drsuapi_DsGetNCChangesCtr6(r,ndr->iconv_convenience,ndr->flags)+55)] uint32 __ndr_size;
                drsuapi_DsReplicaObjectListItemEx *first_object;
                boolean32 more_data;
                uint32 nc_object_count; /* estimated amount of objects in the whole NC */
@@ -708,12 +775,13 @@ interface drsuapi
 
        /*****************/
         /* Function 0x04 */
+       /* [MS-DRSR] 4.1.26 */
        typedef bitmap {
                DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION        = 0x00000001,
-               DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE                     = 0x00000002,
+               DRSUAPI_DS_REPLICA_UPDATE_GETCHG_CHECK                  = 0x00000002,
                DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE                 = 0x00000004,
                DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE              = 0x00000008,
-               DRSUAPI_DS_REPLICA_UPDATE_0x00000010                    = 0x00000010
+               DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE                     = 0x00000010
        } drsuapi_DsReplicaUpdateRefsOptions;
 
        typedef struct {
@@ -741,26 +809,88 @@ interface drsuapi
                /* TODO ... */
        } drsuapi_DsReplicaAddOptions;
 
-       [todo] WERROR DRSUAPI_REPLICA_ADD();
+
+       typedef struct {
+               [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
+               [charset(UTF16),string] uint16 *source_dsa_address;
+               uint8 schedule[84];
+               drsuapi_DsReplicaAddOptions options;
+       } drsuapi_DsReplicaAddRequest1;
+
+       typedef struct {
+               [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
+               drsuapi_DsReplicaObjectIdentifier *source_dsa_dn;
+               drsuapi_DsReplicaObjectIdentifier *transport_dn;
+               [charset(UTF16),string] uint16 *source_dsa_address;
+               uint8 schedule[84];
+               drsuapi_DsReplicaAddOptions options;
+       } drsuapi_DsReplicaAddRequest2;
+
+       typedef [switch_type(int32)] union {
+               [case(1)] drsuapi_DsReplicaAddRequest1 req1;
+               [case(2)] drsuapi_DsReplicaAddRequest2 req2;
+       } drsuapi_DsReplicaAddRequest;
+
+       WERROR drsuapi_DsReplicaAdd(
+               [in] policy_handle *bind_handle,
+               [in] int32 level,
+               [in,switch_is(level)] drsuapi_DsReplicaAddRequest req
+               );
+               
 
        /*****************/
         /* Function 0x06 */
        typedef bitmap {
-               DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION        = 0x00000001,
-               DRSUAPI_DS_REPLICA_DELETE_WRITEABLE                     = 0x00000002
+               DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION   = 0x00000001,
+               DRSUAPI_DS_REPLICA_ADD_WRITEABLE                = 0x00000002
                /* TODO ... */
        } drsuapi_DsReplicaDeleteOptions;
 
-       [todo] WERROR DRSUAPI_REPLICA_DEL();
+
+       typedef struct {
+               [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
+               [charset(UTF16),string] uint16 *source_dsa_address;
+               drsuapi_DsReplicaDeleteOptions options;
+       } drsuapi_DsReplicaDelRequest1;
+
+       typedef [switch_type(int32)] union {
+               [case(1)] drsuapi_DsReplicaDelRequest1 req1;
+       } drsuapi_DsReplicaDelRequest;
+
+       WERROR drsuapi_DsReplicaDel(
+               [in] policy_handle *bind_handle,
+               [in] int32 level,
+               [in,switch_is(level)] drsuapi_DsReplicaDelRequest req
+               );
 
        /*****************/
         /* Function 0x07 */
        typedef bitmap {
-               DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION        = 0x00000001,
-               DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE                     = 0x00000002
+               DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION   = 0x00000001,
+               DRSUAPI_DS_REPLICA_ADD_WRITEABLE                = 0x00000002
+               /* TODO ... */
        } drsuapi_DsReplicaModifyOptions;
 
-       [todo] WERROR DRSUAPI_REPLICA_MODIFY();
+
+       typedef struct {
+               [ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
+               GUID source_dra;
+               [charset(UTF16),string] uint16 *source_dra_address;
+               uint8 schedule[84];
+               uint32 replica_flags;
+               uint32 modify_fields;
+               drsuapi_DsReplicaModifyOptions options;
+       } drsuapi_DsReplicaModRequest1;
+
+       typedef [switch_type(int32)] union {
+               [case(1)] drsuapi_DsReplicaModRequest1 req1;
+       } drsuapi_DsReplicaModRequest;
+
+       WERROR drsuapi_DsReplicaMod(
+               [in] policy_handle *bind_handle,
+               [in] int32 level,
+               [in,switch_is(level)] drsuapi_DsReplicaModRequest req
+               );
 
        /*****************/
         /* Function 0x08 */
@@ -1244,7 +1374,25 @@ interface drsuapi
 
        /*****************/
         /* Function 0x12 */
-       [todo] WERROR DRSUAPI_EXECUTE_KCC();
+       typedef bitmap {
+               DRSUAPI_DS_EXECUTE_KCC_ASYNCHRONOUS_OPERATION   = 0x00000001,
+               DRSUAPI_DS_EXECUTE_KCC_DAMPED                   = 0x00000002
+       } drsuapi_DsExecuteKCCFlags;
+
+       typedef struct {
+               uint32 taskID;
+               drsuapi_DsExecuteKCCFlags flags;
+       } drsuapi_DsExecuteKCC1;
+
+       typedef [switch_type(uint32)] union {
+               [case(1)] drsuapi_DsExecuteKCC1 ctr1;
+       } drsuapi_DsExecuteKCCRequest;
+
+       WERROR drsuapi_DsExecuteKCC(
+               [in] policy_handle *bind_handle,
+               [in] uint32 level,
+               [in, ref, switch_is(level)] drsuapi_DsExecuteKCCRequest *req
+               );
 
        /*****************/
        /* Function 0x13 */