2005-04-17 02:20:36 +04:00
/*
* linux / fs / ext2 / xattr_security . c
* Handler for storing security labels as extended attributes .
*/
2012-03-24 00:45:51 +04:00
# include "ext2.h"
2005-09-10 00:01:39 +04:00
# include <linux/security.h>
2005-04-17 02:20:36 +04:00
# include "xattr.h"
static int
2015-10-04 20:18:51 +03:00
ext2_xattr_security_get ( const struct xattr_handler * handler ,
2016-04-11 03:48:24 +03:00
struct dentry * unused , struct inode * inode ,
const char * name , void * buffer , size_t size )
2005-04-17 02:20:36 +04:00
{
2016-04-11 03:48:24 +03:00
return ext2_xattr_get ( inode , EXT2_XATTR_INDEX_SECURITY , name ,
2005-04-17 02:20:36 +04:00
buffer , size ) ;
}
static int
2015-10-04 20:18:51 +03:00
ext2_xattr_security_set ( const struct xattr_handler * handler ,
struct dentry * dentry , const char * name ,
const void * value , size_t size , int flags )
2005-04-17 02:20:36 +04:00
{
2015-03-18 01:25:59 +03:00
return ext2_xattr_set ( d_inode ( dentry ) , EXT2_XATTR_INDEX_SECURITY , name ,
2005-04-17 02:20:36 +04:00
value , size , flags ) ;
}
2014-02-09 17:04:10 +04:00
static int ext2_initxattrs ( struct inode * inode , const struct xattr * xattr_array ,
void * fs_info )
2005-09-10 00:01:39 +04:00
{
2011-06-06 23:29:25 +04:00
const struct xattr * xattr ;
int err = 0 ;
2005-09-10 00:01:39 +04:00
2011-06-06 23:29:25 +04:00
for ( xattr = xattr_array ; xattr - > name ! = NULL ; xattr + + ) {
err = ext2_xattr_set ( inode , EXT2_XATTR_INDEX_SECURITY ,
xattr - > name , xattr - > value ,
xattr - > value_len , 0 ) ;
if ( err < 0 )
break ;
2005-09-10 00:01:39 +04:00
}
return err ;
}
2011-06-06 23:29:25 +04:00
int
ext2_init_security ( struct inode * inode , struct inode * dir ,
const struct qstr * qstr )
{
return security_inode_init_security ( inode , dir , qstr ,
& ext2_initxattrs , NULL ) ;
}
2010-05-14 04:53:16 +04:00
const struct xattr_handler ext2_xattr_security_handler = {
2005-04-17 02:20:36 +04:00
. prefix = XATTR_SECURITY_PREFIX ,
. get = ext2_xattr_security_get ,
. set = ext2_xattr_security_set ,
} ;