1234567891011121314151617181920212223 |
- #!/bin/bash
- lock="/var/run/qubes/$QREXEC_REQUESTED_TARGET.terminal.lock"
- # use temporary file, because env variables deal poorly with \0 inside
- tmpfile=$(mktemp)
- trap "rm -f $tmpfile" EXIT
- qubesd-query -e \
- "$QREXEC_REMOTE_DOMAIN" \
- "admin.vm.Console" \
- "$QREXEC_REQUESTED_TARGET" \
- "$1" >$tmpfile
- # exit if qubesd returned an error (not '0\0')
- if [ "$(head -c 2 $tmpfile | xxd -p)" != "3000" ]; then
- cat "$tmpfile"
- exit 1
- fi
- path=$(tail -c +3 "$tmpfile")
- # Create an exclusive lock to ensure that multiple qubes cannot access to the same socket
- # In the case of multiple qrexec calls it returns a specific exit code
- sudo flock -n -E 200 -x "$lock" socat - OPEN:"$path"
|