65 lines
1.7 KiB
Bash
65 lines
1.7 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
ROLE=proxy
|
||
|
MODE=host
|
||
|
|
||
|
#[ $# -eq 0 ] && set -- Whonix-Gateway /bin/cat /proc/cmdline
|
||
|
[ $# -eq 0 ] && set -- Whonix-Gateway /bin/netstat -lnp4
|
||
|
[ $# -lt 2 ] && echo USAGE: $0 domain command arguments
|
||
|
|
||
|
HOST=$1
|
||
|
shift
|
||
|
CMD=$1
|
||
|
shift
|
||
|
# FixMe
|
||
|
if [ $? -gt 1 ] ; then
|
||
|
ARGS=""
|
||
|
elif [ $? -gt 1 ] ; then
|
||
|
ARGS=`sed -e 's/ /","/g' <<< $@`
|
||
|
else
|
||
|
ARGS="$1"
|
||
|
fi
|
||
|
|
||
|
[ "$HOST" = WWork106 ] && HOST=Whonix-Workstation || true
|
||
|
[ "$HOST" = WGate106 ] && HOST=Whonix-Gateway || true
|
||
|
|
||
|
echo INFO: $0 $HOST $CMD $ARGS
|
||
|
|
||
|
false && echo DEBUG: virsh qemu-agent-command $HOST \
|
||
|
'{"execute":"guest-exec", "arguments": {"capture-output": true,"path":"'$CMD'","arg":["'$ARGS'"]}}'
|
||
|
virsh qemu-agent-command $HOST \
|
||
|
'{"execute":"guest-exec", "arguments": {"capture-output": true,"path":"'$CMD'","arg":["'$ARGS'"]}}' \
|
||
|
>/tmp/Q$$.out || exit 1$?
|
||
|
|
||
|
grep -q return /tmp/Q$$.out || exit 2
|
||
|
pid=`sed -e 's/.*://' -e 's/}.*//' /tmp/Q$$.out`
|
||
|
[ $? -eq 0 ] || exit 3
|
||
|
|
||
|
# echo DEBUG: virsh qemu-agent-command $HOST \
|
||
|
# '{"execute":"guest-exec-status", "arguments": {"pid": '$pid'}}'
|
||
|
virsh qemu-agent-command $HOST \
|
||
|
'{"execute":"guest-exec-status", "arguments": {"pid": '$pid'}}' \
|
||
|
>/tmp/R$$.out || exit 4$?
|
||
|
|
||
|
TRIES=10
|
||
|
i=0
|
||
|
while [ $i -lt $TRIES ] ; do
|
||
|
i=`expr $i + 1`
|
||
|
virsh qemu-agent-command $HOST \
|
||
|
'{"execute":"guest-exec-status", "arguments": {"pid": '$pid'}}' \
|
||
|
>/tmp/R$$.out || exit 4$i$?
|
||
|
grep -q '"exitcode":0' /tmp/R$$.out && break
|
||
|
sleep 5
|
||
|
echo DEBUG: $i
|
||
|
done
|
||
|
[ $i -lt $TRIES ] || \
|
||
|
{ echo ERROR: $i no exitcode in /tmp/R$$.out; exit 5 ; }
|
||
|
|
||
|
b64=`sed -e 's/{"return":{"exitcode":0,"out-data":"//' -e 's/",".*//' /tmp/R$$.out`
|
||
|
[ $? -eq 0 ] || exit 6
|
||
|
[ -n "$b64" ] || exit 7
|
||
|
|
||
|
echo $b64 | base64 -d -
|
||
|
rm -f /tmp/{Q,R}$$.out
|
||
|
exit 0
|