#include "idl_types.h"

/*
  NFS4 ACL format on disk
  see http://www.suse.de/~agruen/nfs4acl/
*/

import "misc.idl", "security.idl";

[
  version(1.0),
  pointer_default(unique)
]
interface nfs4acl_interface
{
	const char *NFS4ACL_NDR_XATTR_NAME = "security.nfs4acl_ndr";

	const char *NFS4ACL_XATTR_OWNER_WHO	 = "OWNER@";
	const char *NFS4ACL_XATTR_GROUP_WHO	 = "GROUP@";
	const char *NFS4ACL_XATTR_EVERYONE_WHO   = "EVERYONE@";

	const uint8 ACL4_XATTR_VERSION_40      = 0x00;
	const uint8 ACL4_XATTR_VERSION_41      = 0x01;
	const uint8 ACL4_XATTR_VERSION_DEFAULT = ACL4_XATTR_VERSION_41;

	const uint8 ACL4_AUTO_INHERIT  = 0x01;
	const uint8 ACL4_PROTECTED     = 0x02;
	const uint8 ACL4_DEFAULTED     = 0x04;
	const uint8 ACL4_WRITE_THROUGH = 0x40;

	/* these structures use the same bit values and other constants as
	   in security.idl */
	typedef [flag(NDR_BIG_ENDIAN)] struct {
		uint16 e_type;
		uint16 e_flags;
		uint32 e_mask;
		uint32 e_id;
		utf8string e_who;
		[flag(NDR_ALIGN4)]  DATA_BLOB _pad;
	} nfs4ace;

	typedef [public,flag(NDR_BIG_ENDIAN)] struct {
		uint8 a_version;
		uint8 a_flags;
		uint16 a_count;
		uint32 a_owner_mask;
		uint32 a_group_mask;
		uint32 a_other_mask;
		nfs4ace ace[a_count];
	} nfs4acl;
}
