2012-03-17 01:16:43 -04:00
# include "reiserfs.h"
2006-01-11 12:17:46 -08:00
# include <linux/capability.h>
2005-04-16 15:20:36 -07:00
# include <linux/errno.h>
# include <linux/fs.h>
# include <linux/pagemap.h>
# include <linux/xattr.h>
2012-03-17 00:59:06 -04:00
# include "xattr.h"
2014-08-08 14:21:12 -07:00
# include <linux/uaccess.h>
2005-04-16 15:20:36 -07:00
static int
2015-10-04 19:18:51 +02:00
trusted_get ( const struct xattr_handler * handler , struct dentry * dentry ,
const char * name , void * buffer , size_t size )
2005-04-16 15:20:36 -07:00
{
2005-07-12 20:21:28 -07:00
if ( strlen ( name ) < sizeof ( XATTR_TRUSTED_PREFIX ) )
return - EINVAL ;
2005-04-16 15:20:36 -07:00
2015-03-17 22:25:59 +00:00
if ( ! capable ( CAP_SYS_ADMIN ) | | IS_PRIVATE ( d_inode ( dentry ) ) )
2005-07-12 20:21:28 -07:00
return - EPERM ;
2005-04-16 15:20:36 -07:00
2015-03-17 22:25:59 +00:00
return reiserfs_xattr_get ( d_inode ( dentry ) , name , buffer , size ) ;
2005-04-16 15:20:36 -07:00
}
static int
2015-10-04 19:18:51 +02:00
trusted_set ( const struct xattr_handler * handler , struct dentry * dentry ,
const char * name , const void * buffer , size_t size , int flags )
2005-04-16 15:20:36 -07:00
{
2005-07-12 20:21:28 -07:00
if ( strlen ( name ) < sizeof ( XATTR_TRUSTED_PREFIX ) )
return - EINVAL ;
2005-04-16 15:20:36 -07:00
2015-03-17 22:25:59 +00:00
if ( ! capable ( CAP_SYS_ADMIN ) | | IS_PRIVATE ( d_inode ( dentry ) ) )
2005-07-12 20:21:28 -07:00
return - EPERM ;
2005-04-16 15:20:36 -07:00
2015-03-17 22:25:59 +00:00
return reiserfs_xattr_set ( d_inode ( dentry ) , name , buffer , size , flags ) ;
2005-04-16 15:20:36 -07:00
}
2015-12-02 14:44:43 +01:00
static bool trusted_list ( struct dentry * dentry )
2005-04-16 15:20:36 -07:00
{
2015-12-02 14:44:43 +01:00
return capable ( CAP_SYS_ADMIN ) & & ! IS_PRIVATE ( d_inode ( dentry ) ) ;
2005-04-16 15:20:36 -07:00
}
2010-05-13 17:53:19 -07:00
const struct xattr_handler reiserfs_xattr_trusted_handler = {
2005-04-16 15:20:36 -07:00
. prefix = XATTR_TRUSTED_PREFIX ,
. get = trusted_get ,
. set = trusted_set ,
. list = trusted_list ,
} ;