threads / discuss / 57678

How to get git-send-email use a proxy?

Subject: How to get git-send-email use a proxy?

## tl;dr

5 messages between Apr 6, 2022 and Apr 8, 2022.

replies: 4people: 3as markdown or json

Shaoxuan Yuan· Apr 6, 2022, 14:19 UTC · lore
Greetings, Git community,

I'm using git-send-email with Git 2.35.1 under system 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux.

I am on a system-wide socks5 proxy. Although I set the global .gitconfig to use the socks5 proxy trying to send emails, the connection to the SMTP server seems does not go through the proxy at all.

Other git commands do go through the globally set .gitconfig proxy, git-send-email seems to be an exception.

So I'm wondering if there needs to be a code change in 'git-send-email.perl' to run the connection through a proxy, or I just need to tune the setting to accomplish this?

-- 
Thanks & Regards,
Shaoxuan
brian m. carlson· Apr 7, 2022, 21:52 UTC · re: Shaoxuan Yuan · lore

Re: How to get git-send-email use a proxy?

On 2022-04-06 at 14:19:43, Shaoxuan Yuan wrote:
Show 12 quoted lines
> Greetings, Git community,
> 
> I'm using git-send-email with Git 2.35.1 under system
> 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux.
> 
> I am on a system-wide socks5 proxy. Although I set the global
> .gitconfig to use the socks5 proxy trying to send emails, the
> connection to the SMTP server seems does not go through the proxy at
> all.
> 
> Other git commands do go through the globally set .gitconfig proxy,
> git-send-email seems to be an exception.

I think you're referring to http.proxy. That affects only HTTP, HTTPS, and FTP (if we even still support that). All of those protocols are handled by libcurl, which includes native proxy support. It doesn't affect other protocols like SSH or SMTP.

> So I'm wondering if there needs to be a code change in
> 'git-send-email.perl' to run the connection through a proxy, or I just
> need to tune the setting to accomplish this?

git send-email is written in Perl and doesn't use libcurl, so it doesn't have proxy support. If there's a particular optional module we could dynamically load to provide proxy support, that's an option we could support if someone wanted to provide a patch.

In the mean time, you could also try using some sort of tool, like socat, to bind a local port tunnelling over the proxy to the destination server and then use SMTP over that local port to connect.

-- 
brian m. carlson (he/him or they/them)
Toronto, Ontario, CA
Shaoxuan Yuan· Apr 8, 2022, 09:01 UTC · re: brian m. carlson · lore

Re: How to get git-send-email use a proxy?

On Fri, Apr 8, 2022 at 5:53 AM brian m. carlson <sandals@crustytoothpaste.net> wrote:

Show 35 quoted lines
>
> On 2022-04-06 at 14:19:43, Shaoxuan Yuan wrote:
> > Greetings, Git community,
> >
> > I'm using git-send-email with Git 2.35.1 under system
> > 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux.
> >
> > I am on a system-wide socks5 proxy. Although I set the global
> > .gitconfig to use the socks5 proxy trying to send emails, the
> > connection to the SMTP server seems does not go through the proxy at
> > all.
> >
> > Other git commands do go through the globally set .gitconfig proxy,
> > git-send-email seems to be an exception.
>
> I think you're referring to http.proxy.  That affects only HTTP, HTTPS,
> and FTP (if we even still support that).  All of those protocols are
> handled by libcurl, which includes native proxy support.  It doesn't
> affect other protocols like SSH or SMTP.
>
> > So I'm wondering if there needs to be a code change in
> > 'git-send-email.perl' to run the connection through a proxy, or I just
> > need to tune the setting to accomplish this?
>
> git send-email is written in Perl and doesn't use libcurl, so it doesn't
> have proxy support.  If there's a particular optional module we could
> dynamically load to provide proxy support, that's an option we could
> support if someone wanted to provide a patch.
>
> In the mean time, you could also try using some sort of tool, like
> socat, to bind a local port tunnelling over the proxy to the destination
> server and then use SMTP over that local port to connect.
> --
> brian m. carlson (he/him or they/them)
> Toronto, Ontario, CA
Thanks, it's pretty informative ;-)
-- 
Thanks & Regards,
Shaoxuan
Ævar Arnfjörð Bjarmason· Apr 8, 2022, 11:51 UTC · re: Shaoxuan Yuan · lore

Re: How to get git-send-email use a proxy?

