Do not ever change permissions on existing directories, only
on directories we created while extracting a tarball. Fix based on bug report and patch from Konstantin Boldyshev <konst@linuxassembly.org> -Erik
This commit is contained in:
parent
95a349f427
commit
a17b3631fe
@ -382,6 +382,7 @@ tarExtractRegularFile(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
static int
|
||||
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
{
|
||||
int result;
|
||||
|
||||
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
||||
return( TRUE);
|
||||
@ -393,12 +394,15 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
/* make the final component, just in case it was
|
||||
* omitted by create_path() (which will skip the
|
||||
* directory if it doesn't have a terminating '/') */
|
||||
if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
|
||||
result = mkdir(header->name, header->mode);
|
||||
/* Don't fix permissions on pre-existing directories */
|
||||
if (result == 0) {
|
||||
fixUpPermissions(header);
|
||||
} else if (result < 0 && errno != EEXIST) {
|
||||
perror_msg("%s", header->name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fixUpPermissions(header);
|
||||
return( TRUE);
|
||||
}
|
||||
|
||||
|
8
tar.c
8
tar.c
@ -382,6 +382,7 @@ tarExtractRegularFile(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
static int
|
||||
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
{
|
||||
int result;
|
||||
|
||||
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
||||
return( TRUE);
|
||||
@ -393,12 +394,15 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||
/* make the final component, just in case it was
|
||||
* omitted by create_path() (which will skip the
|
||||
* directory if it doesn't have a terminating '/') */
|
||||
if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
|
||||
result = mkdir(header->name, header->mode);
|
||||
/* Don't fix permissions on pre-existing directories */
|
||||
if (result == 0) {
|
||||
fixUpPermissions(header);
|
||||
} else if (result < 0 && errno != EEXIST) {
|
||||
perror_msg("%s", header->name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
fixUpPermissions(header);
|
||||
return( TRUE);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user