aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/wsl
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-07-18 14:24:05 -0500
committerToby Vincent <tobyv13@gmail.com>2022-07-18 14:24:05 -0500
commitf4c91354e715744aa8c1f353283fd8c71232c0e7 (patch)
tree603eef19195b6aec3bb3b3b7c0d421d3db4b7d3b /wsl
parent05b63982b67d634465bb0f533889fd152d3e5f0a (diff)
feat(wsl): improve socket-relay script
Diffstat (limited to 'wsl')
-rwxr-xr-xwsl/.local/bin/socket-relay.sh338
1 files changed, 179 insertions, 159 deletions
diff --git a/wsl/.local/bin/socket-relay.sh b/wsl/.local/bin/socket-relay.sh
index 436fa54..a2391a5 100755
--- a/wsl/.local/bin/socket-relay.sh
+++ b/wsl/.local/bin/socket-relay.sh
@@ -1,217 +1,237 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
set -euo pipefail
-OPTS=$(getopt -o hds:x: --long help,debug,sock:,exec:,ssh,gpg,gpg-extra,discord -n 'javawrap' -- "$@")
+OPTS=$(getopt -o hvs:a:x: --long help,verbose,sock:,args:,exec:,ssh,gpg,gpg-extra,discord -n 'javawrap' -- "$@")
eval set -- "$OPTS"
+SSH_AUTH_SOCK="${SSH_AUTH_SOCK:-$HOME/.ssh/agent.sock}"
+GPG_AGENT_SOCK="${GPG_AGENT_SOCK:-$HOME/.gnupg/S.gpg-agent}"
+DISCORD_IPC_SOCK="${DISCORD_IPC_SOCK:-/var/run/discord-ipc-0}"
PAGEANT="$HOME/.ssh/wsl2-ssh-pageant.exe"
NPIPE="$(command -v npiperelay.exe)"
SCRIPT="$(basename "$0")"
help() {
- cat <<-EOF
-$SCRIPT
-Toby Vincent <tobyv13@gmail.com>
-
-$SCRIPT description
-
-USAGE:
- $SCRIPT [OPTIONS] <COMMAND>
- $SCRIPT [OPTIONS]
-
-OPTIONS:
- -h, --help Display this message
- -s, --sock <SOCKET> Path to the linux socket
- -x, --exec <CMD> Command to run for socat's EXEC: arg
- --ssh Relay the ssh agent's socket
- --gpg Relay the gpg agent's socket
- --gpg-extra Relay the gpg agent's extra socket
-
-ARGS:
- start (default)
- Start the socat process
-
- stop
- Kill the socat process
-EOF
+ cat <<-EOF
+ $SCRIPT
+ Toby Vincent <tobyv13@gmail.com>
+
+ $SCRIPT description
+
+ USAGE:
+ $SCRIPT [OPTIONS] <COMMAND>
+ $SCRIPT [OPTIONS]
+
+ OPTIONS:
+ -h, --help Display this message
+ -s, --sock <SOCKET> Path to the linux socket
+ -x, --exec <CMD> Command to run for socat's EXEC: arg
+ --ssh Relay the ssh agent's socket
+ --gpg Relay the gpg agent's socket
+ --gpg-extra Relay the gpg agent's extra socket
+
+ ARGS:
+ start (default)
+ Start the socat process
+
+ stop
+ Kill the socat process
+ EOF
}
say() {
- if ! $quiet; then
- echo "$SCRIPT: $1"
- fi
+ if ! $quiet; then
+ echo "$SCRIPT: $1"
+ fi
+}
+
+say_verbose() {
+ if $verbose; then
+ say "$@"
+ fi
}
say_err() {
- say "$1" >&2
+ say "$1" >&2
}
err() {
- say_err "ERROR: $1"
- exit 1
+ # shellcheck disable=2145
+ say_err "ERROR: $@"
+ exit 1
}
need() {
- for cmd in $@; do
- if ! command -v $cmd >/dev/null 2>&1; then
- err "need $cmd (command not found)"
- fi
- done
+ for cmd in "$@"; do
+ if ! command -v $cmd >/dev/null 2>&1; then
+ err "need $cmd (command not found)"
+ fi
+ done
}
start() {
- if ! ss -a | grep -q "$sock"; then
- if test -x "$relay"; then
- rm -rf "$sock"
- (setsid nohup socat UNIX-LISTEN:"${sock},${listen_args}" EXEC:"$cmd" >/dev/null 2>&1 &)
-
- else
- echo >&2 "WARNING: $relay is not executable."
- fi
- fi
-
- if $gpg; then
- gpg-connect-agent.exe /bye &>/dev/null
- fi
+ say_verbose "SOCKET: $sock"
+ say_verbose "ARGS: $args"
+ say_verbose "EXEC: $cmd"
+
+ if $gpg; then
+ say_verbose "gpg-connect-agent KILLAGENT"
+ gpg-connect-agent.exe KILLAGENT /bye >"$v_stdout" 2>"$v_stderr"
+ fi
+
+ if ! ss -a | grep -q "$sock"; then
+ rm -rf "$sock"
+ (setsid nohup socat UNIX-LISTEN:"${sock},${args}" EXEC:"$cmd" >/dev/null 2>&1 &)
+ fi
+
+ if $gpg; then
+ gpg-connect-agent.exe /bye >"$v_stdout" 2>"$v_stderr"
+ fi
}
stop() {
- if $gpg; then
- gpg-connect-agent.exe KILLAGENT /bye &>/dev/null
- fi
+ if $gpg; then
+ gpg-connect-agent.exe KILLAGENT /bye >"$v_stdout" 2>"$v_stderr"
+ fi
- if pgrep -f "socat.*$sock.*$relay" &>/dev/null; then
- pkill -f "socat.*$sock.*$relay"
- fi
+ pkill -fe "socat.*$sock.*$relay" >"$v_stdout"
}
check() {
- pgrep -fa "socat.*$sock.*$relay"
+ pgrep -fa "socat.*$sock.*$relay"
}
quiet=false
-debug=false
+verbose=false
sock=""
cmd=""
gpg=false
ssh=false
extra=false
discord=false
+v_stdout=/dev/null
+v_stderr=/dev/null
while test $# -gt 0; do
- case $1 in
- -h | --help)
- help
- return 0
- ;;
- -q | --quiet)
- quiet=true
- shift
- ;;
- -d | --debug)
- debug=true
- shift
- ;;
- -s | --sock)
- sock=$2
- shift
- shift
- ;;
- -x | --exec)
- cmd=$2
- shift
- shift
- ;;
- --ssh)
- ssh=true
- shift
- ;;
- --gpg)
- gpg=true
- shift
- ;;
- --gpg-extra)
- gpg=true
- extra=true
- shift
- ;;
- --discord)
- discord=true
- shift
- ;;
- --)
- shift
- break
- ;;
- *)
- help
- exit 1
- ;;
- esac
+ case $1 in
+ -h | --help)
+ help
+ return 0
+ ;;
+ -q | --quiet)
+ quiet=true
+ shift
+ ;;
+ -v | --verbose)
+ verbose=true
+ v_stdout=/dev/stdout
+ v_stderr=/dev/stderr
+ shift
+ ;;
+ -s | --sock)
+ sock=$2
+ shift
+ shift
+ ;;
+ -l | --args)
+ args=$2
+ shift
+ shift
+ ;;
+ -x | --exec)
+ cmd=$2
+ shift
+ shift
+ ;;
+ --ssh)
+ ssh=true
+ shift
+ ;;
+ --gpg)
+ gpg=true
+ shift
+ ;;
+ --gpg-extra)
+ gpg=true
+ extra=true
+ shift
+ ;;
+ --discord)
+ discord=true
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ help
+ exit 1
+ ;;
+ esac
done
need ss
need socat
-listen_args="fork"
-
-case true in
-$ssh)
- need $PAGEANT
-
- sock="${SSH_AUTH_SOCK:-$HOME/.ssh/agent.sock}"
- cmd="$PAGEANT"
- ;;
-$gpg)
- need $PAGEANT
- need "gpg-connect-agent.exe"
-
- sock="${GPG_AGENT_SOCK:-$HOME/.gnupg/S.gpg-agent}"
- if $extra; then
- sock+=".extra"
- fi
-
- cmd="$PAGEANT --gpg $(basename $sock)"
- ;;
-$discord)
- need $NPIPE
-
- sock="${DISCORD_IPC_SOCK:-/var/run/discord-ipc-0}"
- cmd="$NPIPE -ep -s //./pipe/$(basename $sock)"
-
- listen_args="fork,group=discord,umask=007"
- ;;
-$(test -z "${cmd}"))
- err "No EXEC provided. Must supply either --ssh, --gpg, --gpg-extra, --pipe, or --exec"
- ;;
-esac
+if $ssh; then
+ need "$PAGEANT"
+
+ sock="${sock:-$SSH_AUTH_SOCK}"
+ args="${args:-fork}"
+ cmd="${cmd:-$PAGEANT}"
+elif $gpg; then
+ need "$PAGEANT"
+ need "gpg-connect-agent.exe"
+
+ sock="${sock:-$GPG_AGENT_SOCK}"
+ args="${args:-fork}"
+ cmd="${cmd:-$PAGEANT --gpg $(basename "$sock")}"
+ if $extra; then
+ sock=sock+".extra"
+ fi
+elif $discord; then
+ need "$NPIPE"
+
+ sock="${DISCORD_IPC_SOCK:-/var/run/discord-ipc-0}"
+ cmd="$NPIPE -ep -s //./pipe/$(basename "$sock")"
+ args="fork,group=discord,umask=007"
+fi
-if test -z "${sock}"; then
- err "No socket provided."
+relay="$(echo "$cmd" | head -n1 | awk '{print $1;}')"
+
+if [ -z "$cmd" ]; then
+ err "No EXEC provided. Must supply either one of the preset options, or provide an explicit value with --exec"
+fi
+
+if [ -z "$sock" ]; then
+ err "No socket provided."
fi
-relay="$(echo $cmd | head -n1 | awk '{print $1;}')"
+if ! [ -x "$relay" ]; then
+ err "WARNING: $relay is not executable."
+fi
case ${1:-'start'} in
check)
- shift
- check
- ;;
+ shift
+ check
+ ;;
start)
- shift
- start
- ;;
+ shift
+ start
+ ;;
stop)
- shift
- stop
- ;;
+ shift
+ stop
+ ;;
restart)
- shift
- stop
- start
- ;;
+ shift
+ stop
+ start
+ ;;
*)
- help
- exit 1
- ;;
+ help
+ exit 1
+ ;;
esac