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
This commit is contained in:
Erik Andersen 1999-12-27 23:48:33 +00:00
parent 00417a38c1
commit 98f67e35d8
2 changed files with 8 additions and 8 deletions

View File

@ -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);
}
/*

8
tar.c
View File

@ -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);
}
/*