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