diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2021-01-13 09:35:45 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2021-01-13 09:38:05 -0500 |
commit | 6cd1b2d427a8c7e487d40d371435a2b30cf94ba3 (patch) | |
tree | 6d62bffbb7f5bcf79ddd32953ce975ab4f7c4abc | |
parent | 6e29563b1bf41b317ea69da35c7b1e64e7f0d5e0 (diff) | |
download | bfs-6cd1b2d427a8c7e487d40d371435a2b30cf94ba3.tar.xz |
-perm: Use +t instead of ug+t
The chmod spec says that ug+t is unspecified, and only +t or a+t is
guaranteed to actually set the sticky bit. In practice GNU tools
respect o+t as well, but ignore u+t/g+t.
Fix the implementation to match GNU, and only test the POSIX required
parse.
-rw-r--r-- | parse.c | 6 | ||||
-rwxr-xr-x | tests.sh | 2 |
2 files changed, 5 insertions, 3 deletions
@@ -1896,8 +1896,10 @@ static int parse_mode(const struct parser_state *state, const char *mode, struct } break; case 't': - file_change |= S_ISVTX; - dir_change |= S_ISVTX; + if (who & 0007) { + file_change |= S_ISVTX; + dir_change |= S_ISVTX; + } break; default: mstate = MODE_ACTION_APPLY; @@ -1762,7 +1762,7 @@ function test_perm_setid() { } function test_perm_sticky() { - bfs_diff rainbow -perm /ug+t + bfs_diff rainbow -perm /+t } function test_prune() { |