mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Honor CONFIG_FS_POSIX_ACL kernel option
The required Posix ACL interfaces are only available for kernels with CONFIG_FS_POSIX_ACL defined. Therefore, only enable Posix ACL support for these kernels. All major distribution kernels enable CONFIG_FS_POSIX_ACL by default. If your kernel does not support Posix ACLs the following warning will be printed at ZFS module load time. "ZFS: Posix ACLs disabled by kernel" Signed-off-by: Massimo Maggi <me@massimo-maggi.eu> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1825
This commit is contained in:
parent
78e2739d3c
commit
b695c34ea4
@ -174,6 +174,7 @@ lseek_execute(struct file *filp, struct inode *inode,
|
||||
}
|
||||
#endif /* SEEK_HOLE && SEEK_DATA && !HAVE_LSEEK_EXECUTE */
|
||||
|
||||
#if defined(CONFIG_FS_POSIX_ACL)
|
||||
/*
|
||||
* These functions safely approximates the behavior of posix_acl_release()
|
||||
* which cannot be used because it calls the GPL-only symbol kfree_rcu().
|
||||
@ -315,5 +316,6 @@ typedef umode_t zpl_equivmode_t;
|
||||
#else
|
||||
typedef mode_t zpl_equivmode_t;
|
||||
#endif /* HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T */
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
#endif /* _ZFS_VFS_H */
|
||||
|
@ -71,6 +71,7 @@ extern struct file_system_type zpl_fs_type;
|
||||
extern ssize_t zpl_xattr_list(struct dentry *dentry, char *buf, size_t size);
|
||||
extern int zpl_xattr_security_init(struct inode *ip, struct inode *dip,
|
||||
const struct qstr *qstr);
|
||||
#if defined(CONFIG_FS_POSIX_ACL)
|
||||
extern int zpl_set_acl(struct inode *ip, int type, struct posix_acl *acl);
|
||||
extern struct posix_acl *zpl_get_acl(struct inode *ip, int type);
|
||||
#if !defined(HAVE_GET_ACL)
|
||||
@ -87,6 +88,19 @@ extern int zpl_permission(struct inode *ip, int mask);
|
||||
|
||||
extern int zpl_init_acl(struct inode *ip, struct inode *dir);
|
||||
extern int zpl_chmod_acl(struct inode *ip);
|
||||
#else
|
||||
static inline int
|
||||
zpl_init_acl(struct inode *ip, struct inode *dir)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
zpl_chmod_acl(struct inode *ip)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
extern xattr_handler_t *zpl_xattr_handlers[];
|
||||
|
||||
|
@ -5814,6 +5814,9 @@ _init(void)
|
||||
"ZFS pool version %s, ZFS filesystem version %s\n",
|
||||
ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR,
|
||||
SPA_VERSION_STRING, ZPL_VERSION_STRING);
|
||||
#ifndef CONFIG_FS_POSIX_ACL
|
||||
printk(KERN_NOTICE "ZFS: Posix ACLs disabled by kernel\n");
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
return (0);
|
||||
|
||||
|
@ -165,8 +165,13 @@ acltype_changed_cb(void *arg, uint64_t newval)
|
||||
zsb->z_sb->s_flags &= ~MS_POSIXACL;
|
||||
break;
|
||||
case ZFS_ACLTYPE_POSIXACL:
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
zsb->z_acl_type = ZFS_ACLTYPE_POSIXACL;
|
||||
zsb->z_sb->s_flags |= MS_POSIXACL;
|
||||
#else
|
||||
zsb->z_acl_type = ZFS_ACLTYPE_OFF;
|
||||
zsb->z_sb->s_flags &= ~MS_POSIXACL;
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -462,6 +462,7 @@ const struct inode_operations zpl_inode_operations = {
|
||||
#ifdef HAVE_INODE_FALLOCATE
|
||||
.fallocate = zpl_fallocate,
|
||||
#endif /* HAVE_INODE_FALLOCATE */
|
||||
#if defined(CONFIG_FS_POSIX_ACL)
|
||||
#if defined(HAVE_GET_ACL)
|
||||
.get_acl = zpl_get_acl,
|
||||
#elif defined(HAVE_CHECK_ACL)
|
||||
@ -469,6 +470,7 @@ const struct inode_operations zpl_inode_operations = {
|
||||
#elif defined(HAVE_PERMISSION)
|
||||
.permission = zpl_permission,
|
||||
#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
};
|
||||
|
||||
const struct inode_operations zpl_dir_inode_operations = {
|
||||
@ -487,6 +489,7 @@ const struct inode_operations zpl_dir_inode_operations = {
|
||||
.getxattr = generic_getxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
.listxattr = zpl_xattr_list,
|
||||
#if defined(CONFIG_FS_POSIX_ACL)
|
||||
#if defined(HAVE_GET_ACL)
|
||||
.get_acl = zpl_get_acl,
|
||||
#elif defined(HAVE_CHECK_ACL)
|
||||
@ -494,6 +497,7 @@ const struct inode_operations zpl_dir_inode_operations = {
|
||||
#elif defined(HAVE_PERMISSION)
|
||||
.permission = zpl_permission,
|
||||
#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
};
|
||||
|
||||
const struct inode_operations zpl_symlink_inode_operations = {
|
||||
@ -515,6 +519,7 @@ const struct inode_operations zpl_special_inode_operations = {
|
||||
.getxattr = generic_getxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
.listxattr = zpl_xattr_list,
|
||||
#if defined(CONFIG_FS_POSIX_ACL)
|
||||
#if defined(HAVE_GET_ACL)
|
||||
.get_acl = zpl_get_acl,
|
||||
#elif defined(HAVE_CHECK_ACL)
|
||||
@ -522,6 +527,7 @@ const struct inode_operations zpl_special_inode_operations = {
|
||||
#elif defined(HAVE_PERMISSION)
|
||||
.permission = zpl_permission,
|
||||
#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
};
|
||||
|
||||
dentry_operations_t zpl_dentry_operations = {
|
||||
|
@ -198,6 +198,7 @@ __zpl_show_options(struct seq_file *seq, zfs_sb_t *zsb)
|
||||
{
|
||||
seq_printf(seq, ",%s", zsb->z_flags & ZSB_XATTR ? "xattr" : "noxattr");
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
switch (zsb->z_acl_type) {
|
||||
case ZFS_ACLTYPE_POSIXACL:
|
||||
seq_puts(seq, ",posixacl");
|
||||
@ -206,6 +207,7 @@ __zpl_show_options(struct seq_file *seq, zfs_sb_t *zsb)
|
||||
seq_puts(seq, ",noacl");
|
||||
break;
|
||||
}
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -722,6 +722,8 @@ xattr_handler_t zpl_xattr_security_handler = {
|
||||
.set = zpl_xattr_security_set,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
|
||||
int
|
||||
zpl_set_acl(struct inode *ip, int type, struct posix_acl *acl)
|
||||
{
|
||||
@ -1187,11 +1189,15 @@ struct xattr_handler zpl_xattr_acl_default_handler =
|
||||
#endif /* HAVE_DENTRY_XATTR_LIST */
|
||||
};
|
||||
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
xattr_handler_t *zpl_xattr_handlers[] = {
|
||||
&zpl_xattr_security_handler,
|
||||
&zpl_xattr_trusted_handler,
|
||||
&zpl_xattr_user_handler,
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
&zpl_xattr_acl_access_handler,
|
||||
&zpl_xattr_acl_default_handler,
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
NULL
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user