Annotation of qemu/hw/9pfs/virtio-9p-xattr-user.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.