From 8c4d911fa5bda535c3a6aaf461ff4566de3303db Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Fri, 30 Apr 2021 15:27:46 +0200 Subject: [PATCH] modmanage: don't use PATH to find commands --- Pmodules/modmanage.bash.in | 66 ++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/Pmodules/modmanage.bash.in b/Pmodules/modmanage.bash.in index 1f74361..62727e3 100755 --- a/Pmodules/modmanage.bash.in +++ b/Pmodules/modmanage.bash.in @@ -6,17 +6,37 @@ unset CDPATH # used for some output only declare -r CMD='modmanage' -declare -r mydir=$(cd $(dirname "$0") && pwd) -declare -r prefix=$(dirname "${mydir}") +dirname=$(PATH=/bin:/usr/bin which dirname) +declare -r dirname +uname=$(PATH=/bin:/usr/bin which uname) +declare -r uname +mkdir=$(PATH=/bin:/usr/bin which mkdir) +declare -r mkdir +rsync=$(PATH=/bin:/usr/bin which rsync) +declare -r rsync +rm=$(PATH=/bin:/usr/bin /usr/bin/which rm) +declare -r rm + +if [[ $(${uname} -s) == 'Darwin' ]]; then + declare -r getopt="${libexecdir}/getopt" + declare -r find="${libexecdir}/find" +else + getopt=$(PATH=/bin:/usr/bin /usr/bin/which getopt) + declare -r getopt + find=$(PATH=/bin:/usr/bin /usr/bin/which find) + declare -r find +fi + + +declare -r mydir=$(cd $(${dirname} "$0") && pwd) +declare -r prefix=$(${dirname} "${mydir}") declare -r bindir="${prefix}/bin" -declare -r sbindir="${prefix}/sbin" declare -r libdir="${prefix}/lib" declare -r libexecdir="${prefix}/libexec" -source "${libdir}/libstd.bash" -source "${libdir}/libpmodules.bash" -PATH="${sbindir}:${bindir}:${PATH}" +source "${libdir}/libstd.bash" + _exit () { std::die 1 "Interrupted..." @@ -205,7 +225,7 @@ get_module_prefix() { # $1: relative module file path # get_releasefile_name() { - echo "$(dirname "$1")/.release-$(basename "$1")" + echo "$(${dirname} "$1")/.release-$(basename "$1")" } ############################################################################## @@ -234,8 +254,8 @@ sync_module() { # install/update module if [[ ! -d "${target_prefix}/${rel_module_prefix}" ]] || [[ "${force}" == 'yes' ]]; then - $DRY mkdir -p "${target_prefix}/${rel_module_prefix}" || return $? - $DRY rsync --links --perms --recursive --delete \ + $DRY ${mkdir} -p "${target_prefix}/${rel_module_prefix}" || return $? + $DRY ${rsync} --links --perms --recursive --delete \ "${src_prefix}/${rel_module_prefix}/" \ "${target_prefix}/${rel_module_prefix}/" || exit $? fi @@ -246,8 +266,8 @@ sync_module() { # create target directory for module- and release-file if [[ -e "${src_modulefile}" ]] || [[ -e "${src_releasefile}" ]]; then - local dir=$( dirname "${target_modulefile}" ) - $DRY mkdir -p "${dir}" || return $? + local dir=$( ${dirname} "${target_modulefile}" ) + $DRY ${mkdir} -p "${dir}" || return $? fi # copy modulefile template @@ -260,20 +280,20 @@ sync_module() { local -r src_template="${src_prefix}/${template}" local -r target_template="${target_prefix}/${template}" if [[ -e "${src_template}" ]]; then - $DRY mkdir -p "${target_template}" - $DRY rsync --links --perms --recursive \ + $DRY ${mkdir} -p "${target_template}" + $DRY ${rsync} --links --perms --recursive \ "${src_template}" "${target_template}" || exit $? fi # copy modulefile if [[ -e "${src_modulefile}" ]]; then - $DRY rsync --links --perms --recursive \ + $DRY ${rsync} --links --perms --recursive \ "${src_modulefile}" "${target_modulefile}" || exit $? fi # copy release-file if [[ -e "${src_releasefile}" ]]; then - $DRY rsync --links --perms --recursive \ + $DRY ${rsync} --links --perms --recursive \ "${src_releasefile}" "${target_releasefile}" || exit $? fi @@ -290,9 +310,8 @@ sync_module() { sync_config() { src="$1/${PMODULES_CONFIG_DIR}/" dst="$2/${PMODULES_CONFIG_DIR}/" - $DRY rsync --recursive --links --perms --delete \ + $DRY ${rsync} --recursive --links --perms --delete \ "${src}" "${dst}" 2>/dev/null || return $? - sed -i.bak "s/PMODULES_VERSION=\(.*\)/PMODULES_VERSION=${PMODULES_VERSION}/" "${dst}/environment.bash" echo } @@ -416,7 +435,7 @@ environment at '${PMODULES_ROOT}' fi force='yes' echo "Creating target directory '${target_prefix}'..." - $DRY mkdir -p "${target_prefix}" || \ + $DRY ${mkdir} -p "${target_prefix}" || \ std::die 1 "Error: make directory failed!" echo @@ -430,13 +449,12 @@ environment at '${PMODULES_ROOT}' "${src_prefix}" \ "${target_prefix}" || \ std::die 1 "Error: sync Pmodules failed!" - mkdir -p "${target_prefix}/Tools/${PMODULES_MODULEFILES_DIR}" - echo dst="${target_prefix}/${PMODULES_CONFIG_DIR}/environment.bash" echo "Adding installation source '${src_prefix}' to '${dst}'..." sed -i.bak '/PMODULES_INSTALL_SOURCE/d' "${dst}" echo "declare -x PMODULES_INSTALL_SOURCE=\"${src_prefix}\"" >> "${dst}" + ${mkdir} -p "${target_prefix}/Tools/${PMODULES_MODULEFILES_DIR}" echo if [[ -n "${user}" ]]; then @@ -505,7 +523,7 @@ get_group_depths () { cd "${root}" local group for group in "${Groups[@]}"; do - local fname=$(find "${group}/${modulefiles_dir}" \ + local fname=$(${find} "${group}/${modulefiles_dir}" \ -depth \( -type f -o -type l \) -print -quit) [[ -n ${fname} ]] || continue local -a tmp @@ -591,7 +609,7 @@ subcommand_install() { [[ -z ${dep} ]] && continue # search for module with current modulepath and remember - local modulename=$(find "${modulepath[@]}" -path "*/${dep}" \ + local modulename=$(${find} "${modulepath[@]}" -path "*/${dep}" \ 2>/dev/null | head -n 1 ) [[ -n ${modulename} ]] || \ std::die 3 "Oops: required module '${dep}' not found!" @@ -606,7 +624,7 @@ subcommand_install() { modulepath+=( "${path}" ) fi done < "${tmpfile}" - rm "${tmpfile}" + ${rm} "${tmpfile}" } #...................................................................... @@ -729,7 +747,7 @@ subcommand_install() { map_to_family[$_key]=${_family} fi done < <({ cd "${src_prefix}" && \ - find */"${PMODULES_MODULEFILES_DIR}" \ + ${find} */"${PMODULES_MODULEFILES_DIR}" \ \( -type l -o -type f \) \! -name ".*"; } 2>/dev/null ) #