On Fri, Apr 08 2022, Shaoxuan Yuan wrote:
Show 39 quoted lines
> On Fri, Apr 8, 2022 at 5:53 AM brian m. carlson
> <sandals@crustytoothpaste.net> wrote:
>>
>> On 2022-04-06 at 14:19:43, Shaoxuan Yuan wrote:
>> > Greetings, Git community,
>> >
>> > I'm using git-send-email with Git 2.35.1 under system
>> > 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux.
>> >
>> > I am on a system-wide socks5 proxy. Although I set the global
>> > .gitconfig to use the socks5 proxy trying to send emails, the
>> > connection to the SMTP server seems does not go through the proxy at
>> > all.
>> >
>> > Other git commands do go through the globally set .gitconfig proxy,
>> > git-send-email seems to be an exception.
>>
>> I think you're referring to http.proxy.  That affects only HTTP, HTTPS,
>> and FTP (if we even still support that).  All of those protocols are
>> handled by libcurl, which includes native proxy support.  It doesn't
>> affect other protocols like SSH or SMTP.
>>
>> > So I'm wondering if there needs to be a code change in
>> > 'git-send-email.perl' to run the connection through a proxy, or I just
>> > need to tune the setting to accomplish this?
>>
>> git send-email is written in Perl and doesn't use libcurl, so it doesn't
>> have proxy support.  If there's a particular optional module we could
>> dynamically load to provide proxy support, that's an option we could
>> support if someone wanted to provide a patch.
>>
>> In the mean time, you could also try using some sort of tool, like
>> socat, to bind a local port tunnelling over the proxy to the destination
>> server and then use SMTP over that local port to connect.
>> --
>> brian m. carlson (he/him or they/them)
>> Toronto, Ontario, CA
>
> Thanks, it's pretty informative ;-)

If you want to add a "native" feature to git-send-email.perl (and provide a patch) it looks from https://stackoverflow.com/questions/3253360/using-socks5-proxy-with-netsmtp that doing so isn't too hard.

I.e. Net::SMTP (which we use) just uses standard Perl modules to connect to the network, and there's other existing modules to ferry any such connection through a SOCKS proxy: https://metacpan.org/pod/Net::SOCKS & https://metacpan.org/pod/IO::Socket::Socks (I'm not sure which of these is a better choice).

So it seems like a rather easy 10-20 line patch (including docs and boilerplate) where we'd just create our own Git::Net::SMTP class, and that class in turn would be like Net::SMTP, except its @ISA would first dispatch to a "new" in a class we own.

We could thus intercept the new() invocation it makes to the socket class it's picking now, and direct it to a wrapper.

There's probably even an existing CPAN module for "given this class, screw with its @ISA such that socks support is added", I just haven't looked.

Shaoxuan Yuan· Apr 8, 2022, 12:03 UTC · re: Ævar Arnfjörð Bjarmason · lore

Re: How to get git-send-email use a proxy?

On Fri, Apr 8, 2022 at 8:01 PM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
Show 66 quoted lines
>
>
> On Fri, Apr 08 2022, Shaoxuan Yuan wrote:
>
> > On Fri, Apr 8, 2022 at 5:53 AM brian m. carlson
> > <sandals@crustytoothpaste.net> wrote:
> >>
> >> On 2022-04-06 at 14:19:43, Shaoxuan Yuan wrote:
> >> > Greetings, Git community,
> >> >
> >> > I'm using git-send-email with Git 2.35.1 under system
> >> > 5.4.72-microsoft-standard-WSL2, x86_64 GNU/Linux.
> >> >
> >> > I am on a system-wide socks5 proxy. Although I set the global
> >> > .gitconfig to use the socks5 proxy trying to send emails, the
> >> > connection to the SMTP server seems does not go through the proxy at
> >> > all.
> >> >
> >> > Other git commands do go through the globally set .gitconfig proxy,
> >> > git-send-email seems to be an exception.
> >>
> >> I think you're referring to http.proxy.  That affects only HTTP, HTTPS,
> >> and FTP (if we even still support that).  All of those protocols are
> >> handled by libcurl, which includes native proxy support.  It doesn't
> >> affect other protocols like SSH or SMTP.
> >>
> >> > So I'm wondering if there needs to be a code change in
> >> > 'git-send-email.perl' to run the connection through a proxy, or I just
> >> > need to tune the setting to accomplish this?
> >>
> >> git send-email is written in Perl and doesn't use libcurl, so it doesn't
> >> have proxy support.  If there's a particular optional module we could
> >> dynamically load to provide proxy support, that's an option we could
> >> support if someone wanted to provide a patch.
> >>
> >> In the mean time, you could also try using some sort of tool, like
> >> socat, to bind a local port tunnelling over the proxy to the destination
> >> server and then use SMTP over that local port to connect.
> >> --
> >> brian m. carlson (he/him or they/them)
> >> Toronto, Ontario, CA
> >
> > Thanks, it's pretty informative ;-)
>
> If you want to add a "native" feature to git-send-email.perl (and
> provide a patch) it looks from
> https://stackoverflow.com/questions/3253360/using-socks5-proxy-with-netsmtp
> that doing so isn't too hard.
>
> I.e. Net::SMTP (which we use) just uses standard Perl modules to connect
> to the network, and there's other existing modules to ferry any such
> connection through a SOCKS proxy: https://metacpan.org/pod/Net::SOCKS &
> https://metacpan.org/pod/IO::Socket::Socks (I'm not sure which of these
> is a better choice).
>
> So it seems like a rather easy 10-20 line patch (including docs and
> boilerplate) where we'd just create our own Git::Net::SMTP class, and
> that class in turn would be like Net::SMTP, except its @ISA would first
> dispatch to a "new" in a class we own.
>
> We could thus intercept the new() invocation it makes to the socket
> class it's picking now, and direct it to a wrapper.
>
> There's probably even an existing CPAN module for "given this class,
> screw with its @ISA such that socks support is added", I just haven't
> looked.

Thanks for the info, I will definitely try to make a patch and see how it works :-)

-- 
Thanks & Regards,
Shaoxuan

← back to recent threads