diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2017-05-22 21:56:04 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2017-05-22 21:56:04 +0000 |
| commit | 82d0f92ab8b84466ae20ab919c1f9c3577b5cecb (patch) | |
| tree | 776015ae6c6a386125b2d39e13b62f91b99548f8 /bin | |
| download | lh-bootstrap-82d0f92ab8b84466ae20ab919c1f9c3577b5cecb.tar.gz | |
Initial commit
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/cpa | 17 | ||||
| -rwxr-xr-x | bin/makelinks | 49 | ||||
| -rwxr-xr-x | bin/makenamelink | 12 | ||||
| -rwxr-xr-x | bin/setuidgid | 7 |
4 files changed, 85 insertions, 0 deletions
@@ -0,0 +1,17 @@ +#!/bin/sh -e + +test "$#" -ge 3 || { echo "cpa: fatal: too few arguments" 1>&2 ; exit 100 ; } + +output="$1" +source=$($output/build-build/command/s6-linkname -f -- $2) +dest="$3" + + +srcname=$(basename "$source") +destdir="$output"/$(dirname "$dest") +destname=$(basename "$dest") + +{ cd $(dirname "$source") && tar c "$srcname" ; } | { cd "$destdir" && tar x ; } +if test "$srcname" != "$destname" ; then + mv -f "$destdir/$srcname" "$destdir/$destname" +fi diff --git a/bin/makelinks b/bin/makelinks new file mode 100755 index 0000000..6247453 --- /dev/null +++ b/bin/makelinks @@ -0,0 +1,49 @@ +#!/bin/sh -e +# +# +# "makelinks base linkdir realdir" does a "relative ln", relatively to "base". "linkdir" and "realdir" are relative path to subdirectories under "base". Symlinks are created into linkdir for files in realdir. The symlinks do not contain "base". +# +# + +test "$#" -ge 3 || { echo "makelinks: too few arguments" 1>&2 ; exit 100 ; } + +computerelative() { + source="$1" + target="$2" + + common="$source" + result="" + + while test "${target#$common}" = "$target" ; do + common="$(dirname $common)" + if test -z "$result" ; then + result=".." + else + result="../$result" + fi + done + + if test "$common" = "/" ; then + result="$result/" + fi + + forward="${target#$common}" + + if test -n "$result" -a -n "$forward" ; then + result="$result$forward" + elif test -n "$forward" ; then + result="${forward:1}" + fi + + echo "$result" +} + +base=${1%%/} +linkdir=${2%%/} +realdir=${3%%/} + +targetdir=$(computerelative "$base$linkdir" "$base$realdir") + +for i in $(ls -1 "$base$realdir") ; do + ln -sf "$targetdir/$i" "$base$linkdir/$i" || true +done diff --git a/bin/makenamelink b/bin/makenamelink new file mode 100755 index 0000000..3669693 --- /dev/null +++ b/bin/makenamelink @@ -0,0 +1,12 @@ +#!/bin/sh -e + +test "$#" -ge 4 || { echo "makenamelink: too few arguments" 1>&2 ; exit 100 ; } + +base=${1%%/} +link="$2" +real="$3" +tmp="$4" + +rm -f "$tmp/$link" +ln -s "$real" "$tmp/$link" +mv -f "$tmp/$link" "$base"/ diff --git a/bin/setuidgid b/bin/setuidgid new file mode 100755 index 0000000..be4e0a9 --- /dev/null +++ b/bin/setuidgid @@ -0,0 +1,7 @@ +#!/bin/sh -e + +test "$#" -ge 2 || { echo "setuidgid: too few arguments" 1>&2 ; exit 100 ; } + +wd=$(pwd) + +exec su -s /bin/sh -p -c "PATH=$PATH ; export PATH ; cd $wd ; exec \"\$0\" \"\$@\"" -- "$@" |
