On Tue, Feb 5, 2013 at 8:52 PM, Darren Hart <[email protected]> wrote: > oe-git-proxy.sh is a simple tool to be used via GIT_PROXY_COMMAND. It > uses BSD netcat 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. > > V2: Implement recommendations by Enrico Scholz: > o Use exec for the nc calls > o Use "$@" instead of $* to avoid quoting issues inherent with $* > o Use bash explicitly and simplify some of the string manipulations > Also: > o Drop the .sh in the name per Otavio Salvador > o Remove a stray debug statement > > Signed-off-by: Darren Hart <[email protected]> > Cc: Enrico Scholz <[email protected]> > Cc: Otavio Salvador <[email protected]> > --- > scripts/oe-git-proxy | 124 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 124 insertions(+), 0 deletions(-) > create mode 100755 scripts/oe-git-proxy > > diff --git a/scripts/oe-git-proxy b/scripts/oe-git-proxy > new file mode 100755 > index 0000000..4f1871a > --- /dev/null > +++ b/scripts/oe-git-proxy > @@ -0,0 +1,124 @@ > +#!/bin/bash > + > +# oe-git-proxy.sh is a simple tool to be via GIT_PROXY_COMMAND. It uses BSD > netcat
Please fix the script name. > +# 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. > +# > +# BSD netcat is provided by netcat-openbsd on Ubuntu and nc on Fedora. > +# > +# Example ALL_PROXY values: > +# ALL_PROXY=socks://socks.example.com:1080 > +# ALL_PROXY=https://proxy.example.com:8080 > +# > +# Copyright (c) 2013, Intel Corporation. > +# All rights reserved. And please add a clear license here. > +# AUTHORS > +# Darren Hart <[email protected]> > + > +# Locate the netcat binary > +NC=$(which nc 2>/dev/null) > +if [ $? -ne 0 ]; then > + echo "ERROR: nc binary not in PATH" > + exit 1 > +fi > +METHOD="" > + > +# Test for a valid IPV4 quad with optional bitmask > +valid_ipv4() { > + echo $1 | egrep -q > "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}(/(3[0-2]|[1-2]?[0-9]))?$" > + return $? > +} > + > +# Convert an IPV4 address into a 32bit integer > +ipv4_val() { > + IP="$1" > + SHIFT=24 > + VAL=0 > + for B in ${IP//./ }; do > + VAL=$(($VAL+$(($B<<$SHIFT)))) > + SHIFT=$(($SHIFT-8)) > + done > + echo "$VAL" > +} > + > +# Determine if two IPs are equivalent, or if the CIDR contains the IP > +match_ipv4() { > + CIDR=$1 > + IP=$2 > + > + if [ -z "${IP%%$CIDR}" ]; then > + return 0 > + fi > + > + # Determine the mask bitlength > + BITS=${CIDR##*/} > + if [ -z "$BITS" ]; then > + return 1 > + fi > + > + IPVAL=$(ipv4_val $IP) > + IP2VAL=$(ipv4_val ${CIDR%%/*}) > + > + # OR in the unmasked bits > + for i in $(seq 0 $((32-$BITS))); do > + IP2VAL=$(($IP2VAL|$((1<<$i)))) > + IPVAL=$(($IPVAL|$((1<<$i)))) > + done > + > + if [ $IPVAL -eq $IP2VAL ]; then > + return 0 > + fi > + return 1 > +} > + > +# Test to see if GLOB matches HOST > +match_host() { > + HOST=$1 > + GLOB=$2 > + > + if [ -z "${HOST%%$GLOB}" ]; then > + return 0 > + fi > + > + # Match by netmask > + if valid_ipv4 $GLOB; then > + HOST_IP=$(gethostip -d $HOST) > + if valid_ipv4 $HOST_IP; then > + match_ipv4 $GLOB $HOST_IP > + if [ $? -eq 0 ]; then > + return 0 > + fi > + fi > + fi > + > + return 1 > +} > + > +# If no proxy is set, just connect directly > +if [ -z "$ALL_PROXY" ]; then > + exec $NC -X connect "$@" > +fi > + > +# Connect directly to hosts in NO_PROXY > +for H in ${NO_PROXY//,/ }; do > + if match_host $1 $H; then > + METHOD="-X connect" > + break > + fi > +done > + > +if [ -z "$METHOD" ]; then > + # strip the protocol and the trailing slash > + PROTO=$(echo $ALL_PROXY | sed -e 's/\([^:]*\):\/\/.*/\1/') > + PROXY=$(echo $ALL_PROXY | sed -e 's/.*:\/\/\([^:]*:[0-9]*\).*/\1/') > + if [ "$PROTO" = "socks" ]; then > + METHOD="-X 5 -x $PROXY" > + elif [ "$PROTO" = "https" ]; then > + METHOD="-X connect -x $PROXY" > + fi > +fi > + > +exec $NC $METHOD "$@" > -- > 1.7.5.4 > -- Otavio Salvador O.S. Systems E-mail: [email protected] http://www.ossystems.com.br Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br _______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
