blob: 2aacf1fe69fd29cb8614297f2a17d11ba9ff021f [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#include <linux/reiserfs_fs.h>
2#include <linux/errno.h>
3#include <linux/fs.h>
4#include <linux/pagemap.h>
5#include <linux/xattr.h>
6#include <linux/reiserfs_xattr.h>
7#include <asm/uaccess.h>
8
Linus Torvalds1da177e2005-04-16 15:20:36 -07009static int
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070010security_get(struct inode *inode, const char *name, void *buffer, size_t size)
Linus Torvalds1da177e2005-04-16 15:20:36 -070011{
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070012 if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX))
13 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -070014
Jeff Mahoney6dfede692009-03-30 14:02:32 -040015 if (IS_PRIVATE(inode))
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070016 return -EPERM;
Linus Torvalds1da177e2005-04-16 15:20:36 -070017
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070018 return reiserfs_xattr_get(inode, name, buffer, size);
Linus Torvalds1da177e2005-04-16 15:20:36 -070019}
20
21static int
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070022security_set(struct inode *inode, const char *name, const void *buffer,
23 size_t size, int flags)
Linus Torvalds1da177e2005-04-16 15:20:36 -070024{
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070025 if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX))
26 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
Jeff Mahoney6dfede692009-03-30 14:02:32 -040028 if (IS_PRIVATE(inode))
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070029 return -EPERM;
Linus Torvalds1da177e2005-04-16 15:20:36 -070030
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070031 return reiserfs_xattr_set(inode, name, buffer, size, flags);
32}
33
Jeff Mahoney48b32a32009-03-30 14:02:38 -040034static size_t security_list(struct inode *inode, char *list, size_t list_len,
35 const char *name, size_t namelen)
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070036{
Jeff Mahoney48b32a32009-03-30 14:02:38 -040037 const size_t len = namelen + 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -070038
Jeff Mahoney6dfede692009-03-30 14:02:32 -040039 if (IS_PRIVATE(inode))
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070040 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -070041
Jeff Mahoney48b32a32009-03-30 14:02:38 -040042 if (list && len <= list_len) {
43 memcpy(list, name, namelen);
44 list[namelen] = '\0';
45 }
Linus Torvaldsbd4c6252005-07-12 20:21:28 -070046
47 return len;
Linus Torvalds1da177e2005-04-16 15:20:36 -070048}
49
Jeff Mahoney48b32a32009-03-30 14:02:38 -040050struct xattr_handler reiserfs_xattr_security_handler = {
Linus Torvalds1da177e2005-04-16 15:20:36 -070051 .prefix = XATTR_SECURITY_PREFIX,
52 .get = security_get,
53 .set = security_set,
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 .list = security_list,
55};