1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

lsa.idl: improve idl for lsa_ForestTrust*Record*

The meaning of lsa_ForestTrustRecordFlags is based lsa_ForestTrustRecordType,
but the type is not always available so it's not possible to use an union.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
This commit is contained in:
Stefan Metzmacher 2015-02-04 18:00:44 +00:00 committed by Günther Deschner
parent 701ed1117b
commit 080db5f60a
3 changed files with 26 additions and 34 deletions

View File

@ -1255,6 +1255,26 @@ import "misc.idl", "security.idl";
[todo] NTSTATUS lsa_LSARUNREGISTERAUDITEVENT();
/* Function 0x49 */
typedef [bitmap32bit,public] bitmap {
/* these apply to LSA_FOREST_TRUST_TOP_LEVEL_NAME */
LSA_TLN_DISABLED_NEW = 0x00000001,
LSA_TLN_DISABLED_ADMIN = 0x00000002,
LSA_TLN_DISABLED_CONFLICT = 0x00000004,
/* these apply to LSA_FOREST_TRUST_DOMAIN_INFO */
LSA_SID_DISABLED_ADMIN = 0x00000001,
LSA_SID_DISABLED_CONFLICT = 0x00000002,
LSA_NB_DISABLED_ADMIN = 0x00000004,
LSA_NB_DISABLED_CONFLICT = 0x00000008
} lsa_ForestTrustRecordFlags;
typedef enum {
LSA_FOREST_TRUST_TOP_LEVEL_NAME = 0,
LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX = 1,
LSA_FOREST_TRUST_DOMAIN_INFO = 2,
LSA_FOREST_TRUST_RECORD_TYPE_LAST = 3
} lsa_ForestTrustRecordType;
typedef struct {
[range(0,131072)] uint3264 length;
[size_is(length)] uint8 *data;
@ -1266,24 +1286,17 @@ import "misc.idl", "security.idl";
lsa_StringLarge netbios_domain_name;
} lsa_ForestTrustDomainInfo;
typedef [switch_type(uint32)] union {
typedef [switch_type(lsa_ForestTrustRecordType)] union {
[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] lsa_StringLarge top_level_name;
[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] lsa_StringLarge top_level_name_ex;
[case(LSA_FOREST_TRUST_DOMAIN_INFO)] lsa_ForestTrustDomainInfo domain_info;
[default] lsa_ForestTrustBinaryData data;
} lsa_ForestTrustData;
typedef enum {
LSA_FOREST_TRUST_TOP_LEVEL_NAME = 0,
LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX = 1,
LSA_FOREST_TRUST_DOMAIN_INFO = 2,
LSA_FOREST_TRUST_RECORD_TYPE_LAST = 3
} lsa_ForestTrustRecordType;
typedef struct {
uint32 flags;
lsa_ForestTrustRecordFlags flags;
lsa_ForestTrustRecordType type;
hyper time;
NTTIME_hyper time;
[switch_is(type)] lsa_ForestTrustData forest_trust_data;
} lsa_ForestTrustRecord;
@ -1308,31 +1321,10 @@ import "misc.idl", "security.idl";
LSA_FOREST_TRUST_COLLISION_OTHER = 2
} lsa_ForestTrustCollisionRecordType;
/* if type is CollisionTdo, flags can be */
typedef [bitmap32bit] bitmap {
LSA_TLN_DISABLED_NEW = 0x00000001,
LSA_TLN_DISABLED_ADMIN = 0x00000002,
LSA_TLN_DISABLED_CONFLICT = 0x00000004
} lsa_ForestTrustCollisionTDOFlags;
/* if type is CollisionXref, flags can be */
typedef [bitmap32bit] bitmap {
LSA_SID_DISABLED_ADMIN = 0x00000001,
LSA_SID_DISABLED_CONFLICT = 0x00000002,
LSA_NB_DISABLED_ADMIN = 0x00000004,
LSA_NB_DISABLED_CONFLICT = 0x00000008
} lsa_ForestTrustCollisionXrefFlags;
typedef [nodiscriminant] union {
[case(LSA_FOREST_TRUST_COLLISION_TDO)] lsa_ForestTrustCollisionTDOFlags flags;
[case(LSA_FOREST_TRUST_COLLISION_XREF)] lsa_ForestTrustCollisionXrefFlags flags;
[default] uint32 flags;
} lsa_ForestTrustCollisionFlags;
typedef [public] struct {
uint32 index;
lsa_ForestTrustCollisionRecordType type;
[switch_is(type)] lsa_ForestTrustCollisionFlags flags;
lsa_ForestTrustRecordFlags flags;
lsa_String name;
} lsa_ForestTrustCollisionRecord;

View File

@ -4318,7 +4318,7 @@ static NTSTATUS add_collision(struct lsa_ForestTrustCollisionInfo *c_info,
es[i]->index = idx;
es[i]->type = collision_type;
es[i]->flags.flags = conflict_type;
es[i]->flags = conflict_type;
es[i]->name.string = talloc_strdup(es[i], tdo_name);
if (!es[i]->name.string) {
return NT_STATUS_NO_MEMORY;

View File

@ -4372,7 +4372,7 @@ static NTSTATUS add_collision(struct lsa_ForestTrustCollisionInfo *c_info,
es[i]->index = idx;
es[i]->type = collision_type;
es[i]->flags.flags = conflict_type;
es[i]->flags = conflict_type;
es[i]->name.string = talloc_strdup(es[i], tdo_name);
if (!es[i]->name.string) {
return NT_STATUS_NO_MEMORY;