cvs commit: src/lib/libarchive archive_read_extract.c
Tim Kientzle
kientzle at freebsd.org
Wed Jul 7 22:41:46 PDT 2004
Tim Kientzle wrote:
> kientzle 2004-07-08 05:24:48 UTC
>
> FreeBSD src repository
>
> Modified files:
> lib/libarchive archive_read_extract.c
> Log:
> I think this is my fourth complete rewrite of the dir-creation
> code. <whew!> This version handles all of the following edge cases:
> * Restoring explicit dirs with 000 permissions (star fails this test)
> * Restore of implicit or explicit dirs when umask=777
> (gtar and star both fail this test)
> * Restoring dir paths containing "." and ".." components
> This version initially creates all dirs with permission 700 (ignoring
> umask), then does a post-extract "fixup" pass to set the correct
> permissions (which may or may not depend on umask, depending on the
> restore flags and whether it's an explicit or implicit dir).
> Permissions are restored depth-first so that permissions within
> non-writable dirs can be correctly restored. (The depth-sorting does
> correctly account for dirs with ".." components.)
>
> Revision Changes Path
> 1.29 +212 -138 src/lib/libarchive/archive_read_extract.c
Though I freely admit this is all pretty much
academic, some test files that illustrate
these issues are available at:
http://people.freebsd.org/~kientzle/libarchive/test/
Tim
P.S. While playing with umask=777, I discovered a
few annoying nits: cvs erases it's own Entries file;
chmod -R and rm -rf both fail on non-readable dirs.
More information about the cvs-all
mailing list