diff options
author | Wayne Davison <wayned@samba.org> | 2013-06-09 19:39:44 -0700 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2013-06-09 19:40:56 -0700 |
commit | f93094fa9ff5923eff1c335083281233f19c0f67 (patch) | |
tree | 4ce00d24a560806c91240cdfd7879f5dee5798a4 /support/lsh.sh | |
parent | baf382d62ebf4cb31ba8bc463b5f828555702f77 (diff) | |
download | rsync-f93094fa9ff5923eff1c335083281233f19c0f67.tar.gz |
Rename lsh -> lsh.sh.
Diffstat (limited to 'support/lsh.sh')
-rwxr-xr-x | support/lsh.sh | 35 |
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 |