From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id B1FF9139694 for ; Sat, 6 May 2017 13:24:21 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 07735E0DBA; Sat, 6 May 2017 13:24:21 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id C654DE0DBA for ; Sat, 6 May 2017 13:24:20 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 67FF93416D0 for ; Sat, 6 May 2017 13:24:19 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id CDB987447 for ; Sat, 6 May 2017 13:24:17 +0000 (UTC) From: "Ulrich Müller" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Ulrich Müller" Message-ID: <1494075898.5fd090827d2f4464245bbd454371c040358d6b1d.ulm@gentoo> Subject: [gentoo-commits] proj/eselect:master commit in: /, modules/ X-VCS-Repository: proj/eselect X-VCS-Files: ChangeLog modules/kernel.eselect X-VCS-Directories: modules/ / X-VCS-Committer: ulm X-VCS-Committer-Name: Ulrich Müller X-VCS-Revision: 5fd090827d2f4464245bbd454371c040358d6b1d X-VCS-Branch: master Date: Sat, 6 May 2017 13:24:17 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 03c3bf28-9b79-4bb0-9a49-353fe0681acd X-Archives-Hash: fc43bd032bfc4a733fd67c436b0ef345 commit: 5fd090827d2f4464245bbd454371c040358d6b1d Author: Ulrich Müller gentoo org> AuthorDate: Sat May 6 13:04:58 2017 +0000 Commit: Ulrich Müller gentoo org> CommitDate: Sat May 6 13:04:58 2017 +0000 URL: https://gitweb.gentoo.org/proj/eselect.git/commit/?id=5fd09082 Improved error checking in kernel module. * modules/kernel.eselect (do_set): Don't remove the old symlink before we know that we have a valid new target. Simplify. (set_symlink): Check if the new link target is valid, then remove any old symlink, then set the new one. (remove_symlink): Use rm -f. ChangeLog | 6 ++++++ modules/kernel.eselect | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b356bd..6deef3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2017-05-06 Ulrich Müller + * modules/kernel.eselect (do_set): Don't remove the old symlink + before we know that we have a valid new target. Simplify. + (set_symlink): Check if the new link target is valid, then remove + any old symlink, then set the new one. + (remove_symlink): Use rm -f. + * modules/kernel.eselect (set_symlink): * modules/profile.eselect (set_symlink): Check range of number, bug 617572. Thanks to Takuto Yoshida . diff --git a/modules/kernel.eselect b/modules/kernel.eselect index e76c143..57b9b7e 100644 --- a/modules/kernel.eselect +++ b/modules/kernel.eselect @@ -35,7 +35,7 @@ find_targets() { # remove the kernel symlink remove_symlink() { - rm "${EROOT}/usr/src/linux" + rm -f "${EROOT}/usr/src/linux" } # set the kernel symlink @@ -49,15 +49,19 @@ set_symlink() { target=${targets[target-1]} fi - if [[ -z ${target} ]]; then - die -q "Target \"$1\" doesn't appear to be valid!" - elif [[ -f ${EROOT}/usr/src/${target}/Makefile ]]; then - ln -s "${target}" "${EROOT}/usr/src/linux" - elif [[ -f ${EROOT}/usr/src/linux-${target}/Makefile ]]; then - ln -s "linux-${target}" "${EROOT}/usr/src/linux" - else - die -q "Target \"$1\" doesn't appear to be valid!" + if [[ -n ${target} ]]; then + if [[ -f ${EROOT}/usr/src/${target}/Makefile ]]; then + : + elif [[ -f ${EROOT}/usr/src/linux-${target}/Makefile ]]; then + target=linux-${target} + else # target not valid + target= + fi fi + [[ -n ${target} ]] || die -q "Target \"$1\" doesn't appear to be valid!" + + remove_symlink || die -q "Couldn't remove existing symlink" + ln -s "${target}" "${EROOT}/usr/src/linux" } ### show action ### @@ -114,14 +118,10 @@ do_set() { [[ -z $1 ]] && die -q "You didn't tell me what to set the symlink to" [[ $# -gt 1 ]] && die -q "Too many parameters" - if [[ -L ${EROOT}/usr/src/linux ]]; then - # existing symlink - remove_symlink || die -q "Couldn't remove existing symlink" - set_symlink "$1" || die -q "Couldn't set a new symlink" - elif [[ -e ${EROOT}/usr/src/linux ]]; then + if [[ -e ${EROOT}/usr/src/linux && ! -L ${EROOT}/usr/src/linux ]]; then # we have something strange die -q "${EROOT}/usr/src/linux exists but is not a symlink" - else - set_symlink "$1" || die -q "Couldn't set a new symlink" fi + + set_symlink "$1" || die -q "Couldn't set a new symlink" }