From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:44124) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDtdu-0000rP-Fs for qemu-devel@nongnu.org; Wed, 12 Oct 2011 03:54:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RDtdt-0007Nn-7f for qemu-devel@nongnu.org; Wed, 12 Oct 2011 03:54:22 -0400 Received: from e23smtp06.au.ibm.com ([202.81.31.148]:51540) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDtds-0007NX-Fm for qemu-devel@nongnu.org; Wed, 12 Oct 2011 03:54:21 -0400 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [202.81.31.247]) by e23smtp06.au.ibm.com (8.14.4/8.13.1) with ESMTP id p9C7r7xI006142 for ; Wed, 12 Oct 2011 18:53:07 +1100 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p9C7psr42146468 for ; Wed, 12 Oct 2011 18:51:54 +1100 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p9C7sIvN020795 for ; Wed, 12 Oct 2011 18:54:18 +1100 Received: from explorer.in.ibm.com ([9.122.21.24]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p9C7sHEJ020787 for ; Wed, 12 Oct 2011 18:54:17 +1100 From: "M. Mohan Kumar" Date: Wed, 12 Oct 2011 13:24:16 +0530 Message-Id: <1318406056-17026-1-git-send-email-mohan@in.ibm.com> Subject: [Qemu-devel] [PATCH] hw/9pfs: Handle Security model parsing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Security model is needed only for 'local' fs driver. Signed-off-by: M. Mohan Kumar --- fsdev/qemu-fsdev.c | 6 +---- fsdev/qemu-fsdev.h | 1 + hw/9pfs/virtio-9p-device.c | 47 ++++++++++++++++++++++--------------------- vl.c | 20 +++++++++++++++-- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/fsdev/qemu-fsdev.c b/fsdev/qemu-fsdev.c index 36db127..d08ba9c 100644 --- a/fsdev/qemu-fsdev.c +++ b/fsdev/qemu-fsdev.c @@ -58,11 +58,6 @@ int qemu_fsdev_add(QemuOpts *opts) return -1; } - if (!sec_model) { - fprintf(stderr, "fsdev: No security_model specified.\n"); - return -1; - } - if (!path) { fprintf(stderr, "fsdev: No path specified.\n"); return -1; @@ -72,6 +67,7 @@ int qemu_fsdev_add(QemuOpts *opts) fsle->fse.fsdev_id = g_strdup(fsdev_id); fsle->fse.path = g_strdup(path); + fsle->fse.fsdriver = g_strdup(fstype); fsle->fse.security_model = g_strdup(sec_model); fsle->fse.ops = FsTypes[i].ops; fsle->fse.cache_flags = 0; diff --git a/fsdev/qemu-fsdev.h b/fsdev/qemu-fsdev.h index 9c440f2..0f67880 100644 --- a/fsdev/qemu-fsdev.h +++ b/fsdev/qemu-fsdev.h @@ -40,6 +40,7 @@ typedef struct FsTypeTable { typedef struct FsTypeEntry { char *fsdev_id; char *path; + char *fsdriver; char *security_model; int cache_flags; FileOperations *ops; diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c index aac58ad..1846e36 100644 --- a/hw/9pfs/virtio-9p-device.c +++ b/hw/9pfs/virtio-9p-device.c @@ -83,29 +83,30 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf) exit(1); } - if (!strcmp(fse->security_model, "passthrough")) { - /* Files on the Fileserver set to client user credentials */ - s->ctx.fs_sm = SM_PASSTHROUGH; - s->ctx.xops = passthrough_xattr_ops; - } else if (!strcmp(fse->security_model, "mapped")) { - /* Files on the fileserver are set to QEMU credentials. - * Client user credentials are saved in extended attributes. - */ - s->ctx.fs_sm = SM_MAPPED; - s->ctx.xops = mapped_xattr_ops; - } else if (!strcmp(fse->security_model, "none")) { - /* - * Files on the fileserver are set to QEMU credentials. - */ - s->ctx.fs_sm = SM_NONE; - s->ctx.xops = none_xattr_ops; - } else { - fprintf(stderr, "Default to security_model=none. You may want" - " enable advanced security model using " - "security option:\n\t security_model=passthrough\n\t " - "security_model=mapped\n"); - s->ctx.fs_sm = SM_NONE; - s->ctx.xops = none_xattr_ops; + /* security models is needed only for local fs driver */ + if (!strcmp(fse->fsdriver, "local")) { + if (!strcmp(fse->security_model, "passthrough")) { + /* Files on the Fileserver set to client user credentials */ + s->ctx.fs_sm = SM_PASSTHROUGH; + s->ctx.xops = passthrough_xattr_ops; + } else if (!strcmp(fse->security_model, "mapped")) { + /* Files on the fileserver are set to QEMU credentials. + * Client user credentials are saved in extended attributes. + */ + s->ctx.fs_sm = SM_MAPPED; + s->ctx.xops = mapped_xattr_ops; + } else if (!strcmp(fse->security_model, "none")) { + /* + * Files on the fileserver are set to QEMU credentials. + */ + s->ctx.fs_sm = SM_NONE; + s->ctx.xops = none_xattr_ops; + } else { + fprintf(stderr, "Invalid security_model %s specified.\n" + "Available security models are:\t " + "passthrough,mapped or none\n", fse->security_model); + exit(1); + } } s->ctx.cache_flags = fse->cache_flags; diff --git a/vl.c b/vl.c index 6760e39..a961fa3 100644 --- a/vl.c +++ b/vl.c @@ -2795,6 +2795,7 @@ int main(int argc, char **argv, char **envp) QemuOpts *fsdev; QemuOpts *device; const char *cache; + const char *fsdriver; olist = qemu_find_opts("virtfs"); if (!olist) { @@ -2809,13 +2810,26 @@ int main(int argc, char **argv, char **envp) if (qemu_opt_get(opts, "fstype") == NULL || qemu_opt_get(opts, "mount_tag") == NULL || - qemu_opt_get(opts, "path") == NULL || - qemu_opt_get(opts, "security_model") == NULL) { + qemu_opt_get(opts, "path") == NULL) { fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/," - "security_model=[mapped|passthrough|none]," + "{security_model=[mapped|passthrough|none]}," "mount_tag=tag.\n"); exit(1); } + fsdriver = qemu_opt_get(opts, "fstype"); + /* security model is mandatory for local fs driver */ + if (!strcmp(fsdriver,"local") && + !qemu_opt_get(opts,"security_model")) { + fprintf(stderr, "security model not specified for local" + " fs driver\n"); + exit(1); + } + if (strcmp(fsdriver,"local") && + qemu_opt_get(opts,"security_model")) { + fprintf(stderr, "security model is not needed for %s" + " fs driver\n", fsdriver); + exit(1); + } fsdev = qemu_opts_create(qemu_find_opts("fsdev"), qemu_opt_get(opts, "mount_tag"), 1); -- 1.7.6