1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r5830: start to analyse the attribute values, depending on the attribute type

metze
(This used to be commit 63229b9503)
This commit is contained in:
Stefan Metzmacher 2005-03-16 15:47:19 +00:00 committed by Gerald (Jerry) Carter
parent d7b5a565ef
commit c638a8380d
2 changed files with 191 additions and 25 deletions

View File

@ -249,38 +249,169 @@ interface drsuapi
[size_is(count)] drsuapi_DsReplicaCoursorEx array[];
} drsuapi_DsReplicaCoursorEx05Ctr;
typedef [v1_enum] enum {
DRSUAPI_OBJECTCLASS_top = 0x0
} drsuapi_DsObjectClassId;
typedef [v1_enum] enum {
DRSUAPI_ATTRIBUTE_objectClass = 0x00000000,
DRSUAPI_ATTRIBUTE_description = 0x0000000d,
DRSUAPI_ATTRIBUTE_invocationId = 0x00020073,
DRSUAPI_ATTRIBUTE_ntSecurityDescriptor = 0x00020119,
DRSUAPI_ATTRIBUTE_objectSid = 0x00090092,
DRSUAPI_ATTRIBUTE_objectCategory = 0x0009030e
} drsuapi_DsAttributeId;
/* Generic DATA_BLOB values */
typedef struct {
uint32 version;
NTTIME_1sec time;
GUID guid;
hyper usn;
} drsuapi_DsReplicaMetaData;
typedef [public] struct {
[range(0,1048576)] uint32 count;
[size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
} drsuapi_DsReplicaMetaDataCtr;
typedef [flag(NDR_PAHEX)] struct {
[range(0,10485760)] uint32 length;
DATA_BLOB *data;
} drsuapi_DsReplicaAttributeValue;
} drsuapi_DsAttributeValueDataBlob;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsReplicaAttributeValue *values[];
} drsuapi_DsReplicaAttributeValueCtr;
[size_is(num_values)] drsuapi_DsAttributeValueDataBlob *values[];
} drsuapi_DsAttributeValueCtrDataBlob;
typedef [v1_enum] enum {
DRSUAPI_ATTR_objectClass = 0x00000000,
DRSUAPI_ATTR_description = 0x0000000d,
DRSUAPI_ATTR_ntSecurityDescriptor = 0x00020119,
DRSUAPI_ATTR_objectSid = 0x00090092
} drsuapi_DsAttributeId;
/* objectClass values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] drsuapi_DsObjectClassId *objectClassId;
} drsuapi_DsAttributeValueObjectClassId;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueObjectClassId *values[];
} drsuapi_DsAttributeValueCtrObjectClassId;
/* uint32 values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] uint32 *value;
} drsuapi_DsAttributeValueUINT32;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueUINT32 *values[];
} drsuapi_DsAttributeValueCtrUINT32;
/* UnicodeString values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] nstring *string;
} drsuapi_DsAttributeValueUnicodeString;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueUnicodeString *values[];
} drsuapi_DsAttributeValueCtrUnicodeString;
/* DN String values */
typedef [gensize] struct {
[value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags)-4)] uint32 __ndr_size;
[value(ndr_length_dom_sid(&r->sid))] uint32 __ndr_size_sid;
GUID guid;
[subcontext_size(28),subcontext(0)] dom_sid sid;
[flag(STR_SIZE4|STR_CHARLEN)] string dn;
} drsuapi_DsReplicaObjectIdentifier3;
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] drsuapi_DsReplicaObjectIdentifier3 *object;
} drsuapi_DsAttributeValueDNString;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueDNString *values[];
} drsuapi_DsAttributeValueCtrDNString;
/* GUID values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] GUID *guid;
} drsuapi_DsAttributeValueGUID;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueGUID *values[];
} drsuapi_DsAttributeValueCtrGUID;
/* SID values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] dom_sid *sid;
} drsuapi_DsAttributeValueSID;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueSID *values[];
} drsuapi_DsAttributeValueCtrSID;
/* SecurityDescriptor values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] security_descriptor *sd;
} drsuapi_DsAttributeValueSecurityDescriptor;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueSecurityDescriptor *values[];
} drsuapi_DsAttributeValueCtrSecurityDescriptor;
/* NTTIME_1sec values */
typedef struct {
[range(0,10485760)] uint32 length;
[subcontext(4)] NTTIME_1sec *time;
} drsuapi_DsAttributeValueNTTIME_1sec;
typedef struct {
[range(0,10485760)] uint32 num_values;
[size_is(num_values)] drsuapi_DsAttributeValueNTTIME_1sec *values[];
} drsuapi_DsAttributeValueCtrNTTIME_1sec;
typedef [nodiscriminant] union {
[case(DRSUAPI_ATTRIBUTE_objectClass)] drsuapi_DsAttributeValueCtrObjectClassId object_class_id;
/* UINT32 */
[case(0x00020001)] drsuapi_DsAttributeValueCtrUINT32 uint32;
[case(0x00090177)] drsuapi_DsAttributeValueCtrUINT32 uint32;
[case(0x000905b3)] drsuapi_DsAttributeValueCtrUINT32 uint32;
/* GUID */
[case(DRSUAPI_ATTRIBUTE_invocationId)] drsuapi_DsAttributeValueCtrGUID guid;
/* SID */
[case(DRSUAPI_ATTRIBUTE_objectSid)] drsuapi_DsAttributeValueCtrSID sid;
/* SecurityDescriptor */
/* we can't parse some ads specific security_descriptors yet
[case(DRSUAPI_ATTRIBUTE_ntSecurityDescriptor)] drsuapi_DsAttributeValueCtrSecurityDescriptor security_descriptor;
*/
/* UnicodeString */
[case(DRSUAPI_ATTRIBUTE_description)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
[case(0x00090001)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
[case(0x0009037b)] drsuapi_DsAttributeValueCtrUnicodeString unicode_string;
/* DN String */
[case(DRSUAPI_ATTRIBUTE_objectCategory)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x0002000e)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x00020024)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x0009071c)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x0009072c)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x0009026a)] drsuapi_DsAttributeValueCtrDNString dn_string;
[case(0x00090203)] drsuapi_DsAttributeValueCtrDNString dn_string;
/* NTTIME_1sec */
[case(0x00020002)] drsuapi_DsAttributeValueCtrNTTIME_1sec nttime_1sec;
/* the default is the DATA_BLOB */
[default] drsuapi_DsAttributeValueCtrDataBlob data_blob;
} drsuapi_DsReplicaAttributeValueCtr;
typedef [flag(NDR_PAHEX)] struct {
drsuapi_DsAttributeId attid;
drsuapi_DsReplicaAttributeValueCtr value_ctr;
[switch_is(attid)] drsuapi_DsReplicaAttributeValueCtr value_ctr;
} drsuapi_DsReplicaAttribute;
typedef struct {
@ -294,6 +425,18 @@ interface drsuapi
drsuapi_DsReplicaAttributeCtr attribute_ctr;
} drsuapi_DsReplicaObject;
typedef struct {
uint32 version;
NTTIME_1sec time;
GUID guid;
hyper usn;
} drsuapi_DsReplicaMetaData;
typedef [public] struct {
[range(0,1048576)] uint32 count;
[size_is(count)] drsuapi_DsReplicaMetaData meta_data[];
} drsuapi_DsReplicaMetaDataCtr;
typedef [noprint] struct {
drsuapi_DsReplicaObjectListItemEx *next_object;
drsuapi_DsReplicaObject object;

View File

@ -907,7 +907,6 @@ static BOOL test_DsGetNCChanges(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
printf("testing DsGetNCChanges level %d\n",
array[i].level);
ZERO_STRUCT(r.in);
r.in.bind_handle = &priv->bind_handle;
r.in.level = array[i].level;
@ -915,20 +914,44 @@ static BOOL test_DsGetNCChanges(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
case 5:
nc.guid = null_guid;
nc.sid = null_sid;
nc.dn = talloc_asprintf(mem_ctx, "CN=Schema,CN=Configuration,%s",
priv->domain_obj_dn?priv->domain_obj_dn:"");
nc.dn = priv->domain_obj_dn?priv->domain_obj_dn:"";
r.in.req.req5.guid1 = null_guid;
r.in.req.req5.guid2 = null_guid;
r.in.req.req5.naming_context = &nc;
r.in.req.req5.usn1.usn1 = 0;
r.in.req.req5.usn1.usn2 = 0;
r.in.req.req5.usn1.usn3 = 0;
r.in.req.req5.coursor = NULL;
r.in.req.req5.unknown1 = 0;/*0x10201C70;*/
r.in.req.req5.unknown2 = 0;/*402;*/
r.in.req.req5.unknown3 = 0;/*402116;*/
r.in.req.req5.unknown4 = 0;
r.in.req.req5.h1 = 0;
break;
case 8:
nc.guid = null_guid;
nc.sid = null_sid;
nc.dn = priv->domain_obj_dn?priv->domain_obj_dn:"";
r.in.req.req8.guid1 = null_guid;
r.in.req.req8.guid2 = null_guid;
r.in.req.req8.naming_context = &nc;
r.in.req.req8.usn1.usn1 = 0;
r.in.req.req8.usn1.usn2 = 0;
r.in.req.req8.usn1.usn3 = 0;
r.in.req.req8.coursor = NULL;
r.in.req.req8.unknown1 = 0;/*0x10201C70;*/
r.in.req.req8.unknown2 = 0;/*402;*/
r.in.req.req8.unknown3 = 0;/*402116;*/
r.in.req.req8.unknown4 = 0;
r.in.req.req8.h1 = 0;
r.in.req.req8.unique_ptr1 = 0;
r.in.req.req8.unique_ptr2 = 0;
r.in.req.req8.ctr12.count = 0;
r.in.req.req8.ctr12.array = NULL;
break;
}