From owner-cvs-src@FreeBSD.ORG Thu Jul 8 05:41:46 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9900316A4CE; Thu, 8 Jul 2004 05:41:46 +0000 (GMT) Received: from kientzle.com (h-66-166-149-50.snvacaid.covad.net [66.166.149.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 56A3343D5A; Thu, 8 Jul 2004 05:41:44 +0000 (GMT) (envelope-from kientzle@freebsd.org) Received: from freebsd.org (p54.kientzle.com [66.166.149.54]) by kientzle.com (8.12.9/8.12.9) with ESMTP id i685fi90049347; Wed, 7 Jul 2004 22:41:44 -0700 (PDT) (envelope-from kientzle@freebsd.org) Message-ID: <40ECDE8D.8050406@freebsd.org> Date: Wed, 07 Jul 2004 22:41:33 -0700 From: Tim Kientzle User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.4) Gecko/20031006 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tim Kientzle References: <200407080524.i685Omoa096806@repoman.freebsd.org> In-Reply-To: <200407080524.i685Omoa096806@repoman.freebsd.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit cc: cvs-src@freebsd.org cc: src-committers@freebsd.org cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/lib/libarchive archive_read_extract.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Jul 2004 05:41:46 -0000 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. 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.