!(attr->ia_mode & S_ISGID))))
attr->ia_valid |= ATTR_FORCE;
- if ((attr->ia_valid & ATTR_MODE) &&
- (mode & S_ISUID) &&
+ if ((mode & S_ISUID) &&
!(attr->ia_mode & S_ISUID) &&
!(attr->ia_valid & ATTR_KILL_SUID))
attr->ia_valid |= ATTR_KILL_SUID;
- if ((attr->ia_valid & ATTR_MODE) &&
- ((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) &&
+ if (((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) &&
!(attr->ia_mode & S_ISGID) &&
!(attr->ia_valid & ATTR_KILL_SGID))
attr->ia_valid |= ATTR_KILL_SGID;
+++ /dev/null
-LU-4924 - chmod g+s, touch should not clear sgid bit
-
- $ mkdir 4924
- $ cd 4924
- $ touch f
- $ chmod u=rwx,g=rwxs f
- $ ls -l f | awk -- '{ print $1, $3, $4 }'
- > -rwxrwsr-- root root
- $ touch f
- $ ls -l f | awk -- '{ print $1, $3, $4 }'
- > -rwxrwsr-- root root
- $ cd ..
- $ rm -rf 4924