blob: 0b7d78f2d4e9198b1f23ef3aa71f1d7a29b3f70d [file] [log] [blame]
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -08001/*
2 * linux/fs/hfsplus/xattr_trusted.c
3 *
4 * Vyacheslav Dubeyko <slava@dubeyko.com>
5 *
6 * Handler for trusted extended attributes.
7 */
8
Hin-Tak Leungbf29e882014-06-06 14:36:22 -07009#include <linux/nls.h>
10
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -080011#include "hfsplus_fs.h"
12#include "xattr.h"
13
14static int hfsplus_trusted_getxattr(struct dentry *dentry, const char *name,
15 void *buffer, size_t size, int type)
16{
Fabian Fredericka3cef4c2015-04-16 12:46:58 -070017 return hfsplus_getxattr(dentry, name, buffer, size,
18 XATTR_TRUSTED_PREFIX,
19 XATTR_TRUSTED_PREFIX_LEN);
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -080020}
21
22static int hfsplus_trusted_setxattr(struct dentry *dentry, const char *name,
23 const void *buffer, size_t size, int flags, int type)
24{
Hin-Tak Leungbf29e882014-06-06 14:36:22 -070025 char *xattr_name;
26 int res;
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -080027
28 if (!strcmp(name, ""))
29 return -EINVAL;
30
Hin-Tak Leungbf29e882014-06-06 14:36:22 -070031 xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
32 GFP_KERNEL);
33 if (!xattr_name)
34 return -ENOMEM;
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -080035 strcpy(xattr_name, XATTR_TRUSTED_PREFIX);
36 strcpy(xattr_name + XATTR_TRUSTED_PREFIX_LEN, name);
37
Hin-Tak Leungbf29e882014-06-06 14:36:22 -070038 res = hfsplus_setxattr(dentry, xattr_name, buffer, size, flags);
39 kfree(xattr_name);
40 return res;
Vyacheslav Dubeyko127e5f52013-02-27 17:03:03 -080041}
42
43static size_t hfsplus_trusted_listxattr(struct dentry *dentry, char *list,
44 size_t list_size, const char *name, size_t name_len, int type)
45{
46 /*
47 * This method is not used.
48 * It is used hfsplus_listxattr() instead of generic_listxattr().
49 */
50 return -EOPNOTSUPP;
51}
52
53const struct xattr_handler hfsplus_xattr_trusted_handler = {
54 .prefix = XATTR_TRUSTED_PREFIX,
55 .list = hfsplus_trusted_listxattr,
56 .get = hfsplus_trusted_getxattr,
57 .set = hfsplus_trusted_setxattr,
58};