aboutsummaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-05-22 21:56:04 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-05-22 21:56:04 +0000
commit82d0f92ab8b84466ae20ab919c1f9c3577b5cecb (patch)
tree776015ae6c6a386125b2d39e13b62f91b99548f8 /bin
downloadlh-bootstrap-82d0f92ab8b84466ae20ab919c1f9c3577b5cecb.tar.gz
Initial commit
Diffstat (limited to 'bin')
-rwxr-xr-xbin/cpa17
-rwxr-xr-xbin/makelinks49
-rwxr-xr-xbin/makenamelink12
-rwxr-xr-xbin/setuidgid7
4 files changed, 85 insertions, 0 deletions
diff --git a/bin/cpa b/bin/cpa
new file mode 100755
index 0000000..2100191
--- /dev/null
+++ b/bin/cpa
@@ -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\" \"\$@\"" -- "$@"