oe-git-proxy updates
cover oe-git-proxy updates
From: André Draszik <[email protected]>
Hi,
These two patches update oe-git-proxy to:
1) support username + password authentication when using an (http) proxy (care has been taken to support spaces in either)
2) also check the 'other' standard env variables all_proxy and http_proxy as fallback
Cheers,
André
André Draszik (2):
oe-git-proxy: also check all_proxy and http_proxy env variables
oe-git-proxy: support username / password in http proxy
scripts/oe-git-proxy | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-)
Signature · 1 line
2.8.0.rc3
PATCH 1/2 oe-git-proxy: also check all_proxy and http_proxy env variables
From: André Draszik <[email protected]>
--- scripts/oe-git-proxy | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
scripts/oe-git-proxy +9 -4
@@ -1,10 +1,12 @@ #!/bin/bash # oe-git-proxy is a simple tool to be via GIT_PROXY_COMMAND. It uses socat -# to make SOCKS5 or HTTPS proxy connections. It uses ALL_PROXY to determine the -# proxy server, protocol, and port. It uses NO_PROXY to skip using the proxy for -# a comma delimited list of hosts, host globs (*.example.com), IPs, or CIDR -# masks (192.168.1.0/24). It is known to work with both bash and dash shells. +# to make SOCKS5 or HTTPS proxy connections. +# It uses ALL_PROXY or all_proxy or http_proxy to determine the proxy server, +# protocol, and port. +# It uses NO_PROXY to skip using the proxy for a comma delimited list of +# hosts, host globs (*.example.com), IPs, or CIDR masks (192.168.1.0/24). It +# is known to work with both bash and dash shells. # # Example ALL_PROXY values: # ALL_PROXY=socks://socks.example.com:1080
@@ -99,6 +101,9 @@ match_host() { # If no proxy is set or needed, just connect directly METHOD="TCP:$1:$2" +[ -z "${ALL_PROXY}" ] && ALL_PROXY=$all_proxy +[ -z "${ALL_PROXY}" ] && ALL_PROXY=$http_proxy + if [ -z "$ALL_PROXY" ]; then exec $SOCAT STDIO $METHOD fi
Signature · 1 line
2.8.0.rc3
PATCH 2/2 oe-git-proxy: support username / password in http proxy
In reply to André DraszikFrom: André Draszik <[email protected]>
We also make sure to correctly support usernames that contain spaces.
For simplicity sed + regex has been replaced with shell parameter expansion, which works in both, bash and dash.
--- scripts/oe-git-proxy | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-)
scripts/oe-git-proxy +21 -8
@@ -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"
Signature · 1 line
2.8.0.rc3