From owner-freebsd-bugs@FreeBSD.ORG Mon Jan 27 01:50:00 2014 Return-Path: Delivered-To: freebsd-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id AA402924 for ; Mon, 27 Jan 2014 01:50:00 +0000 (UTC) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 83D78112A for ; Mon, 27 Jan 2014 01:50:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id s0R1o0kX072610 for ; Mon, 27 Jan 2014 01:50:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id s0R1o07W072609; Mon, 27 Jan 2014 01:50:00 GMT (envelope-from gnats) Resent-Date: Mon, 27 Jan 2014 01:50:00 GMT Resent-Message-Id: <201401270150.s0R1o07W072609@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, David Shane Holden Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id EB6C18F2 for ; Mon, 27 Jan 2014 01:45:40 +0000 (UTC) Received: from oldred.freebsd.org (oldred.freebsd.org [IPv6:2001:1900:2254:206a::50:4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D42EA110D for ; Mon, 27 Jan 2014 01:45:40 +0000 (UTC) Received: from oldred.freebsd.org ([127.0.1.6]) by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id s0R1jeHw050807 for ; Mon, 27 Jan 2014 01:45:40 GMT (envelope-from nobody@oldred.freebsd.org) Received: (from nobody@localhost) by oldred.freebsd.org (8.14.5/8.14.5/Submit) id s0R1jeUU050798; Mon, 27 Jan 2014 01:45:40 GMT (envelope-from nobody) Message-Id: <201401270145.s0R1jeUU050798@oldred.freebsd.org> Date: Mon, 27 Jan 2014 01:45:40 GMT From: David Shane Holden To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: bin/186152: [patch] freebsd-update -b: correctly handle symlinks with absolute paths X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jan 2014 01:50:00 -0000 >Number: 186152 >Category: bin >Synopsis: [patch] freebsd-update -b: correctly handle symlinks with absolute paths >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Jan 27 01:50:00 UTC 2014 >Closed-Date: >Last-Modified: >Originator: David Shane Holden >Release: 10.0-RELEASE >Organization: >Environment: FreeBSD node 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 >Description: When upgrading a base directory (freebsd-update -b), symlinks with absolute paths are checked against the host system instead of the base directory which was causing the problem reported at https://forums.freebsd.org/viewtopic.php?f=5&t=44520. >How-To-Repeat: Check forums thread. >Fix: Patch attached with submission follows: --- freebsd-update.orig 2014-01-27 01:03:59.000000000 +0000 +++ freebsd-update 2014-01-27 01:18:01.000000000 +0000 @@ -1437,11 +1437,21 @@ # sorted by device and inode number. while read F; do # If the symlink/file/directory does not exist, record this. - if ! [ -e ${BASEDIR}/${F} ]; then + # Symlinks with absolute paths need to be checked relative + # to their base directories. + FF=${F} + if [ -L ${BASEDIR}/${F} ]; then + LINK=`readlink ${BASEDIR}/${F}` + echo "${LINK}" | grep -qe "^/" + if [ $? -eq 0 ]; then + FF=${LINK} + fi + fi + if ! [ -e ${BASEDIR}/${FF} ]; then echo "${F}|-||||||" continue fi - if ! [ -r ${BASEDIR}/${F} ]; then + if ! [ -r ${BASEDIR}/${FF} ]; then echo "Cannot read file: ${BASEDIR}/${F}" \ >/dev/stderr touch .err >Release-Note: >Audit-Trail: >Unformatted: