Home | History | Annotate | Download | only in bugpoint
      1 #!/bin/sh
      2 #
      3 # Program:  RemoteRunSafely.sh
      4 #
      5 # Synopsis: This script simply runs another program remotely using ssh.
      6 #           It always returns the another program exit code or exit with
      7 #           code 255 which indicates that the program could not be executed.
      8 #
      9 # Syntax: 
     10 #
     11 #   RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>]
     12 #                <program> <args...>
     13 #
     14 #   where:
     15 #     <hostname>    is the remote host to execute the program,
     16 #     <login_name>  is the username on the remote host,
     17 #     <port>        is the port used by the remote client,
     18 #     <program>     is the path to the program to run,
     19 #     <args...>     are the arguments to pass to the program.
     20 #
     21 
     22 printUsageAndExit()
     23 {
     24   echo "Usage:"
     25   echo "./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] " \
     26        "<program> <args...>"
     27   exit 255
     28 }
     29 
     30 moreArgsExpected()
     31 {
     32   # $1 - remaining number of arguments
     33   # $2 - number of arguments to shift
     34   if [ $1 -lt $2 ]
     35   then
     36     echo "Error: Wrong number of argumants."
     37     printUsageAndExit
     38   fi
     39 }
     40 
     41 # Save a copy of the original arguments in a string before we
     42 # clobber them with the shift command.
     43 ORIG_ARGS="$*"
     44 #DEBUG: echo 'GOT: '$ORIG_ARGS
     45 
     46 moreArgsExpected $# 1
     47 RHOST=$1
     48 shift 1
     49 
     50 RUSER=`id -un`
     51 RCLIENT=ssh
     52 RPORT=
     53 WORKING_DIR=
     54 
     55 moreArgsExpected $# 1
     56 if [ $1 = "-l" ]; then
     57   moreArgsExpected $# 2
     58   RUSER=$2
     59   shift 2
     60 fi
     61 moreArgsExpected $# 1
     62 if [ $1 = "-p" ]; then
     63   moreArgsExpected $# 2
     64   RPORT="-p $2"
     65   shift 2
     66 fi
     67 
     68 moreArgsExpected $# 1
     69 PROGRAM=$(basename $1)
     70 WORKING_DIR=$(dirname $1)
     71 shift 1
     72 
     73 #DEBUG: echo 'DIR='${0%%`basename $0`}
     74 #DEBUG: echo 'RHOST='$RHOST
     75 #DEBUG: echo 'RUSER='$RUSER
     76 #DEBUG: echo 'PROGRAM='$PROGRAM
     77 #DEBUG: echo 'WORKING_DIR='$WORKING_DIR
     78 #DEBUG: echo 'ARGS='$*
     79 
     80 # Sanity check
     81 if [ "$RHOST" = "" -o "$PROGRAM" = "" ]; then
     82   printUsageAndExit
     83 fi
     84 
     85 # Local program file must exist and be execuatble
     86 local_program=$WORKING_DIR"/"$PROGRAM
     87 if [ ! -x "$local_program" ]; then
     88   echo "File "$local_program" does not exist or is not an executable.."
     89   exit 255
     90 fi
     91 
     92 connection=$RUSER'@'$RHOST
     93 remote="./"$PROGRAM
     94 (
     95   cat $local_program |        \
     96   $RCLIENT $connection $RPORT \
     97    'rm -f '$remote' ; '       \
     98    'cat > '$remote' ; chmod +x '$remote' ; '$remote' '$*' ; ' \
     99    'err=$? ; rm -f '$remote' ; exit $err'
    100 )
    101 err=$?
    102 
    103 #DEBUG: echo script exit $err
    104 exit $err
    105 
    106