if (uc->mu_ginfo)
group_info = uc->mu_ginfo;
-#if 0
else if (uc->mu_identity)
group_info = uc->mu_identity->mi_ginfo;
-#endif
if (!group_info)
return 0;
}
/* Check for setting the obj time. */
- if (la->la_valid & (LA_MTIME | LA_ATIME | LA_CTIME)) {
+ if ((la->la_valid & (LA_MTIME | LA_ATIME | LA_CTIME)) &&
+ !(la->la_valid & ~(LA_MTIME | LA_ATIME | LA_CTIME))) {
if ((uc->mu_fsuid != tmp_la->la_uid) &&
- !mdd_capable(uc, CAP_FOWNER) &&
- !(la->la_valid & (LA_SIZE | LA_BLOCKS)))
+ !mdd_capable(uc, CAP_FOWNER))
RETURN(-EPERM);
}
struct mdt_device *mdt = info->mti_mdt;
if (uc->mu_valid != UCRED_INIT) {
- if (uc->mu_ginfo && (uc->mu_valid != UCRED_OLD)) {
+ if (uc->mu_ginfo) {
groups_free(uc->mu_ginfo);
uc->mu_ginfo = NULL;
}
*/
if (req->rq_auth_usr_mdt ||
(pud->pud_ngroups && !med->med_rmtclient && !root_squashed &&
- (setxid_perm & LUSTRE_SETGRP_PERM))) {
+ (setxid_perm & LUSTRE_SETGRP_PERM))) {
struct group_info *ginfo;
/* setgroups for local client */
ucred->mu_valid = UCRED_NEW;
out:
- if (rc)
+ if (rc && identity)
mdt_identity_put(mdt->mdt_identity_cache, identity);
RETURN(rc);
}
static int old_init_ucred(struct mdt_thread_info *info,
- struct mdt_body *body)
+ struct mdt_body *body)
{
struct md_ucred *uc = &info->mti_uc;
struct mdt_device *mdt = info->mti_mdt;
uc->mu_fsuid = body->fsuid;
uc->mu_fsgid = body->fsgid;
uc->mu_cap = body->capability;
- if (identity)
- uc->mu_ginfo = identity->mi_ginfo;
- else
- uc->mu_ginfo = NULL;
+ uc->mu_ginfo = NULL;
uc->mu_identity = identity;
RETURN(0);
uc->mu_valid = UCRED_OLD;
uc->mu_o_uid = uc->mu_o_fsuid = uc->mu_uid = uc->mu_fsuid;
uc->mu_o_gid = uc->mu_o_fsgid = uc->mu_gid = uc->mu_fsgid;
- if (identity)
- uc->mu_ginfo = identity->mi_ginfo;
- else
- uc->mu_ginfo = NULL;
+ uc->mu_ginfo = NULL;
uc->mu_identity = identity;
RETURN(0);