summaryrefslogtreecommitdiff
path: root/support/lsh.sh
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2013-06-09 19:39:44 -0700
committerWayne Davison <wayned@samba.org>2013-06-09 19:40:56 -0700
commitf93094fa9ff5923eff1c335083281233f19c0f67 (patch)
tree4ce00d24a560806c91240cdfd7879f5dee5798a4 /support/lsh.sh
parentbaf382d62ebf4cb31ba8bc463b5f828555702f77 (diff)
downloadrsync-f93094fa9ff5923eff1c335083281233f19c0f67.tar.gz
Rename lsh -> lsh.sh.
Diffstat (limited to 'support/lsh.sh')
-rwxr-xr-xsupport/lsh.sh35
1 files changed, 35 insertions, 0 deletions
diff --git a/support/lsh.sh b/support/lsh.sh
new file mode 100755
index 00000000..b63444e3
--- /dev/null
+++ b/support/lsh.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+# This script can be used as a "remote shell" command that is only
+# capable of pretending to connect to "localhost". This is useful
+# for testing or for running a local copy where the sender and the
+# receiver needs to use different options (e.g. --fake-super). If
+# we get a -l USER option, we try to use "sudo -u USER" to run the
+# command.
+
+user=''
+do_cd=y # Default path is user's home dir, just like ssh.
+
+while : ; do
+ case "$1" in
+ -l) user="$2"; shift; shift ;;
+ -l*) user=`echo "$1" | sed 's/^-l//'`; shift ;;
+ --no-cd) do_cd=n; shift ;;
+ -*) shift ;;
+ localhost) shift; break ;;
+ *) echo "lsh: unable to connect to host $1" 1>&2; exit 1 ;;
+ esac
+done
+
+if [ "$user" ]; then
+ prefix=''
+ if [ $do_cd = y ]; then
+ home=`perl -e "print((getpwnam('$user'))[7])"`
+ prefix="cd '$home' &&"
+ fi
+ sudo -H -u "$user" sh -c "$prefix $*"
+else
+ if [ $do_cd = y ]; then
+ cd || exit 1
+ fi
+ eval "${@}"
+fi