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
|
static int
|
||||||
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
||||||
return( TRUE);
|
return( TRUE);
|
||||||
@ -393,12 +394,15 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
|||||||
/* make the final component, just in case it was
|
/* make the final component, just in case it was
|
||||||
* omitted by create_path() (which will skip the
|
* omitted by create_path() (which will skip the
|
||||||
* directory if it doesn't have a terminating '/') */
|
* 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);
|
perror_msg("%s", header->name);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixUpPermissions(header);
|
|
||||||
return( TRUE);
|
return( TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
tar.c
8
tar.c
@ -382,6 +382,7 @@ tarExtractRegularFile(TarInfo *header, int extractFlag, int tostdoutFlag)
|
|||||||
static int
|
static int
|
||||||
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
if (extractFlag==FALSE || tostdoutFlag==TRUE)
|
||||||
return( TRUE);
|
return( TRUE);
|
||||||
@ -393,12 +394,15 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
|
|||||||
/* make the final component, just in case it was
|
/* make the final component, just in case it was
|
||||||
* omitted by create_path() (which will skip the
|
* omitted by create_path() (which will skip the
|
||||||
* directory if it doesn't have a terminating '/') */
|
* 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);
|
perror_msg("%s", header->name);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixUpPermissions(header);
|
|
||||||
return( TRUE);
|
return( TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user