From 98f67e35d82e19f7a5e58551b5dd8feb121229b9 Mon Sep 17 00:00:00 2001 From: Erik Andersen Date: Mon, 27 Dec 1999 23:48:33 +0000 Subject: 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 --- archival/tar.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'archival/tar.c') 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); } /* -- cgit v1.2.3