Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Feb 2014 08:33:05 +0100 (CET)
From:      Marcus von Appen <mva@FreeBSD.org>
To:        FreeBSD-gnats-submit@freebsd.org
Cc:        portmgr@FreeBSD.org
Subject:   ports/186619: [Patch]: Fix symlink handling for uniquefiles USES
Message-ID:  <201402100733.s1A7X53W010171@medusa.sysfault.org>
Resent-Message-ID: <201402100740.s1A7e04H009988@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         186619
>Category:       ports
>Synopsis:       [Patch]: Fix symlink handling for uniquefiles USES
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 10 07:40:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator:     Marcus von Appen
>Release:        FreeBSD 9.2-STABLE amd64
>Organization:
>Environment:
System: FreeBSD medusa.sysfault.org 9.2-STABLE FreeBSD 9.2-STABLE #14 r260254: Sat Jan 4 14:59:59 CET 2014 root@medusa.sysfault.org:/usr/obj/usr/src/sys/MEDUSA amd64


>Description:
	The uniquefiles USES does not handle symlinks to files, which do not
    point to a valid location. Since test -e only evaluates to true, if
    the symlink exists, symlinks within a stagedir pointing to ${PREFIX}
    would not be properly prefixed or suffixed.
>How-To-Repeat:
	Several ports from the exp-run of ports/185947 suffer from that.
>Fix:


--- symlink_uniquefiles2.diff begins here ---
Index: Mk/Uses/uniquefiles.mk
===================================================================
--- Mk/Uses/uniquefiles.mk	(revision 343443)
+++ Mk/Uses/uniquefiles.mk	(working copy)
@@ -100,7 +100,7 @@

 .if ${UNIQUE_DEFAULT_LINKS} == yes
 _DO_CONDITIONAL_SYMLINK=	\
-	if [ ! -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+	if [ ! -e ${STAGEDIR}${PREFIX}/$${fname} -a ! -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
 		${ECHO_MSG} "  $${newf} --> @$${fname}"; \
 		${LN} -s ${PREFIX}/$${newf} ${STAGEDIR}${PREFIX}/$${fname}; \
 		${ECHO_CMD} LINKED:$${newf}:$${fname} >> ${_UNIQUEPKGLIST}; \
@@ -116,7 +116,7 @@
 .endif
 .for entry in ${UNIQUE_PREFIX_FILES}
 	@fname=${entry}; \
-	if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+	if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
 		newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
 		${ECHO_MSG} "  $${fname} --> $${newf}" ; \
 		${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -129,7 +129,7 @@
 .endfor
 .if ${UNIQUE_FIND_PREFIX_FILES}
 	@for fname in `${UNIQUE_FIND_PREFIX_FILES}`; do \
-		if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+		if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
 			newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
 			${ECHO_MSG} "  $${fname} --> $${newf}" ; \
 			${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -147,7 +147,7 @@
 .endif
 .for entry in ${UNIQUE_SUFFIX_FILES}
 	@fname=${entry}; \
-	if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+	if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
 		newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
 		${ECHO_MSG} "  $${fname} --> $${newf}"; \
 		${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -160,7 +160,7 @@
 .endfor
 .if ${UNIQUE_FIND_SUFFIX_FILES}
 	@for fname in `${UNIQUE_FIND_SUFFIX_FILES}`; do \
-		if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+		if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
 			newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
 			${ECHO_MSG} "  $${fname} --> $${newf}"; \
 			${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
--- symlink_uniquefiles2.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402100733.s1A7X53W010171>