Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
reiserfs
xattr_trusted.c
Go to the documentation of this file.
1
#include "
reiserfs.h
"
2
#include <linux/capability.h>
3
#include <linux/errno.h>
4
#include <linux/fs.h>
5
#include <
linux/pagemap.h
>
6
#include <linux/xattr.h>
7
#include "
xattr.h
"
8
#include <asm/uaccess.h>
9
10
static
int
11
trusted_get(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buffer
,
size_t
size
,
12
int
handler_flags)
13
{
14
if
(
strlen
(name) <
sizeof
(
XATTR_TRUSTED_PREFIX
))
15
return
-
EINVAL
;
16
17
if
(!
capable
(
CAP_SYS_ADMIN
) ||
IS_PRIVATE
(dentry->
d_inode
))
18
return
-
EPERM
;
19
20
return
reiserfs_xattr_get(dentry->
d_inode
, name, buffer, size);
21
}
22
23
static
int
24
trusted_set(
struct
dentry *dentry,
const
char
*name,
const
void
*buffer,
25
size_t
size,
int
flags
,
int
handler_flags)
26
{
27
if
(
strlen
(name) <
sizeof
(
XATTR_TRUSTED_PREFIX
))
28
return
-
EINVAL
;
29
30
if
(!
capable
(
CAP_SYS_ADMIN
) ||
IS_PRIVATE
(dentry->
d_inode
))
31
return
-
EPERM
;
32
33
return
reiserfs_xattr_set(dentry->
d_inode
, name, buffer, size, flags);
34
}
35
36
static
size_t
trusted_list(
struct
dentry *dentry,
char
*
list
,
size_t
list_size,
37
const
char
*name,
size_t
name_len
,
int
handler_flags)
38
{
39
const
size_t
len
= name_len + 1;
40
41
if
(!
capable
(
CAP_SYS_ADMIN
) ||
IS_PRIVATE
(dentry->
d_inode
))
42
return
0;
43
44
if
(list && len <= list_size) {
45
memcpy
(list, name, name_len);
46
list[
name_len
] =
'\0'
;
47
}
48
return
len;
49
}
50
51
const
struct
xattr_handler
reiserfs_xattr_trusted_handler
= {
52
.prefix =
XATTR_TRUSTED_PREFIX
,
53
.get = trusted_get,
54
.set = trusted_set,
55
.list = trusted_list,
56
};
Generated on Thu Jan 10 2013 14:46:46 for Linux Kernel by
1.8.2