From: yangsheng Date: Sat, 24 Jan 2009 18:11:17 +0000 (+0000) Subject: Branch b1_8 X-Git-Tag: v1_8_0_110~301 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=c812d91b3672349263b8b7b8930ec48194272056;p=fs%2Flustre-release.git Branch b1_8 b=15593 i=nikita, shadow Force to remove the suid in interop environment. --- diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 26ce33e..8c1de03 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -1733,20 +1733,27 @@ int ll_setattr_raw(struct inode *inode, struct iattr *attr) int ll_setattr(struct dentry *de, struct iattr *attr) { - int mode; + int mode = de->d_inode->i_mode; if ((attr->ia_valid & (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) == (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) attr->ia_valid |= MDS_OPEN_OWNEROVERRIDE; if ((attr->ia_valid & (ATTR_MODE|ATTR_FORCE|ATTR_SIZE)) == (ATTR_SIZE|ATTR_MODE)) { - mode = de->d_inode->i_mode; if (((mode & S_ISUID) && (!(attr->ia_mode & S_ISUID))) || ((mode & S_ISGID) && (mode & S_IXGRP) && (!(attr->ia_mode & S_ISGID)))) attr->ia_valid |= ATTR_FORCE; } + if ((mode & S_ISUID) && S_ISREG(mode) && + !(attr->ia_mode & S_ISUID)) + attr->ia_valid |= ATTR_KILL_SUID; + + if (((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) && + S_ISREG(mode) && !(attr->ia_mode & S_ISGID)) + attr->ia_valid |= ATTR_KILL_SGID; + return ll_setattr_raw(de->d_inode, attr); }