Statistics
| Branch: | Revision:

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
};