summaryrefslogtreecommitdiff
path: root/tar.c
diff options
context:
space:
mode:
authorErik Andersen1999-12-27 23:48:33 +0000
committerErik Andersen1999-12-27 23:48:33 +0000
commit98f67e35d82e19f7a5e58551b5dd8feb121229b9 (patch)
tree5ddf65224b19b141783561b13a7c0dc35b6dda12 /tar.c
parent00417a38c10f1f5685013d16ad4fb782aa2deddb (diff)
downloadbusybox-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 'tar.c')
-rw-r--r--tar.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/tar.c b/tar.c
index 438770c..bff2482 100644
--- a/tar.c
+++ b/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);
}
/*