Marc A. Lehmann writes:
authorEric Andersen <andersen@codepoet.org>
Thu, 11 Sep 2003 08:32:40 +0000 (08:32 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 11 Sep 2003 08:32:40 +0000 (08:32 -0000)
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).

archival/libunarchive/data_extract_all.c

index 05bd2f03b0c71d6cdec9932c797d2defc18a9019..7349339d3430c0af988d377c83635a1d125c26de 100644 (file)
@@ -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;