aboutsummaryrefslogtreecommitdiff
path: root/archival/libunarchive/data_extract_all.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-09-11 08:32:40 +0000
committerEric Andersen <andersen@codepoet.org>2003-09-11 08:32:40 +0000
commit2fdba24620314729941bb30e6dd987dd1a1f1709 (patch)
tree747015fe95950a8bf64dc14769aca5d5452590e0 /archival/libunarchive/data_extract_all.c
parent6231f092bd5861cd51a05440b15c00afabbb8851 (diff)
downloadbusybox-2fdba24620314729941bb30e6dd987dd1a1f1709.tar.gz
Marc A. Lehmann writes:
The tar -x command in busybox does not restore the file mode correctly. The reason is most probably this code in archival/libunarachive/data_extract_all.c: chmod(file_header->name, file_header->mode); chown(file_header->name, file_header->uid, file_header->gid); chown clears the set*id bits (on current versions of linux :). Flipping the order around fixes the problem. (tested with 1.00pre3 from cvs).
Diffstat (limited to 'archival/libunarchive/data_extract_all.c')
-rw-r--r--archival/libunarchive/data_extract_all.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c
index 05bd2f03b..7349339d3 100644
--- a/archival/libunarchive/data_extract_all.c
+++ b/archival/libunarchive/data_extract_all.c
@@ -112,8 +112,8 @@ extern void data_extract_all(archive_handle_t *archive_handle)
}
}
- chmod(file_header->name, file_header->mode);
chown(file_header->name, file_header->uid, file_header->gid);
+ chmod(file_header->name, file_header->mode);
if (archive_handle->flags & ARCHIVE_PRESERVE_DATE) {
struct utimbuf t;