aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277>1999-12-28 00:17:46 +0000
committererik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277>1999-12-28 00:17:46 +0000
commit898c196830650885c57938949e159465451508e3 (patch)
treeca61fc301d4f1ee06b0a03bd352b672360b88eda
parent2172786669d3e335bd3595886a309662a1adaf37 (diff)
downloadbusybox-w32-898c196830650885c57938949e159465451508e3.tar.gz
busybox-w32-898c196830650885c57938949e159465451508e3.tar.bz2
busybox-w32-898c196830650885c57938949e159465451508e3.zip
Fixed a bug where tar would not set the user and group on device
special files. -Erik git-svn-id: svn://busybox.net/trunk/busybox@265 69ca8d6d-28ef-0310-b511-8ec308f3f277
-rw-r--r--Changelog6
-rw-r--r--archival/tar.c16
-rw-r--r--tar.c16
3 files changed, 17 insertions, 21 deletions
diff --git a/Changelog b/Changelog
index 8b0b0be1d..8edf3a62a 100644
--- a/Changelog
+++ b/Changelog
@@ -10,9 +10,9 @@
10 * Added 'grep -q' thanks to a patch from "Konstantin Boldyshev" 10 * Added 'grep -q' thanks to a patch from "Konstantin Boldyshev"
11 <konst@voshod.com>. 11 <konst@voshod.com>.
12 * Implemented sort. -beppu 12 * Implemented sort. -beppu
13 * Fixed tar SGID and SUID bug. Seems that chown(2) clears S_ISUID and 13 * Fixed a bug where tar would set, and then clear SGID and SUID bits.
14 S_ISGID, even when chown is called as root. I changed the ordering 14 * Fixed a bug where tar would not set the user and group on device
15 of chown and chmod so SGID and SUID file permissions don't get munged. 15 special files.
16 16
17 -Erik Andersen 17 -Erik Andersen
18 18
diff --git a/archival/tar.c b/archival/tar.c
index bff248212..7167d95cd 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -577,17 +577,15 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable)
577 } else { 577 } else {
578 outFd = open (name, O_WRONLY | O_CREAT | O_TRUNC, mode); 578 outFd = open (name, O_WRONLY | O_CREAT | O_TRUNC, mode);
579 } 579 }
580 if (outFd < 0) {
581 perror (name);
582 skipFileFlag = TRUE;
583 return;
584 }
585 chown(name, uid, gid);
586 chmod(name, mode);
580 } 587 }
581 588
582 if (outFd < 0) {
583 perror (name);
584 skipFileFlag = TRUE;
585 return;
586 }
587 if (tostdoutFlag == FALSE) {
588 fchown(outFd, uid, gid);
589 fchmod(outFd, mode);
590 }
591 589
592 /* 590 /*
593 * If the file is empty, then that's all we need to do. 591 * If the file is empty, then that's all we need to do.
diff --git a/tar.c b/tar.c
index bff248212..7167d95cd 100644
--- a/tar.c
+++ b/tar.c
@@ -577,17 +577,15 @@ readHeader (const TarHeader * hp, int fileCount, char **fileTable)
577 } else { 577 } else {
578 outFd = open (name, O_WRONLY | O_CREAT | O_TRUNC, mode); 578 outFd = open (name, O_WRONLY | O_CREAT | O_TRUNC, mode);
579 } 579 }
580 if (outFd < 0) {
581 perror (name);
582 skipFileFlag = TRUE;
583 return;
584 }
585 chown(name, uid, gid);
586 chmod(name, mode);
580 } 587 }
581 588
582 if (outFd < 0) {
583 perror (name);
584 skipFileFlag = TRUE;
585 return;
586 }
587 if (tostdoutFlag == FALSE) {
588 fchown(outFd, uid, gid);
589 fchmod(outFd, mode);
590 }
591 589
592 /* 590 /*
593 * If the file is empty, then that's all we need to do. 591 * If the file is empty, then that's all we need to do.