Commit | Line | Data |
---|---|---|
9b497049 WD |
1 | #!/bin/sh |
2 | # This script can be used as a "remote shell" command that is only | |
3 | # capable of pretending to connect to "localhost". This is useful | |
4 | # for testing or for running a local copy where the sender and the | |
5 | # receiver needs to use different options (e.g. --fake-super). If | |
6 | # we get a -l USER option, we try to use "sudo -u USER" to run the | |
7 | # command. | |
8 | ||
276cc455 | 9 | user='' |
9b497049 | 10 | prefix='' |
276cc455 | 11 | do_cd=y # Default path is user's home dir, just like ssh. |
9b497049 WD |
12 | |
13 | while : ; do | |
14 | case "$1" in | |
276cc455 WD |
15 | -l) user="$2"; shift; shift ;; |
16 | -l*) user=`echo $1 | sed 's/^-l//'`; shift ;; | |
17 | --no-cd) do_cd=n; shift ;; | |
9b497049 WD |
18 | -*) shift ;; |
19 | localhost) shift; break ;; | |
276cc455 | 20 | *) echo "lsh: unable to connect to host $1" 1>&2; exit 1 ;; |
9b497049 WD |
21 | esac |
22 | done | |
23 | ||
276cc455 WD |
24 | if [ "$user" ]; then |
25 | prefix="sudo -H -u $user" | |
26 | if [ $do_cd = y ]; then | |
27 | home=`perl -e "print((getpwnam("$user"))[7])"` | |
28 | # Yeah, this may fail, but attempts to get sudo to cd are harder. | |
29 | cd $home | |
30 | fi | |
31 | elif [ $do_cd = y ]; then | |
32 | cd | |
33 | fi | |
34 | ||
9b497049 | 35 | eval $prefix "${@}" |