#include "idl_types.h"

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

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

[ uuid("18763978-8625-abc3-54ca-9892bacdf321"),
  version(1.0),
  pointer_default(unique)
]
interface nfs4acl
{
	const char *NFS4ACL_XATTR_NAME = "system.nfs4acl";

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

	/* 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;

	NTSTATUS nfs4acl_test(
		[in]  nfs4acl acl
		);
}
