From patchwork Mon Feb 1 05:35:00 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aneesh Kumar K.V" X-Patchwork-Id: 44137 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E4A8EB7DBF for ; Mon, 1 Feb 2010 16:35:54 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753790Ab0BAFff (ORCPT ); Mon, 1 Feb 2010 00:35:35 -0500 Received: from e28smtp07.in.ibm.com ([122.248.162.7]:56059 "EHLO e28smtp07.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751957Ab0BAFfY (ORCPT ); Mon, 1 Feb 2010 00:35:24 -0500 Received: from d28relay03.in.ibm.com (d28relay03.in.ibm.com [9.184.220.60]) by e28smtp07.in.ibm.com (8.14.3/8.13.1) with ESMTP id o115ZLJT005299; Mon, 1 Feb 2010 11:05:21 +0530 Received: from d28av05.in.ibm.com (d28av05.in.ibm.com [9.184.220.67]) by d28relay03.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o115ZLqa2273520; Mon, 1 Feb 2010 11:05:21 +0530 Received: from d28av05.in.ibm.com (loopback [127.0.0.1]) by d28av05.in.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o115ZJ5w032011; Mon, 1 Feb 2010 16:35:21 +1100 Received: from localhost.localdomain (K50wks273947wss.in.ibm.com [9.124.35.109]) by d28av05.in.ibm.com (8.14.3/8.13.1/NCO v10.0 AVin) with ESMTP id o115ZGmk031606; Mon, 1 Feb 2010 16:35:18 +1100 From: "Aneesh Kumar K.V" To: sfrench@us.ibm.com, ffilz@us.ibm.com, agruen@suse.de, adilger@sun.com, sandeen@redhat.com, tytso@mit.edu, staubach@redhat.com, bfields@citi.umich.edu, jlayton@redhat.com Cc: aneesh.kumar@linux.vnet.ibm.com, linux-fsdevel@vger.kernel.org, nfsv4@linux-nfs.org, linux-ext4@vger.kernel.org Subject: [PATCH 18/23] richacl: Add helper function for creating richacl from mode values. Date: Mon, 1 Feb 2010 11:05:00 +0530 Message-Id: <1265002505-8387-19-git-send-email-aneesh.kumar@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.0.rc0.48.gdace5 In-Reply-To: <1265002505-8387-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> References: <1265002505-8387-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org When we don't have richacl stored on disk for permission check we need to generate richacl from mode values. This patch adds a helper function for doing that. Signed-off-by: Aneesh Kumar K.V --- fs/richacl_base.c | 29 +++++++++++++++++++++++++++++ include/linux/richacl.h | 1 + 2 files changed, 30 insertions(+), 0 deletions(-) diff --git a/fs/richacl_base.c b/fs/richacl_base.c index 4a340d7..5d61b30 100644 --- a/fs/richacl_base.c +++ b/fs/richacl_base.c @@ -640,3 +640,32 @@ richacl_inherit(const struct richacl *dir_acl, mode_t mode) return acl; } EXPORT_SYMBOL_GPL(richacl_inherit); + +struct richacl * +richacl_from_mode(mode_t mode) +{ + struct richacl *acl; + struct richace *ace; + int is_dir = S_ISDIR(mode); + + acl = richacl_alloc(1); + if (!acl) + return NULL; + ace = acl->a_entries; + + acl->a_owner_mask = richacl_mode_to_mask(mode >> 6, is_dir); + acl->a_group_mask = richacl_mode_to_mask(mode >> 3, is_dir); + acl->a_other_mask = richacl_mode_to_mask(mode, is_dir); + + ace->e_type = ACE4_ACCESS_ALLOWED_ACE_TYPE; + ace->e_flags = ACE4_SPECIAL_WHO; + ace->e_mask = ACE4_VALID_MASK; + ace->u.e_who = richace_everyone_who; + if (richacl_apply_masks(&acl)) { + richacl_put(acl); + acl = NULL; + } + return acl; + +} +EXPORT_SYMBOL_GPL(richacl_from_mode); diff --git a/include/linux/richacl.h b/include/linux/richacl.h index 705e061..ecb76bc 100644 --- a/include/linux/richacl.h +++ b/include/linux/richacl.h @@ -238,5 +238,6 @@ extern int richacl_apply_masks(struct richacl **acl); extern int richacl_write_through(struct richacl **acl); extern struct richacl *map_posix_to_richacl(struct inode *, struct posix_acl *, struct posix_acl *); +extern struct richacl *richacl_from_mode(mode_t); #endif /* __RICHACL_H */