diff options
author | Erik Andersen | 1999-12-27 23:48:33 +0000 |
---|---|---|
committer | Erik Andersen | 1999-12-27 23:48:33 +0000 |
commit | 98f67e35d82e19f7a5e58551b5dd8feb121229b9 (patch) | |
tree | 5ddf65224b19b141783561b13a7c0dc35b6dda12 /archival | |
parent | 00417a38c10f1f5685013d16ad4fb782aa2deddb (diff) | |
download | busybox-98f67e35d82e19f7a5e58551b5dd8feb121229b9.zip busybox-98f67e35d82e19f7a5e58551b5dd8feb121229b9.tar.gz |
chown(2) clears S_ISUID and S_ISGID, even when chown is
called as root. Changed ordering of chown and chmod so
SGID and SUID file permissions don't get munged.
-Erik
Diffstat (limited to 'archival')
-rw-r--r-- | archival/tar.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/archival/tar.c b/archival/tar.c index 438770c..bff2482 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -520,8 +520,8 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable) if (hardLink) { if (link (hp->linkName, name) < 0) perror (name); - chmod(name, mode); chown(name, uid, gid); + chmod(name, mode); return; } @@ -529,8 +529,8 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable) #ifdef S_ISLNK if (symlink (hp->linkName, name) < 0) perror (name); - chmod(name, mode); chown(name, uid, gid); + chmod(name, mode); #else fprintf (stderr, "Cannot create symbolic links\n"); #endif @@ -546,8 +546,8 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable) */ if (S_ISDIR (mode)) { createPath (name, mode); - chmod(name, mode); chown(name, uid, gid); + chmod(name, mode); return; } @@ -585,8 +585,8 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable) return; } if (tostdoutFlag == FALSE) { - fchmod(outFd, mode); fchown(outFd, uid, gid); + fchmod(outFd, mode); } /* |