|
@@ -116,14 +116,27 @@ for H in ${NO_PROXY//,/ }; do
|
|
|
done
|
|
|
|
|
|
# Proxy is necessary, determine protocol, server, and port
|
|
|
-PROTO=$(echo $ALL_PROXY | sed -e 's/\([^:]*\):\/\/.*/\1/')
|
|
|
-PROXY=$(echo $ALL_PROXY | sed -e 's/.*:\/\/\([^:]*\).*/\1/')
|
|
|
-# For backwards compatibility, this allows the port number to be followed by /?
|
|
|
-# in addition to the customary optional /
|
|
|
-PORT=$(echo $ALL_PROXY | sed -e 's/.*:\([0-9]*\)\(\/?\?\)\?$/\1/')
|
|
|
-if [ "$PORT" = "$ALL_PROXY" ]; then
|
|
|
+# extract protocol
|
|
|
+PROTO=${ALL_PROXY%://*}
|
|
|
+# strip protocol:// from string
|
|
|
+ALL_PROXY=${ALL_PROXY#*://}
|
|
|
+# extract host & port parts:
|
|
|
+# 1) drop username/password
|
|
|
+PROXY=${ALL_PROXY##*@}
|
|
|
+# 2) remove optional trailing /?
|
|
|
+PROXY=${PROXY%%/*}
|
|
|
+# 3) extract optional port
|
|
|
+PORT=${PROXY##*:}
|
|
|
+if [ "$PORT" = "$PROXY" ]; then
|
|
|
PORT=""
|
|
|
fi
|
|
|
+# 4) remove port
|
|
|
+PROXY=${PROXY%%:*}
|
|
|
+
|
|
|
+# extract username & password
|
|
|
+PROXYAUTH="${ALL_PROXY%@*}"
|
|
|
+[ "$PROXYAUTH" = "$ALL_PROXY" ] && PROXYAUTH=
|
|
|
+[ -n "${PROXYAUTH}" ] && PROXYAUTH=",proxyauth=${PROXYAUTH}"
|
|
|
|
|
|
if [ "$PROTO" = "socks" ] || [ "$PROTO" = "socks4a" ]; then
|
|
|
if [ -z "$PORT" ]; then
|
|
@@ -140,7 +153,7 @@ else
|
|
|
if [ -z "$PORT" ]; then
|
|
|
PORT="8080"
|
|
|
fi
|
|
|
- METHOD="PROXY:$PROXY:$1:$2,proxyport=$PORT"
|
|
|
+ METHOD="PROXY:$PROXY:$1:$2,proxyport=${PORT}${PROXYAUTH}"
|
|
|
fi
|
|
|
|
|
|
-exec $SOCAT STDIO $METHOD
|
|
|
+exec $SOCAT STDIO "$METHOD"
|