diff options
| author | Christoph Hellwig <hch@lst.de> | 2006-01-09 20:51:57 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 08:01:29 -0800 | 
| commit | 44a0033f6d5f3e7e2fc37d7b44a1d105c70d4682 (patch) | |
| tree | 9e58f915cd745ea021687b3e79ced79afc68c4dc /fs | |
| parent | e0ad7b073eb7317e5afe0385b02dcb1d52a1eedf (diff) | |
[PATCH] remove jfs xattr permission checks
remove checks now in the VFS
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/jfs/xattr.c | 51 | 
1 files changed, 9 insertions, 42 deletions
| diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index 9dde36a1eb5d..952da5f917cd 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -758,36 +758,23 @@ static int can_set_system_xattr(struct inode *inode, const char *name,  static int can_set_xattr(struct inode *inode, const char *name,  			 const void *value, size_t value_len)  { -	if (IS_RDONLY(inode)) -		return -EROFS; - -	if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) -		return -EPERM; - -	if(strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) == 0) -		/* -		 * "system.*" -		 */ +	if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))  		return can_set_system_xattr(inode, name, value, value_len); -	if(strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) == 0) -		return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM); - -#ifdef CONFIG_JFS_SECURITY -	if (strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) -	    == 0) -		return 0;	/* Leave it to the security module */ -#endif -		 -	if((strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) != 0) && -	   (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) != 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) && +	    strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN))  		return -EOPNOTSUPP;  	if (!S_ISREG(inode->i_mode) &&  	    (!S_ISDIR(inode->i_mode) || inode->i_mode &S_ISVTX))  		return -EPERM; -	return permission(inode, MAY_WRITE, NULL); +	return 0;  }  int __jfs_setxattr(tid_t tid, struct inode *inode, const char *name, @@ -957,22 +944,6 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,  	return rc;  } -static int can_get_xattr(struct inode *inode, const char *name) -{ -#ifdef CONFIG_JFS_SECURITY -	if(strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) == 0) -		return 0; -#endif - -	if(strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) == 0) -		return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM); - -	if(strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) == 0) -		return 0; - -	return permission(inode, MAY_READ, NULL); -} -  ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,  		       size_t buf_size)  { @@ -983,12 +954,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,  	ssize_t size;  	int namelen = strlen(name);  	char *os2name = NULL; -	int rc;  	char *value; -	if ((rc = can_get_xattr(inode, name))) -		return rc; -  	if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) {  		os2name = kmalloc(namelen - XATTR_OS2_PREFIX_LEN + 1,  				  GFP_KERNEL); | 
