From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Venkateswararao Jujjuri (JV)" Subject: [RFC 1/2] [9P] Add a new access mode, V9FS_ACCESS_USER. Date: Tue, 8 Jun 2010 17:22:27 -0700 Message-ID: <1276042948-19257-1-git-send-email-jvrao@linux.vnet.ibm.com> Cc: linux-fsdevel@vger.kernel.org, "Venkateswararao Jujjuri (JV)" To: v9fs-developer@lists.sourceforge.net Return-path: Received: from e31.co.us.ibm.com ([32.97.110.149]:58147 "EHLO e31.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754349Ab0FIASp (ORCPT ); Tue, 8 Jun 2010 20:18:45 -0400 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e31.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id o5908GUo020251 for ; Tue, 8 Jun 2010 18:08:16 -0600 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o590Ii0D147758 for ; Tue, 8 Jun 2010 18:18:44 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o590Ii0F032530 for ; Tue, 8 Jun 2010 18:18:44 -0600 Sender: linux-fsdevel-owner@vger.kernel.org List-ID: This new access mode is just like V9FS_ACCESS_USER except the location of access check. Traditionally 9P protocol lets the server perform access cheks but with this mode, all the access checks will be performed on the client itself. Server just follows the client's directive. This mode can be invoked during the mount time by providing the following option: "-o access=client" Signed-off-by: Venkateswararao Jujjuri --- fs/9p/fid.c | 1 + fs/9p/v9fs.c | 5 ++++- fs/9p/v9fs.h | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/9p/fid.c b/fs/9p/fid.c index 5d6cfcb..6e9bb6b 100644 --- a/fs/9p/fid.c +++ b/fs/9p/fid.c @@ -121,6 +121,7 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry) switch (access) { case V9FS_ACCESS_SINGLE: case V9FS_ACCESS_USER: + case V9FS_ACCESS_CLIENT: uid = current_fsuid(); any = 0; break; diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 3c49201..aac818d 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c @@ -193,6 +193,8 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts) v9ses->flags |= V9FS_ACCESS_USER; else if (strcmp(s, "any") == 0) v9ses->flags |= V9FS_ACCESS_ANY; + else if (strcmp(s, "client") == 0) + v9ses->flags |= V9FS_ACCESS_CLIENT; else { v9ses->flags |= V9FS_ACCESS_SINGLE; v9ses->uid = simple_strtoul(s, &e, 10); @@ -279,7 +281,8 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses, /* for legacy mode, fall back to V9FS_ACCESS_ANY */ if (!(v9fs_proto_dotu(v9ses) || v9fs_proto_dotl(v9ses)) && - ((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_USER)) { + (((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_USER) || + ((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_CLIENT))) { v9ses->flags &= ~V9FS_ACCESS_MASK; v9ses->flags |= V9FS_ACCESS_ANY; diff --git a/fs/9p/v9fs.h b/fs/9p/v9fs.h index bec4d0b..58ffdcf 100644 --- a/fs/9p/v9fs.h +++ b/fs/9p/v9fs.h @@ -29,6 +29,7 @@ * @V9FS_ACCESS_SINGLE: only the mounting user can access the hierarchy * @V9FS_ACCESS_USER: a new attach will be issued for every user (default) * @V9FS_ACCESS_ANY: use a single attach for all users + * @V9FS_ACCESS_CLIENT: Like V9FS_ACCESS_USER, but access check on client. * @V9FS_ACCESS_MASK: bit mask of different ACCESS options * * Session flags reflect options selected by users at mount time @@ -39,7 +40,8 @@ enum p9_session_flags { V9FS_ACCESS_SINGLE = 0x04, V9FS_ACCESS_USER = 0x08, V9FS_ACCESS_ANY = 0x0C, - V9FS_ACCESS_MASK = 0x0C, + V9FS_ACCESS_CLIENT = 0x1C, + V9FS_ACCESS_MASK = 0x1C, }; /* possible values of ->cache */ -- 1.6.5.2