mirror of
https://github.com/qemu/qemu.git
synced 2025-08-02 12:45:00 +00:00

Mapped mode stores extended attributes in the user space of the extended attributes. Given that the user space extended attributes are available to regular files only, special files are created as regular files on the fileserver and appropriate mode bits are added to the extended attributes. This method presents all special files and symlinks as regular files on the fileserver while they are represented as special files on the guest mount. On Host/Fileserver: -rw-------. 1 virfsuid virtfsgid 0 2010-05-11 09:36 afifo -rw-------. 1 virfsuid virtfsgid 0 2010-05-11 09:32 blkdev -rw-------. 1 virfsuid virtfsgid 0 2010-05-11 09:33 chardev On Guest/Client: prw-r--r-- 1 guestuser guestuser 0 2010-05-11 12:36 afifo brw-r--r-- 1 guestuser guestuser 0, 0 2010-05-11 12:32 blkdev crw-r--r-- 1 guestuser guestuser 4, 5 2010-05-11 12:33 chardev In the passthrough securit model, specifal files are directly created on the fileserver. But the user credential Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
81 lines
2.4 KiB
C
81 lines
2.4 KiB
C
/*
|
|
* Virtio 9p
|
|
*
|
|
* Copyright IBM, Corp. 2010
|
|
*
|
|
* Authors:
|
|
* Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
#ifndef _FILEOP_H
|
|
#define _FILEOP_H
|
|
#include <sys/types.h>
|
|
#include <dirent.h>
|
|
#include <sys/time.h>
|
|
#include <utime.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/uio.h>
|
|
#include <sys/vfs.h>
|
|
#define SM_LOCAL_MODE_BITS 0600
|
|
#define SM_LOCAL_DIR_MODE_BITS 0700
|
|
|
|
typedef enum
|
|
{
|
|
SM_PASSTHROUGH = 1, /* uid/gid set on fileserver files */
|
|
SM_MAPPED, /* uid/gid part of xattr */
|
|
} SecModel;
|
|
|
|
typedef struct FsCred
|
|
{
|
|
uid_t fc_uid;
|
|
gid_t fc_gid;
|
|
mode_t fc_mode;
|
|
dev_t fc_rdev;
|
|
} FsCred;
|
|
|
|
typedef struct FsContext
|
|
{
|
|
char *fs_root;
|
|
SecModel fs_sm;
|
|
uid_t uid;
|
|
} FsContext;
|
|
|
|
extern void cred_init(FsCred *);
|
|
|
|
typedef struct FileOperations
|
|
{
|
|
int (*lstat)(FsContext *, const char *, struct stat *);
|
|
ssize_t (*readlink)(FsContext *, const char *, char *, size_t);
|
|
int (*chmod)(FsContext *, const char *, FsCred *);
|
|
int (*chown)(FsContext *, const char *, FsCred *);
|
|
int (*mknod)(FsContext *, const char *, FsCred *);
|
|
int (*mksock)(FsContext *, const char *);
|
|
int (*utime)(FsContext *, const char *, const struct utimbuf *);
|
|
int (*remove)(FsContext *, const char *);
|
|
int (*symlink)(FsContext *, const char *, const char *, FsCred *);
|
|
int (*link)(FsContext *, const char *, const char *);
|
|
int (*setuid)(FsContext *, uid_t);
|
|
int (*close)(FsContext *, int);
|
|
int (*closedir)(FsContext *, DIR *);
|
|
DIR *(*opendir)(FsContext *, const char *);
|
|
int (*open)(FsContext *, const char *, int);
|
|
int (*open2)(FsContext *, const char *, int, FsCred *);
|
|
void (*rewinddir)(FsContext *, DIR *);
|
|
off_t (*telldir)(FsContext *, DIR *);
|
|
struct dirent *(*readdir)(FsContext *, DIR *);
|
|
void (*seekdir)(FsContext *, DIR *, off_t);
|
|
ssize_t (*readv)(FsContext *, int, const struct iovec *, int);
|
|
ssize_t (*writev)(FsContext *, int, const struct iovec *, int);
|
|
off_t (*lseek)(FsContext *, int, off_t, int);
|
|
int (*mkdir)(FsContext *, const char *, FsCred *);
|
|
int (*fstat)(FsContext *, int, struct stat *);
|
|
int (*rename)(FsContext *, const char *, const char *);
|
|
int (*truncate)(FsContext *, const char *, off_t);
|
|
int (*fsync)(FsContext *, int);
|
|
void *opaque;
|
|
} FileOperations;
|
|
#endif
|