#include "idl_types.h"

/*
  miscellaneous IDL structures
*/

[] 
interface misc
{

	/* a domain SID. Note that unlike Samba3 this contains a pointer,
	   so you can't copy them using assignment */
	typedef [public,noprint] struct {
		uint8  sid_rev_num;             /**< SID revision number */
		uint8  num_auths;               /**< Number of sub-authorities */
		uint8  id_auth[6];              /**< Identifier Authority */
		uint32 sub_auths[num_auths];
	} dom_sid;

	typedef [public] struct {
		uint8 type;  /* xxxx_xxxx_ACE_TYPE - e.g allowed / denied etc */
		uint8 flags; /* xxxx_INHERIT_xxxx - e.g OBJECT_INHERIT_ACE */
		uint32 access_mask;

#if 0
		/* the 'obj' part is present when type is XXXX_TYPE_XXXX_OBJECT */
		struct {
			uint32 flags;
			GUID object_guid;
			GUID inherit_guid;
		} *obj;
#endif

		dom_sid trustee;
	} security_ace;

	typedef [public] struct {
		uint16 revision;
		uint32 num_aces;
		security_ace aces[num_aces];
	} security_acl;


	typedef [public] struct {
		uint8 revision;
		uint16 type;     /* SEC_DESC_xxxx flags */
		[relative] dom_sid *owner_sid; 
		[relative] dom_sid *group_sid;
		[relative] security_acl *sacl; /* system ACL */
		[relative] security_acl *dacl; /* user (discretionary) ACL */
	} security_descriptor;

	/* we declare this noprint so we can supply
	   a nicer pretty-print routine */
	typedef [public, noprint] struct {
		uint8 data[20];
	} policy_handle;


}