root / hw / 9pfs / virtio-9p-xattr-user.c @ a6f4e09d
History | View | Annotate | Download (2.9 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 | 873c3213 | Stefan Weil | #include "hw/virtio.h" |
16 | fc22118d | Aneesh Kumar K.V | #include "virtio-9p.h" |
17 | 353ac78d | Aneesh Kumar K.V | #include "fsdev/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 | faa44e3d | Venkateswararao Jujjuri (JV) | char buffer[PATH_MAX];
|
25 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
26 | fc22118d | Aneesh Kumar K.V | /*
|
27 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
28 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
29 | fc22118d | Aneesh Kumar K.V | */
|
30 | fc22118d | Aneesh Kumar K.V | errno = ENOATTR; |
31 | fc22118d | Aneesh Kumar K.V | return -1; |
32 | fc22118d | Aneesh Kumar K.V | } |
33 | faa44e3d | Venkateswararao Jujjuri (JV) | return lgetxattr(rpath(ctx, path, buffer), name, value, size);
|
34 | fc22118d | Aneesh Kumar K.V | } |
35 | fc22118d | Aneesh Kumar K.V | |
36 | fc22118d | Aneesh Kumar K.V | static ssize_t mp_user_listxattr(FsContext *ctx, const char *path, |
37 | fc22118d | Aneesh Kumar K.V | char *name, void *value, size_t size) |
38 | fc22118d | Aneesh Kumar K.V | { |
39 | fc22118d | Aneesh Kumar K.V | int name_size = strlen(name) + 1; |
40 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
41 | 70fc55eb | Aneesh Kumar K.V | |
42 | 70fc55eb | Aneesh Kumar K.V | /* check if it is a mapped posix acl */
|
43 | 70fc55eb | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.system.posix_acl_", 29) == 0) { |
44 | 70fc55eb | Aneesh Kumar K.V | /* adjust the name and size */
|
45 | 70fc55eb | Aneesh Kumar K.V | name += 12;
|
46 | 70fc55eb | Aneesh Kumar K.V | name_size -= 12;
|
47 | 70fc55eb | Aneesh Kumar K.V | } else {
|
48 | 70fc55eb | Aneesh Kumar K.V | /*
|
49 | 70fc55eb | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
50 | 70fc55eb | Aneesh Kumar K.V | * in case of mapped security
|
51 | 70fc55eb | Aneesh Kumar K.V | */
|
52 | 70fc55eb | Aneesh Kumar K.V | return 0; |
53 | 70fc55eb | Aneesh Kumar K.V | } |
54 | fc22118d | Aneesh Kumar K.V | } |
55 | fc22118d | Aneesh Kumar K.V | if (!value) {
|
56 | fc22118d | Aneesh Kumar K.V | return name_size;
|
57 | fc22118d | Aneesh Kumar K.V | } |
58 | fc22118d | Aneesh Kumar K.V | |
59 | fc22118d | Aneesh Kumar K.V | if (size < name_size) {
|
60 | fc22118d | Aneesh Kumar K.V | errno = ERANGE; |
61 | fc22118d | Aneesh Kumar K.V | return -1; |
62 | fc22118d | Aneesh Kumar K.V | } |
63 | fc22118d | Aneesh Kumar K.V | |
64 | fc22118d | Aneesh Kumar K.V | strncpy(value, name, name_size); |
65 | fc22118d | Aneesh Kumar K.V | return name_size;
|
66 | fc22118d | Aneesh Kumar K.V | } |
67 | fc22118d | Aneesh Kumar K.V | |
68 | fc22118d | Aneesh Kumar K.V | static int mp_user_setxattr(FsContext *ctx, const char *path, const char *name, |
69 | fc22118d | Aneesh Kumar K.V | void *value, size_t size, int flags) |
70 | fc22118d | Aneesh Kumar K.V | { |
71 | faa44e3d | Venkateswararao Jujjuri (JV) | char buffer[PATH_MAX];
|
72 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
73 | fc22118d | Aneesh Kumar K.V | /*
|
74 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
75 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
76 | fc22118d | Aneesh Kumar K.V | */
|
77 | fc22118d | Aneesh Kumar K.V | errno = EACCES; |
78 | fc22118d | Aneesh Kumar K.V | return -1; |
79 | fc22118d | Aneesh Kumar K.V | } |
80 | faa44e3d | Venkateswararao Jujjuri (JV) | return lsetxattr(rpath(ctx, path, buffer), name, value, size, flags);
|
81 | fc22118d | Aneesh Kumar K.V | } |
82 | fc22118d | Aneesh Kumar K.V | |
83 | fc22118d | Aneesh Kumar K.V | static int mp_user_removexattr(FsContext *ctx, |
84 | fc22118d | Aneesh Kumar K.V | const char *path, const char *name) |
85 | fc22118d | Aneesh Kumar K.V | { |
86 | faa44e3d | Venkateswararao Jujjuri (JV) | char buffer[PATH_MAX];
|
87 | fc22118d | Aneesh Kumar K.V | if (strncmp(name, "user.virtfs.", 12) == 0) { |
88 | fc22118d | Aneesh Kumar K.V | /*
|
89 | fc22118d | Aneesh Kumar K.V | * Don't allow fetch of user.virtfs namesapce
|
90 | fc22118d | Aneesh Kumar K.V | * in case of mapped security
|
91 | fc22118d | Aneesh Kumar K.V | */
|
92 | fc22118d | Aneesh Kumar K.V | errno = EACCES; |
93 | fc22118d | Aneesh Kumar K.V | return -1; |
94 | fc22118d | Aneesh Kumar K.V | } |
95 | faa44e3d | Venkateswararao Jujjuri (JV) | return lremovexattr(rpath(ctx, path, buffer), name);
|
96 | fc22118d | Aneesh Kumar K.V | } |
97 | fc22118d | Aneesh Kumar K.V | |
98 | fc22118d | Aneesh Kumar K.V | XattrOperations mapped_user_xattr = { |
99 | fc22118d | Aneesh Kumar K.V | .name = "user.",
|
100 | fc22118d | Aneesh Kumar K.V | .getxattr = mp_user_getxattr, |
101 | fc22118d | Aneesh Kumar K.V | .setxattr = mp_user_setxattr, |
102 | fc22118d | Aneesh Kumar K.V | .listxattr = mp_user_listxattr, |
103 | fc22118d | Aneesh Kumar K.V | .removexattr = mp_user_removexattr, |
104 | fc22118d | Aneesh Kumar K.V | }; |
105 | fc22118d | Aneesh Kumar K.V | |
106 | fc22118d | Aneesh Kumar K.V | XattrOperations passthrough_user_xattr = { |
107 | fc22118d | Aneesh Kumar K.V | .name = "user.",
|
108 | fc22118d | Aneesh Kumar K.V | .getxattr = pt_getxattr, |
109 | fc22118d | Aneesh Kumar K.V | .setxattr = pt_setxattr, |
110 | fc22118d | Aneesh Kumar K.V | .listxattr = pt_listxattr, |
111 | fc22118d | Aneesh Kumar K.V | .removexattr = pt_removexattr, |
112 | fc22118d | Aneesh Kumar K.V | }; |