mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +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:
committed by
Brian Behlendorf
parent
78e2739d3c
commit
b695c34ea4
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user