From owner-svn-src-head@FreeBSD.ORG Thu Dec 25 19:05:21 2008 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 39A57106564A; Thu, 25 Dec 2008 19:05:21 +0000 (UTC) (envelope-from yanefbsd@gmail.com) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.248]) by mx1.freebsd.org (Postfix) with ESMTP id B3B698FC29; Thu, 25 Dec 2008 19:05:20 +0000 (UTC) (envelope-from yanefbsd@gmail.com) Received: by an-out-0708.google.com with SMTP id c2so1418231anc.13 for ; Thu, 25 Dec 2008 11:05:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:references:message-id:from:to :in-reply-to:content-type:content-transfer-encoding:x-mailer :mime-version:subject:date:cc; bh=j0ghuRN7nXMEydJZ3P86ZCyiERlD5NAbhF4sIYbqC8U=; b=DarJIfqSjUv2xJcDcdBeUx2GbSOoQGtVdUYTcnzKscS5lA5A8F10RCK6FTa69T4FEG 8XtReGR+gTWoij89o9D9sMAitwUmFjyrb0DnSjxXFCOaA13DSlTLhI15HuGyvKhYEfTC GCT3yiYLjs8v/W6zhM99FQmzlDXrS9LBe5N1w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=references:message-id:from:to:in-reply-to:content-type :content-transfer-encoding:x-mailer:mime-version:subject:date:cc; b=UaWoI/yLCzxty3lzhMuu6AuAaPEVoXPbFWyCMxUZhjAVjkswoeWRPeTSLyMpkSWAzb tLWoAnENVRdz0vIEHznZZ1DXC3yYpAuy4Cm2sPWQifsI34fcelC8tpe7CsgkJJstCxDT /FRqumVnOtmiREpxKgBq2qwaYOZardDqtuEDk= Received: by 10.100.126.15 with SMTP id y15mr5955388anc.123.1230231919880; Thu, 25 Dec 2008 11:05:19 -0800 (PST) Received: from ?10.94.86.53? ([32.159.232.211]) by mx.google.com with ESMTPS id d29sm13649204and.41.2008.12.25.11.05.09 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 25 Dec 2008 11:05:19 -0800 (PST) References: <200812251659.mBPGxZog018609@svn.freebsd.org> Message-Id: From: Garrett Cooper To: Florent Thoumie In-Reply-To: <200812251659.mBPGxZog018609@svn.freebsd.org> Content-Type: text/plain; charset=us-ascii; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit X-Mailer: iPhone Mail (5F136) Mime-Version: 1.0 (iPhone Mail 5F136) Date: Thu, 25 Dec 2008 11:04:44 -0800 Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r186496 - head/usr.sbin/pkg_install/lib X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Dec 2008 19:05:21 -0000 On Dec 25, 2008, at 8:59, Florent Thoumie wrote: > Author: flz > Date: Thu Dec 25 16:59:35 2008 > New Revision: 186496 > URL: http://svn.freebsd.org/changeset/base/186496 > > Log: > Follow symlinks when deleting directories. > Bump PKG_INSTALL_VER to 20081225 (Merry Christmas \o/). > > PR: bin/54446 > Submitted by: Andrea Barberio > MFC after: 1 month > > Modified: > head/usr.sbin/pkg_install/lib/lib.h > head/usr.sbin/pkg_install/lib/plist.c > > Modified: head/usr.sbin/pkg_install/lib/lib.h > === > === > === > ===================================================================== > --- head/usr.sbin/pkg_install/lib/lib.h Thu Dec 25 16:44:01 > 2008 (r186495) > +++ head/usr.sbin/pkg_install/lib/lib.h Thu Dec 25 16:59:35 > 2008 (r186496) > @@ -105,7 +105,7 @@ > * Version of the package tools - increase only when some > * functionality used by bsd.port.mk is changed, added or removed > */ > -#define PKG_INSTALL_VERSION 20080708 > +#define PKG_INSTALL_VERSION 20081225 > > #define PKG_WRAPCONF_FNAME "/var/db/pkg_install.conf" > #define main(argc, argv) real_main(argc, argv) > > Modified: head/usr.sbin/pkg_install/lib/plist.c > === > === > === > ===================================================================== > --- head/usr.sbin/pkg_install/lib/plist.c Thu Dec 25 16:44:01 > 2008 (r186495) > +++ head/usr.sbin/pkg_install/lib/plist.c Thu Dec 25 16:59:35 > 2008 (r186496) > @@ -544,45 +544,92 @@ delete_package(Boolean ign_err, Boolean > int > delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs) > { > - char *cp1, *cp2; > + char *cp1, *cp2, *realdir; > > - cp1 = cp2 = strdup(dir); > - if (!fexists(dir)) { > + realdir = malloc(FILENAME_MAX); Should FILENAME_MAX be +1, as well as all offsets? > + if (realdir == NULL) { > + warnx("Couldn't allocate enough memory\n"); > + return (ign_err ? SUCCESS : FAIL); > + } > + > + if (issymlink(dir) && readlink(dir, realdir, FILENAME_MAX-1) == > -1) Memory leak. > > + return (ign_err ? SUCCESS : FAIL); > + > + strlcpy(realdir, dir, FILENAME_MAX); > + > + cp1 = cp2 = strdup(realdir); > + if (cp1 == NULL) { > + warnx("Couldn't allocate enough memory\n"); > + return (ign_err ? SUCCESS : FAIL); Another memory leak. > + } > + > + if (!fexists(realdir)) { > if (!ign_err) > warnx("%s '%s' doesn't exist", > - isdir(dir) ? "directory" : "file", dir); > - return !ign_err; > + isdir(realdir) ? "directory" : "file", realdir); > + free(cp1); > + free(realdir); > + return (ign_err ? SUCCESS : FAIL); > } > else if (nukedirs) { > - if (vsystem("%s -r%s %s", REMOVE_CMD, (ign_err ? "f" : ""), dir)) > - return 1; > + if (vsystem("%s -r%s %s", REMOVE_CMD, (ign_err ? "f" : ""), > realdir)) { > + free(cp1); > + free(realdir); > + return (ign_err ? SUCCESS : FAIL); > + } > } > - else if (isdir(dir) && !issymlink(dir)) { > - if (RMDIR(dir) && !ign_err) > - return 1; > + else if (isdir(realdir)) { > + if (RMDIR(realdir)) { > + free(cp1); > + free(realdir); > + return (ign_err ? SUCCESS : FAIL); > + } > } > else { > - if (REMOVE(dir, ign_err)) > - return 1; > + if (REMOVE(realdir, ign_err)) { > + free(cp1); > + free(realdir); > + return (ign_err ? SUCCESS : FAIL); > + } > } > > - if (!nukedirs) > - return 0; > + if (!nukedirs) { > + free(cp1); > + free(realdir); > + return (SUCCESS); > + } > while (cp2) { > if ((cp2 = strrchr(cp1, '/')) != NULL) > *cp2 = '\0'; > - if (!isemptydir(dir)) > - return 0; > - if (RMDIR(dir) && !ign_err) { > - if (!fexists(dir)) > - warnx("directory '%s' doesn't exist", dir); > - else > - return 1; > + if (!isemptydir(realdir)) { > + free(cp1); > + free(realdir); > + return (SUCCESS); > + } > + if (RMDIR(realdir) && !ign_err) { > + if (!fexists(realdir)) { > + warnx("directory '%s' doesn't exist", realdir); > + free(cp1); > + free(realdir); > + return (SUCCESS); > + } else { > + free(cp1); > + free(realdir); > + return (FAIL); > + } > } > /* back up the pathname one component */ > if (cp2) { > - cp1 = strdup(dir); > + free(cp1); > + cp1 = strdup(realdir); > + if (cp1 == NULL) { > + warnx("Couldn't allocate enough memory\n"); Another memory leak. > + return (ign_err ? SUCCESS : FAIL); > + } > } > } > - return 0; > + free(cp1); > + free(realdir); > + return (SUCCESS); > } > +