summaryrefslogtreecommitdiffstats
path: root/sysif.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysif.c')
-rw-r--r--sysif.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/sysif.c b/sysif.c
index ee219ff3..44e236d7 100644
--- a/sysif.c
+++ b/sysif.c
@@ -643,14 +643,14 @@ static val chmod_wrap(val target, val mode)
bits |= S_ISVTX;
if (implicit_all || (who & CHM_U) != 0) {
- mask |= 0700;
+ mask |= (0700 | S_ISUID);
if ((srcm & 010))
bits |= S_ISUID;
bits |= (srcm & 7) << 6;
}
if (implicit_all || (who & CHM_G) != 0) {
- mask |= 0070;
+ mask |= (0070 | S_ISGID);
if ((srcm & 010))
bits |= S_ISGID;
bits |= (srcm & 7) << 3;
@@ -675,8 +675,6 @@ static val chmod_wrap(val target, val mode)
cmode &= ~mask;
if (implicit_all || (who & CHM_O) != 0)
cmode &= ~S_ISVTX; /* GNU Coreutils 8.28 chmod behavior */
- if (!S_ISDIR(cmode))
- cmode &= ~(S_ISUID | S_ISGID);
}
cmode |= bits;
break;