root / hw / virtio-9p-xattr-user.c @ 7bd427d8
History | View | Annotate | Download (2.8 kB)
1 | fc22118d | Aneesh Kumar K.V | /*
|
---|---|---|---|
2 | fc22118d | Aneesh Kumar K.V | * Virtio 9p user. xattr callback
|
3 | fc22118d | Aneesh Kumar K.V | *
|
4 | fc22118d | Aneesh Kumar K.V | * Copyright IBM, Corp. 2010
|
5 | fc22118d | Aneesh Kumar K.V | *
|
6 | fc22118d | Aneesh Kumar K.V | * Authors:
|
7 | fc22118d | Aneesh Kumar K.V | * Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
|
8 | fc22118d | Aneesh Kumar K.V | *
|
9 | fc22118d | Aneesh Kumar K.V | * This work is licensed under the terms of the GNU GPL, version 2. See
|
10 | fc22118d | Aneesh Kumar K.V | * the COPYING file in the top-level directory.
|
11 | fc22118d | Aneesh Kumar K.V | *
|
12 | fc22118d | Aneesh Kumar K.V | */
|
13 | fc22118d | Aneesh Kumar K.V | |
14 | fc22118d | Aneesh Kumar K.V | #include <sys/types.h> |
15 | fc22118d | Aneesh Kumar K.V | #include "virtio.h" |
16 | fc22118d | Aneesh Kumar K.V | #include "virtio-9p.h" |
17 | fc22118d | Aneesh Kumar K.V | #include "file-op-9p.h" |
18 | fc22118d | Aneesh Kumar K.V | #include "virtio-9p-xattr.h" |
19 | fc22118d | Aneesh Kumar K.V | |
20 | fc22118d | Aneesh Kumar K.V | |
21 | fc22118d | Aneesh Kumar K.V | static ssize_t mp_user_getxattr(FsContext *ctx, const char *path, |
22 | fc22118d | Aneesh Kumar K.V | const char *name, void *value, size_t size) |
23 | fc22118d | Aneesh Kumar K.V | { |
24 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
25 | fc22118d | Aneesh Kumar K.V | /*
|
26 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
27 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
28 | fc22118d | Aneesh Kumar K.V | */
|
29 | fc22118d | Aneesh Kumar K.V | errno = ENOATTR; |
30 | fc22118d | Aneesh Kumar K.V | return -1; |
31 | fc22118d | Aneesh Kumar K.V | } |
32 | fc22118d | Aneesh Kumar K.V | return lgetxattr(rpath(ctx, path), name, value, size);
|
33 | fc22118d | Aneesh Kumar K.V | } |
34 | fc22118d | Aneesh Kumar K.V | |
35 | fc22118d | Aneesh Kumar K.V | static ssize_t mp_user_listxattr(FsContext *ctx, const char *path, |
36 | fc22118d | Aneesh Kumar K.V | char *name, void *value, size_t size) |
37 | fc22118d | Aneesh Kumar K.V | { |
38 | fc22118d | Aneesh Kumar K.V | int name_size = strlen(name) + 1; |
39 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
40 | 70fc55eb | Aneesh Kumar K.V | |
41 | 70fc55eb | Aneesh Kumar K.V | /* check if it is a mapped posix acl */
|
42 | 70fc55eb | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.system.posix_acl_", 29) == 0) { |
43 | 70fc55eb | Aneesh Kumar K.V | /* adjust the name and size */
|
44 | 70fc55eb | Aneesh Kumar K.V | name += 12;
|
45 | 70fc55eb | Aneesh Kumar K.V | name_size -= 12;
|
46 | 70fc55eb | Aneesh Kumar K.V | } else {
|
47 | 70fc55eb | Aneesh Kumar K.V | /*
|
48 | 70fc55eb | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
49 | 70fc55eb | Aneesh Kumar K.V | * in case of mapped security
|
50 | 70fc55eb | Aneesh Kumar K.V | */
|
51 | 70fc55eb | Aneesh Kumar K.V | return 0; |
52 | 70fc55eb | Aneesh Kumar K.V | } |
53 | fc22118d | Aneesh Kumar K.V | } |
54 | fc22118d | Aneesh Kumar K.V | if (!value) {
|
55 | fc22118d | Aneesh Kumar K.V | return name_size;
|
56 | fc22118d | Aneesh Kumar K.V | } |
57 | fc22118d | Aneesh Kumar K.V | |
58 | fc22118d | Aneesh Kumar K.V | if (size < name_size) {
|
59 | fc22118d | Aneesh Kumar K.V | errno = ERANGE; |
60 | fc22118d | Aneesh Kumar K.V | return -1; |
61 | fc22118d | Aneesh Kumar K.V | } |
62 | fc22118d | Aneesh Kumar K.V | |
63 | fc22118d | Aneesh Kumar K.V | strncpy(value, name, name_size); |
64 | fc22118d | Aneesh Kumar K.V | return name_size;
|
65 | fc22118d | Aneesh Kumar K.V | } |
66 | fc22118d | Aneesh Kumar K.V | |
67 | fc22118d | Aneesh Kumar K.V | static int mp_user_setxattr(FsContext *ctx, const char *path, const char *name, |
68 | fc22118d | Aneesh Kumar K.V | void *value, size_t size, int flags) |
69 | fc22118d | Aneesh Kumar K.V | { |
70 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
71 | fc22118d | Aneesh Kumar K.V | /*
|
72 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
73 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
74 | fc22118d | Aneesh Kumar K.V | */
|
75 | fc22118d | Aneesh Kumar K.V | errno = EACCES; |
76 | fc22118d | Aneesh Kumar K.V | return -1; |
77 | fc22118d | Aneesh Kumar K.V | } |
78 | fc22118d | Aneesh Kumar K.V | return lsetxattr(rpath(ctx, path), name, value, size, flags);
|
79 | fc22118d | Aneesh Kumar K.V | } |
80 | fc22118d | Aneesh Kumar K.V | |
81 | fc22118d | Aneesh Kumar K.V | static int mp_user_removexattr(FsContext *ctx, |
82 | fc22118d | Aneesh Kumar K.V | const char *path, const char *name) |
83 | fc22118d | Aneesh Kumar K.V | { |
84 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
85 | fc22118d | Aneesh Kumar K.V | /*
|
86 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
87 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
88 | fc22118d | Aneesh Kumar K.V | */
|
89 | fc22118d | Aneesh Kumar K.V | errno = EACCES; |
90 | fc22118d | Aneesh Kumar K.V | return -1; |
91 | fc22118d | Aneesh Kumar K.V | } |
92 | fc22118d | Aneesh Kumar K.V | return lremovexattr(rpath(ctx, path), name);
|
93 | fc22118d | Aneesh Kumar K.V | } |
94 | fc22118d | Aneesh Kumar K.V | |
95 | fc22118d | Aneesh Kumar K.V | XattrOperations mapped_user_xattr = { |
96 | fc22118d | Aneesh Kumar K.V | .name = "user.",
|
97 | fc22118d | Aneesh Kumar K.V | .getxattr = mp_user_getxattr, |
98 | fc22118d | Aneesh Kumar K.V | .setxattr = mp_user_setxattr, |
99 | fc22118d | Aneesh Kumar K.V | .listxattr = mp_user_listxattr, |
100 | fc22118d | Aneesh Kumar K.V | .removexattr = mp_user_removexattr, |
101 | fc22118d | Aneesh Kumar K.V | }; |
102 | fc22118d | Aneesh Kumar K.V | |
103 | fc22118d | Aneesh Kumar K.V | XattrOperations passthrough_user_xattr = { |
104 | fc22118d | Aneesh Kumar K.V | .name = "user.",
|
105 | fc22118d | Aneesh Kumar K.V | .getxattr = pt_getxattr, |
106 | fc22118d | Aneesh Kumar K.V | .setxattr = pt_setxattr, |
107 | fc22118d | Aneesh Kumar K.V | .listxattr = pt_listxattr, |
108 | fc22118d | Aneesh Kumar K.V | .removexattr = pt_removexattr, |
109 | fc22118d | Aneesh Kumar K.V | }; |