X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdd%2Fmdd_permission.c;h=1debe3255129c477d229e0a49a1c225c3c95ae5b;hb=49c61548c35d67f34120fd64916a55fd20a6ab68;hp=b74872bac128551138ff3dd346d982795ee7152d;hpb=04898c5e480faa12522570d8aa184eb02e79fc59;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_permission.c b/lustre/mdd/mdd_permission.c index b74872b..1debe32 100644 --- a/lustre/mdd/mdd_permission.c +++ b/lustre/mdd/mdd_permission.c @@ -26,6 +26,8 @@ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -51,33 +53,6 @@ #ifdef CONFIG_FS_POSIX_ACL /* - * Get default acl EA only. - * Hold read_lock for mdd_obj. - */ -int mdd_def_acl_get(const struct lu_env *env, struct mdd_object *mdd_obj, - struct md_attr *ma) -{ - struct lu_buf *buf; - int rc; - ENTRY; - - if (ma->ma_valid & MA_ACL_DEF) - RETURN(0); - - buf = mdd_buf_get(env, ma->ma_acl, ma->ma_acl_size); - rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_ACL_DEFAULT, - BYPASS_CAPA); - if (rc > 0) { - ma->ma_acl_size = rc; - ma->ma_valid |= MA_ACL_DEF; - rc = 0; - } else if ((rc == -EOPNOTSUPP) || (rc == -ENODATA)) { - rc = 0; - } - RETURN(rc); -} - -/* * Hold write_lock for o. */ int mdd_acl_chmod(const struct lu_env *env, struct mdd_object *o, __u32 mode, @@ -258,7 +233,7 @@ static int mdd_check_acl(const struct lu_env *env, struct mdd_object *obj, struct lu_attr *la, int mask) { #ifdef CONFIG_FS_POSIX_ACL - struct md_ucred *uc = md_ucred(env); + struct lu_ucred *uc = lu_ucred_assert(env); posix_acl_xattr_header *head; posix_acl_xattr_entry *entry; struct lu_buf *buf; @@ -290,7 +265,7 @@ static int mdd_check_acl(const struct lu_env *env, struct mdd_object *obj, int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj, struct lu_attr *la, int mask, int role) { - struct md_ucred *uc = md_ucred(env); + struct lu_ucred *uc = lu_ucred(env); __u32 mode; int rc; ENTRY; @@ -298,13 +273,13 @@ int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj, if (mask == 0) RETURN(0); - /* These means unnecessary for permission check */ - if ((uc == NULL) || (uc->mu_valid == UCRED_INIT)) - RETURN(0); + /* These means unnecessary for permission check */ + if ((uc == NULL) || (uc->uc_valid == UCRED_INIT)) + RETURN(0); - /* Invalid user credit */ - if (uc->mu_valid == UCRED_INVALID) - RETURN(-EACCES); + /* Invalid user credit */ + if (uc->uc_valid == UCRED_INVALID) + RETURN(-EACCES); /* * Nobody gets write access to an immutable file. @@ -320,8 +295,8 @@ int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj, } mode = la->la_mode; - if (uc->mu_fsuid == la->la_uid) { - mode >>= 6; + if (uc->uc_fsuid == la->la_uid) { + mode >>= 6; } else { if (mode & S_IRWXG) { if (role != -1) @@ -361,7 +336,7 @@ int mdd_permission(const struct lu_env *env, struct md_attr *ma, int mask) { struct mdd_object *mdd_pobj, *mdd_cobj; - struct md_ucred *uc = NULL; + struct lu_ucred *uc = NULL; struct lu_attr *la = &mdd_env_info(env)->mti_cattr; int check_create, check_link; int check_unlink; @@ -416,7 +391,7 @@ int mdd_permission(const struct lu_env *env, } if (!rc && (check_vtx_part || check_vtx_full)) { - uc = md_ucred(env); + uc = lu_ucred_assert(env); if (likely(!la)) { la = &mdd_env_info(env)->mti_la; rc = mdd_la_get(env, mdd_cobj, la, BYPASS_CAPA); @@ -424,10 +399,10 @@ int mdd_permission(const struct lu_env *env, RETURN(rc); } - if (!(la->la_mode & S_ISVTX) || (la->la_uid == uc->mu_fsuid) || - (check_vtx_full && (ma->ma_attr.la_valid & LA_UID) && - (ma->ma_attr.la_uid == uc->mu_fsuid))) { - ma->ma_attr_flags |= MDS_VTX_BYPASS; + if (!(la->la_mode & S_ISVTX) || (la->la_uid == uc->uc_fsuid) || + (check_vtx_full && (ma->ma_attr.la_valid & LA_UID) && + (ma->ma_attr.la_uid == uc->uc_fsuid))) { + ma->ma_attr_flags |= MDS_VTX_BYPASS; } else { ma->ma_attr_flags &= ~MDS_VTX_BYPASS; if (check_vtx_full) @@ -437,11 +412,11 @@ int mdd_permission(const struct lu_env *env, if (unlikely(!rc && check_rgetfacl)) { if (likely(!uc)) - uc = md_ucred(env); + uc = lu_ucred_assert(env); - if (la->la_uid != uc->mu_fsuid && - !mdd_capable(uc, CFS_CAP_FOWNER)) - rc = -EPERM; + if (la->la_uid != uc->uc_fsuid && + !mdd_capable(uc, CFS_CAP_FOWNER)) + rc = -EPERM; } RETURN(rc);