diff options
author | Erik Andersen <andersen@codepoet.org> | 1999-12-27 23:48:33 +0000 |
---|---|---|
committer | Erik Andersen <andersen@codepoet.org> | 1999-12-27 23:48:33 +0000 |
commit | 98f67e35d82e19f7a5e58551b5dd8feb121229b9 (patch) | |
tree | 5ddf65224b19b141783561b13a7c0dc35b6dda12 | |
parent | 00417a38c10f1f5685013d16ad4fb782aa2deddb (diff) | |
download | 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
-rw-r--r-- | archival/tar.c | 8 | ||||
-rw-r--r-- | tar.c | 8 |
2 files changed, 8 insertions, 8 deletions
diff --git a/archival/tar.c b/archival/tar.c index 438770c03..bff248212 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); } /* @@ -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); } /* |