From owner-freebsd-ports@FreeBSD.ORG Sat Apr 13 20:01:54 2013 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B19699C6 for ; Sat, 13 Apr 2013 20:01:54 +0000 (UTC) (envelope-from freebsd@grem.de) Received: from mail.grem.de (outcast.grem.de [213.239.217.27]) by mx1.freebsd.org (Postfix) with SMTP id 0990D11EC for ; Sat, 13 Apr 2013 20:01:53 +0000 (UTC) Received: (qmail 16141 invoked by uid 89); 13 Apr 2013 20:01:52 -0000 Received: from unknown (HELO bsd64.grem.de) (mg@grem.de@80.137.98.61) by mail.grem.de with ESMTPA; 13 Apr 2013 20:01:52 -0000 Date: Sat, 13 Apr 2013 22:01:52 +0200 From: Michael Gmelin To: freebsd-ports@freebsd.org Subject: Re: www/nginx pkg-plist + pkgng (detectable?) Message-ID: <20130413220152.51ef2cb3@bsd64.grem.de> In-Reply-To: <20130410135632.0971caef@bsd64.grem.de> References: <20130330034028.0f8cefc8@bsd64.grem.de> <5156C0D9.50909@FreeBSD.org> <20130330142320.38010126@bsd64.grem.de> <20130408103118.67ea695a@bsd64.grem.de> <20130409205950.677a6812@bsd64.grem.de> <20130410061331.GA74304@ithaqua.etoilebsd.net> <20130410135632.0971caef@bsd64.grem.de> X-Mailer: Claws Mail 3.9.0 (GTK+ 2.24.6; amd64-portbld-freebsd9.0) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: Baptiste Daroussin , Chris Rees X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Apr 2013 20:01:54 -0000 On Wed, 10 Apr 2013 13:56:32 +0200 Michael Gmelin wrote: > On Wed, 10 Apr 2013 09:02:29 +0100 > Chris Rees wrote: > > > On 10 April 2013 07:13, Baptiste Daroussin wrote: > > > On Tue, Apr 09, 2013 at 08:59:50PM +0200, Michael Gmelin wrote: > > >> On Tue, 9 Apr 2013 19:43:15 +0100 > > >> Chris Rees wrote: > > >> > > >> > > >> > > > >> > No, it's a bug in pkgng; it should respect @cwd. > > >> > > > > > > > No it is not. > > > > > > While i agree with pkgng that should repect @cwd (it surely does) > > > > > > There is nothing written anywhere that will waranty you that the > > > @exec line will be parsed in order ro prepend @cwd path to a path > > > you provide. the only thing doing that is %D. > > > > > > A user MUST add %D and have complete path in @exec lines > > > > > > In fact in that case it works by chance becauce of how pkg_install > > > treat plist. > > > > Am I misunderstanding the meaning of "current working directory"? > > > > When mkdir is called, it should create the directory in @cwd. > > pkg_install's behaviour is correct here, and pkgng's is not. > > > > Chris > > pkg_create(1) says: > > @cwd [directory] > Set the internal directory pointer to point to directory. > All subsequent *filenames* will be assumed relative to > this directory. If no directory argument is given, it will set > the internal directory pointer to the first prefix value. > Note: @cd is also an alias for this command. > > but as far as the package manager is concerned, www/nginx-dist is an > argument to mkdir in the exec call (@exec mkdir -p -m 755 > www/nginx-dist) and not a filename. > > Also the porters handbook uses %D in all its examples, but offers no > explicit explanation. > > That said, the way pkg_add is implemented, it changes to directories > as a side effect of using its PUSHOUT macro in > usr.sbin/pkg_install/add/extract.c (I only glanced at that, but that > seems to be the reason why this is happening). So commands get > executed within `pwd` == @cwd. > > So there is definitely a backwards compatibility problem for the sheer > reason of that "it worked before". I don't thing pkg should adopt this > behavior (it seems like a bad idea long term), but it should detect it > somehow. A simple approach to detect this could be chdiring > to /var/empty in pkg before executing the call so it will fail in case > the path used within @exec is relative. > > Cheers, > Michael > So what now? Is anybody looking into this? Should I open a PR for nginx and supply a patch that fixes this (theoretically it should be applied despite the port freeze, since it's a build problem). Regarding pkgng: Will anybody consider implementing automatic checks to prevent something like this from happening (e.g. the simplistic approach I suggested). Even if the files wouldn't be left behind, the fact that something gets touched in pwd is really bad - as an admin it should be safe to assume that I can start pkg from any directory without altering it state (and be it temporarily). -- Michael Gmelin