]> Pileus Git - ~andy/linux/blobdiff - fs/hfsplus/xattr.c
hfsplus: remove can_set_xattr
[~andy/linux] / fs / hfsplus / xattr.c
index bf88baa9bb656e303473ebf969a811871b279238..0b4a5c9b93c44ad415f9378c3ec1e3914761c6ef 100644 (file)
@@ -52,82 +52,6 @@ static inline int is_known_namespace(const char *name)
        return true;
 }
 
-static int can_set_system_xattr(struct inode *inode, const char *name,
-                               const void *value, size_t size)
-{
-#ifdef CONFIG_HFSPLUS_FS_POSIX_ACL
-       struct posix_acl *acl;
-       int err;
-
-       if (!inode_owner_or_capable(inode))
-               return -EPERM;
-
-       /*
-        * POSIX_ACL_XATTR_ACCESS is tied to i_mode
-        */
-       if (strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0) {
-               acl = posix_acl_from_xattr(&init_user_ns, value, size);
-               if (IS_ERR(acl))
-                       return PTR_ERR(acl);
-               if (acl) {
-                       err = posix_acl_equiv_mode(acl, &inode->i_mode);
-                       posix_acl_release(acl);
-                       if (err < 0)
-                               return err;
-                       mark_inode_dirty(inode);
-               }
-               /*
-                * We're changing the ACL.  Get rid of the cached one
-                */
-               forget_cached_acl(inode, ACL_TYPE_ACCESS);
-
-               return 0;
-       } else if (strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0) {
-               acl = posix_acl_from_xattr(&init_user_ns, value, size);
-               if (IS_ERR(acl))
-                       return PTR_ERR(acl);
-               posix_acl_release(acl);
-
-               /*
-                * We're changing the default ACL.  Get rid of the cached one
-                */
-               forget_cached_acl(inode, ACL_TYPE_DEFAULT);
-
-               return 0;
-       }
-#endif /* CONFIG_HFSPLUS_FS_POSIX_ACL */
-       return -EOPNOTSUPP;
-}
-
-static int can_set_xattr(struct inode *inode, const char *name,
-                               const void *value, size_t value_len)
-{
-       if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
-               return can_set_system_xattr(inode, name, value, value_len);
-
-       if (!strncmp(name, XATTR_MAC_OSX_PREFIX, XATTR_MAC_OSX_PREFIX_LEN)) {
-               /*
-                * This makes sure that we aren't trying to set an
-                * attribute in a different namespace by prefixing it
-                * with "osx."
-                */
-               if (is_known_namespace(name + XATTR_MAC_OSX_PREFIX_LEN))
-                       return -EOPNOTSUPP;
-
-               return 0;
-       }
-
-       /*
-        * Don't allow setting an attribute in an unknown namespace.
-        */
-       if (strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) &&
-           strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &&
-           strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN))
-               return -EOPNOTSUPP;
-
-       return 0;
-}
-
 static void hfsplus_init_header_node(struct inode *attr_file,
                                        u32 clump_size,
                                        char *buf, u16 node_size)
@@ -350,10 +274,6 @@ int __hfsplus_setxattr(struct inode *inode, const char *name,
                                HFSPLUS_IS_RSRC(inode))
                return -EOPNOTSUPP;
 
-       err = can_set_xattr(inode, name, value, size);
-       if (err)
-               return err;
-
        if (strncmp(name, XATTR_MAC_OSX_PREFIX,
                                XATTR_MAC_OSX_PREFIX_LEN) == 0)
                name += XATTR_MAC_OSX_PREFIX_LEN;
@@ -841,10 +761,6 @@ int hfsplus_removexattr(struct dentry *dentry, const char *name)
        if (!HFSPLUS_SB(inode->i_sb)->attr_tree)
                return -EOPNOTSUPP;
 
-       err = can_set_xattr(inode, name, NULL, 0);
-       if (err)
-               return err;
-
        if (strncmp(name, XATTR_MAC_OSX_PREFIX,
                                XATTR_MAC_OSX_PREFIX_LEN) == 0)
                name += XATTR_MAC_OSX_PREFIX_LEN;
@@ -941,6 +857,9 @@ static int hfsplus_osx_setxattr(struct dentry *dentry, const char *name,
        if (len > HFSPLUS_ATTR_MAX_STRLEN)
                return -EOPNOTSUPP;
 
+       if (is_known_namespace(name))
+               return -EOPNOTSUPP;
+
        strcpy(xattr_name, XATTR_MAC_OSX_PREFIX);
        strcpy(xattr_name + XATTR_MAC_OSX_PREFIX_LEN, name);