1/* 2 File: linux/posix_acl_xattr.h 3 4 Extended attribute system call representation of Access Control Lists. 5 6 Copyright (C) 2000 by Andreas Gruenbacher <a.gruenbacher@computer.org> 7 Copyright (C) 2002 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com> 8 */ 9#ifndef _POSIX_ACL_XATTR_H 10#define _POSIX_ACL_XATTR_H 11 12#include <uapi/linux/xattr.h> 13#include <linux/posix_acl.h> 14 15/* Supported ACL a_version fields */ 16#define POSIX_ACL_XATTR_VERSION 0x0002 17 18/* An undefined entry e_id value */ 19#define ACL_UNDEFINED_ID (-1) 20 21typedef struct { 22 __le16 e_tag; 23 __le16 e_perm; 24 __le32 e_id; 25} posix_acl_xattr_entry; 26 27typedef struct { 28 __le32 a_version; 29 posix_acl_xattr_entry a_entries[0]; 30} posix_acl_xattr_header; 31 32 33static inline size_t 34posix_acl_xattr_size(int count) 35{ 36 return (sizeof(posix_acl_xattr_header) + 37 (count * sizeof(posix_acl_xattr_entry))); 38} 39 40static inline int 41posix_acl_xattr_count(size_t size) 42{ 43 if (size < sizeof(posix_acl_xattr_header)) 44 return -1; 45 size -= sizeof(posix_acl_xattr_header); 46 if (size % sizeof(posix_acl_xattr_entry)) 47 return -1; 48 return size / sizeof(posix_acl_xattr_entry); 49} 50 51#ifdef CONFIG_FS_POSIX_ACL 52void posix_acl_fix_xattr_from_user(void *value, size_t size); 53void posix_acl_fix_xattr_to_user(void *value, size_t size); 54#else 55static inline void posix_acl_fix_xattr_from_user(void *value, size_t size) 56{ 57} 58static inline void posix_acl_fix_xattr_to_user(void *value, size_t size) 59{ 60} 61#endif 62 63struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns, 64 const void *value, size_t size); 65int posix_acl_to_xattr(struct user_namespace *user_ns, 66 const struct posix_acl *acl, void *buffer, size_t size); 67 68extern const struct xattr_handler posix_acl_access_xattr_handler; 69extern const struct xattr_handler posix_acl_default_xattr_handler; 70 71#endif /* _POSIX_ACL_XATTR_H */ 72