From: Darren Hart <dvhart@linux.intel.com>
To: Otavio Salvador <otavio@ossystems.com.br>
Cc: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>,
Poky <poky@yoctoproject.org>,
Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 4/7] oe-git-proxy: Add a new comprehensive git proxy script
Date: Sat, 09 Feb 2013 08:59:48 -0800 [thread overview]
Message-ID: <51168084.3080902@linux.intel.com> (raw)
In-Reply-To: <CAP9ODKpCZrabQt1s1=GHHhXm9s-GSMDgjq3965w8XQFka8-8ug@mail.gmail.com>
On 02/08/2013 06:43 PM, Otavio Salvador wrote:
> On Fri, Feb 8, 2013 at 8:27 PM, Darren Hart <dvhart@linux.intel.com> 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
>>
>> V3: Implement recommendations by Otavio Salvador
>> o GPL license blurb
>> o Fix minor typo in comment block
>>
>> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
>> Cc: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
>> Cc: Otavio Salvador <otavio@ossystems.com.br>
>>
>> git-proxy cleanup
>
> All those comments ought to be bellow --- or those will be included in
> commit log.
>
Which is fine.
>> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
>> ---
>> scripts/oe-git-proxy | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 138 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..4c2f179
>> --- /dev/null
>> +++ b/scripts/oe-git-proxy
>> @@ -0,0 +1,138 @@
>> +#!/bin/bash
>> +
>> +# oe-git-proxy is a simple tool to be 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.
>> +#
>> +# 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.
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 2 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write to the Free Software
>> +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>> +#
>> +# AUTHORS
>> +# Darren Hart <dvhart@linux.intel.com>
>> +
>> +# 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
>>
>
>
>
--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Technical Lead - Linux Kernel
next prev parent reply other threads:[~2013-02-09 17:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-08 22:27 [PATCH V3 0/7] Git proxy handling updates (now with socat) Darren Hart
2013-02-08 22:27 ` [PATCH 1/7] oe-buildenv-internal: Remove GIT variables from BB_ENV_EXTRAWHITE Darren Hart
2013-02-08 22:27 ` [PATCH 2/7] oe-buildenv-internal: Add upper and lower case proxy vars to BB_ENV_EXTRAWHITE Darren Hart
2013-02-08 22:27 ` [PATCH 3/7] base.bbclass: Remove generate_git_config() Darren Hart
2013-02-08 22:27 ` [PATCH 4/7] oe-git-proxy: Add a new comprehensive git proxy script Darren Hart
2013-02-09 2:43 ` Otavio Salvador
2013-02-09 16:59 ` Darren Hart [this message]
2013-02-09 17:02 ` Otavio Salvador
2013-02-10 2:48 ` Bruce Ashfield
2013-02-10 18:25 ` Darren Hart
2013-02-08 22:27 ` [PATCH 5/7] meta-yocto: Document new oe-git-proxy in site.conf.sample Darren Hart
2013-02-08 22:27 ` [PATCH 6/7] oe-git-proxy*: Remove previous git proxy solutions Darren Hart
2013-02-08 22:27 ` [PATCH 7/7] oe-git-proxy: Use socat instead of BSD nc Darren Hart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51168084.3080902@linux.intel.com \
--to=dvhart@linux.intel.com \
--cc=enrico.scholz@sigma-chemnitz.de \
--cc=openembedded-core@lists.openembedded.org \
--cc=otavio@ossystems.com.br \
--cc=poky@yoctoproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox