431547b3c4
Add a flags argument to struct xattr_handler and pass it to all xattr handler methods. This allows using the same methods for multiple handlers, e.g. for the ACL methods which perform exactly the same action for the access and default ACLs, just using a different underlying attribute. With a little more groundwork it'll also allow sharing the methods for the regular user/trusted/secure handlers in extN, ocfs2 and jffs2 like it's already done for xfs in this patch. Also change the inode argument to the handlers to a dentry to allow using the handlers mechnism for filesystems that require it later, e.g. cifs. [with GFS2 bits updated by Steven Whitehouse <swhiteho@redhat.com>] Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: James Morris <jmorris@namei.org> Acked-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
63 lines
2.1 KiB
C
63 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2001-2005 Silicon Graphics, Inc.
|
|
* All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it would be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
#ifndef __XFS_ACL_H__
|
|
#define __XFS_ACL_H__
|
|
|
|
struct inode;
|
|
struct posix_acl;
|
|
struct xfs_inode;
|
|
|
|
#define XFS_ACL_MAX_ENTRIES 25
|
|
#define XFS_ACL_NOT_PRESENT (-1)
|
|
|
|
/* On-disk XFS access control list structure */
|
|
struct xfs_acl {
|
|
__be32 acl_cnt;
|
|
struct xfs_acl_entry {
|
|
__be32 ae_tag;
|
|
__be32 ae_id;
|
|
__be16 ae_perm;
|
|
} acl_entry[XFS_ACL_MAX_ENTRIES];
|
|
};
|
|
|
|
/* On-disk XFS extended attribute names */
|
|
#define SGI_ACL_FILE "SGI_ACL_FILE"
|
|
#define SGI_ACL_DEFAULT "SGI_ACL_DEFAULT"
|
|
#define SGI_ACL_FILE_SIZE (sizeof(SGI_ACL_FILE)-1)
|
|
#define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1)
|
|
|
|
#ifdef CONFIG_XFS_POSIX_ACL
|
|
extern int xfs_check_acl(struct inode *inode, int mask);
|
|
extern struct posix_acl *xfs_get_acl(struct inode *inode, int type);
|
|
extern int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl);
|
|
extern int xfs_acl_chmod(struct inode *inode);
|
|
extern int posix_acl_access_exists(struct inode *inode);
|
|
extern int posix_acl_default_exists(struct inode *inode);
|
|
|
|
extern struct xattr_handler xfs_xattr_acl_access_handler;
|
|
extern struct xattr_handler xfs_xattr_acl_default_handler;
|
|
#else
|
|
# define xfs_check_acl NULL
|
|
# define xfs_get_acl(inode, type) NULL
|
|
# define xfs_inherit_acl(inode, default_acl) 0
|
|
# define xfs_acl_chmod(inode) 0
|
|
# define posix_acl_access_exists(inode) 0
|
|
# define posix_acl_default_exists(inode) 0
|
|
#endif /* CONFIG_XFS_POSIX_ACL */
|
|
#endif /* __XFS_ACL_H__ */
|