From: Joel Becker <Joel.Becker@oracle.com>
To: Junio C Hamano <junkio@cox.net>
Cc: lamikr <lamikr@cc.jyu.fi>, git@vger.kernel.org
Subject: Re: undoing changes with git-checkout -f
Date: Mon, 9 Jan 2006 23:18:36 -0800 [thread overview]
Message-ID: <20060110071836.GR18439@ca-server1.us.oracle.com> (raw)
In-Reply-To: <20060110063247.GP18439@ca-server1.us.oracle.com>
[-- Attachment #1: Type: text/plain, Size: 533 bytes --]
On Mon, Jan 09, 2006 at 10:32:47PM -0800, Joel Becker wrote:
> Here's what I did. I modified the usual
> ssh-tunnel-over-SSL-CONNECT script to honor http_proxy. I've attached
> it. With this, I do as so:
Bug in the script closing one side of the connection. Corrected
version attached.
Joel
--
"I'm drifting and drifting
Just like a ship out on the sea.
Cause I ain't got nobody, baby,
In this world to care for me."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127
[-- Attachment #2: git-tunnel.pl --]
[-- Type: text/x-perl, Size: 2715 bytes --]
#!/usr/bin/perl
#
# git-tunnel.pl
#
# Usage: git-tunnel.pl ssl-proxy port destination_host port
#
# This script can be used by git as a "core.gitproxy" to
# traverse a www-proxy/firewall that supports the http CONNECT
# command described in
# http://home.netscape.com/newsref/std/tunneling_ssl.html
#
# It uses the http_proxy (or HTTP_PROXY) variable to determine the
# proxy to connect to. Put the path to this script in the environment
# variable GIT_PROXY_COMMAND, or better yet, insert the core.gitproxy
# definition in .git/config.
#
# .
# .
# [core]
# gitproxy = /path/to/git-tunnel.pl
# .
# .
#
# Written by Urban Kaveus <urban@statt.ericsson.se>
# Modified to use http_proxy by Joel Becker <joel.becker@oracle.com>
use Socket;
# Parse command line arguments
if ( $#ARGV != 1 ) {
print STDERR "Usage: $0 destination port\n";
print STDERR $#ARGV, "\n";
exit(1);
}
$proxy_url = $ENV{'http_proxy'};
if (!$proxy_url) {
$proxy_url = $ENV{'HTTP_PROXY'};
}
$proxyport = 80;
if ($proxy_url =~ /^https?:\/\/([^:]+)\/$/) {
$sslproxy = $1;
} elsif ($proxy_url =~ /^https?:\/\/([^:]+):([1-9][0-9]*)\/$/) {
$sslproxy = $1;
$proxyport = $2;
} else {
print STDERR "Invalid proxy specification: \"$proxy_url\"\n";
exit(1);
}
$destination = shift;
$destport = shift;
# Set up network communication
($protocol) = (getprotobyname("tcp"))[2];
($proxyip) = (gethostbyname($sslproxy))[4];
$localaddr = pack('S n a4 x8', &AF_INET, 0, "\0\0\0\0");
$proxyaddr = pack('S n a4 x8', &AF_INET, $proxyport, $proxyip);
socket (PROXY, &AF_INET, &SOCK_STREAM, $protocol) or
die("Failed to create cocket");
bind (PROXY, $localaddr) or
die("Failed to bind socket");
connect (PROXY, $proxyaddr) or
die("Failed to connect to $sslproxy port $proxyport");
# Force flushing of socket buffers
select (PROXY); $| = 1;
select (STDOUT); $| = 1;
# Send a "CONNECT" command to proxy:
print PROXY "CONNECT $destination:$destport HTTP/1.1\r\n\r\n";
# Wait for HTTP status code, bail out if you don't get back a 2xx code.
$_ = <PROXY>;
($status) = (split())[1];
die("Received a bad status code \"$status\" from proxy server")
if ( int($status/100) != 2 );
# Skip through remaining part of MIME header
while(<PROXY>) {
chomp; # Strip <LF>
last if /^[\r]*$/; # Empty line or a single <CR> left
}
# Start copying packets in both directions.
$parent = $$;
if($child = fork) { # Parent process
while (sysread(STDIN,$_,4096)) {
print PROXY;
}
sleep 2;
kill(15,$child) if $child;
}
else { # Child process
while (sysread(PROXY,$_,4096)) {
print STDOUT;
}
sleep 2;
kill(15,$parent);
}
next prev parent reply other threads:[~2006-01-10 7:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-09 21:16 undoing changes with git-checkout -f lamikr
2006-01-09 21:46 ` Junio C Hamano
2006-01-09 22:52 ` lamikr
2006-01-10 4:55 ` Joel Becker
2006-01-10 5:57 ` Junio C Hamano
2006-01-10 6:32 ` Joel Becker
2006-01-10 7:18 ` Joel Becker [this message]
2006-01-10 7:42 ` Junio C Hamano
2006-01-10 8:16 ` Joel Becker
2006-01-10 14:51 ` Johannes Schindelin
2006-01-10 16:17 ` Alex Riesen
2006-01-10 16:45 ` Johannes Schindelin
2006-01-10 17:32 ` Alex Riesen
[not found] ` <Pine.LNX.4.64.0601091321390.5588@g5.osdl.org>
2006-01-09 22:36 ` lamikr
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=20060110071836.GR18439@ca-server1.us.oracle.com \
--to=joel.becker@oracle.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=lamikr@cc.jyu.fi \
/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;
as well as URLs for NNTP newsgroup(s).