diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2018-09-05 21:54:15 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2018-09-05 21:54:15 +0200 | 
| commit | 6bf91b141b7b3e3524f422d4c18bccf7f87aecd1 (patch) | |
| tree | 854398618f6cbc5187abe5651a2bb75a17ba9b7c /install-sh | |
| parent | 6dcf2054b927e3bd6889ae8eec0f9b5669fcb025 (diff) | |
| parent | 777189a11acf313a6f2f2255a475b40d4330ff65 (diff) | |
Merge branch 'release/debian/6.8.2-1'debian/6.8.2-1
Diffstat (limited to 'install-sh')
| -rwxr-xr-x | install-sh | 45 | 
1 files changed, 31 insertions, 14 deletions
| @@ -1,7 +1,7 @@  #!/bin/sh  # install - install a program, script, or datafile -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-11.20; # UTC  # This originates from X11R5 (mit/util/scripts/install.sh), which was  # later released in X11R6 (xc/config/util/install.sh) with the @@ -271,15 +271,18 @@ do      fi      dst=$dst_arg -    # If destination is a directory, append the input filename; won't work -    # if double slashes aren't ignored. +    # If destination is a directory, append the input filename.      if test -d "$dst"; then        if test "$is_target_a_directory" = never; then          echo "$0: $dst_arg: Is a directory" >&2          exit 1        fi        dstdir=$dst -      dst=$dstdir/`basename "$src"` +      dstbase=`basename "$src"` +      case $dst in +	*/) dst=$dst$dstbase;; +	*)  dst=$dst/$dstbase;; +      esac        dstdir_status=0      else        dstdir=`dirname "$dst"` @@ -288,6 +291,11 @@ do      fi    fi +  case $dstdir in +    */) dstdirslash=$dstdir;; +    *)  dstdirslash=$dstdir/;; +  esac +    obsolete_mkdir_used=false    if test $dstdir_status != 0; then @@ -324,34 +332,43 @@ do              # is incompatible with FreeBSD 'install' when (umask & 300) != 0.              ;;            *) +            # Note that $RANDOM variable is not portable (e.g. dash);  Use it +            # here however when possible just to lower collision chance.              tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ -            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 +            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + +            # Because "mkdir -p" follows existing symlinks and we likely work +            # directly in world-writeable /tmp, make sure that the '$tmpdir' +            # directory is successfully created first before we actually test +            # 'mkdir -p' feature.              if (umask $mkdir_umask && -                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 +                $mkdirprog $mkdir_mode "$tmpdir" && +                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1              then                if test -z "$dir_arg" || {                     # Check for POSIX incompatibilities with -m.                     # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or                     # other-writable bit of parent directory when it shouldn't.                     # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. -                   ls_ld_tmpdir=`ls -ld "$tmpdir"` +                   test_tmpdir="$tmpdir/a" +                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`                     case $ls_ld_tmpdir in                       d????-?r-*) different_mode=700;;                       d????-?--*) different_mode=755;;                       *) false;;                     esac && -                   $mkdirprog -m$different_mode -p -- "$tmpdir" && { -                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"` +                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { +                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`                       test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"                     }                   }                then posix_mkdir=:                fi -              rmdir "$tmpdir/d" "$tmpdir" +              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"              else                # Remove any dirs left behind by ancient mkdir implementations. -              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null +              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null              fi              trap '' 0;;          esac;; @@ -427,8 +444,8 @@ do    else      # Make a couple of temp file names in the proper directory. -    dsttmp=$dstdir/_inst.$$_ -    rmtmp=$dstdir/_rm.$$_ +    dsttmp=${dstdirslash}_inst.$$_ +    rmtmp=${dstdirslash}_rm.$$_      # Trap to clean up those temp files at exit.      trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 @@ -493,7 +510,7 @@ do  done  # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp)  # time-stamp-start: "scriptversion="  # time-stamp-format: "%:y-%02m-%02d.%02H"  # time-stamp-time-zone: "UTC0" | 
