Revert the patch from Konstantin Boldyshev <konst@linuxassembly.org> to never
change permissions on existing directories. This behavior is contrary to SUSv2 and contrary to GNU tar. Thanks to Matt Kraai for pointing this out. I should have been much more careful about accepting such a patch. -Erik
This commit is contained in:
parent
67a4640333
commit
cb2a372c9f
@ -382,8 +382,6 @@ 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);
|
||||||
|
|
||||||
@ -394,15 +392,12 @@ 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 '/') */
|
||||||
result = mkdir(header->name, header->mode);
|
if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
|
||||||
/* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
tar.c
9
tar.c
@ -382,8 +382,6 @@ 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);
|
||||||
|
|
||||||
@ -394,15 +392,12 @@ 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 '/') */
|
||||||
result = mkdir(header->name, header->mode);
|
if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
|
||||||
/* 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