git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* clone from url with email address as username?(escaping @ symbol)
@ 2009-09-29 14:20 Ben Bennett
  2009-09-29 14:25 ` Sverre Rabbelier
  0 siblings, 1 reply; 15+ messages in thread
From: Ben Bennett @ 2009-09-29 14:20 UTC (permalink / raw)
  To: git

Is there any escape sequence for the @ symbol when cloning?


Thanks,
Ben

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 14:20 clone from url with email address as username?(escaping @ symbol) Ben Bennett
@ 2009-09-29 14:25 ` Sverre Rabbelier
  2009-09-29 14:30   ` Matthieu Moy
  0 siblings, 1 reply; 15+ messages in thread
From: Sverre Rabbelier @ 2009-09-29 14:25 UTC (permalink / raw)
  To: Ben Bennett; +Cc: git

Heya,

On Tue, Sep 29, 2009 at 16:20, Ben Bennett <benbennett@gmail.com> wrote:
> Is there any escape sequence for the @ symbol when cloning?

I thought @ is not allowed to be in an url? What do you need to escape it for?

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 14:25 ` Sverre Rabbelier
@ 2009-09-29 14:30   ` Matthieu Moy
  2009-09-29 14:32     ` Sverre Rabbelier
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 14:30 UTC (permalink / raw)
  To: Sverre Rabbelier; +Cc: Ben Bennett, git

Sverre Rabbelier <srabbelier@gmail.com> writes:

> Heya,
>
> On Tue, Sep 29, 2009 at 16:20, Ben Bennett <benbennett@gmail.com> wrote:
>> Is there any escape sequence for the @ symbol when cloning?
>
> I thought @ is not allowed to be in an url? What do you need to
> escape it for?

If your username is "foo@bar.com", then the clone URL might well be

ssh://foo@bar.com@server.com/path/to/repo

The question is which @ is the login/server separator, and which one
is included in the login. A quick test with

git clone ssh://foo@bar.com@localhost/path/to/repo

shows me that Git does the right thing, i.e. uses "foo@bar.com" as the
login, without the need to escape it.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 14:30   ` Matthieu Moy
@ 2009-09-29 14:32     ` Sverre Rabbelier
  2009-09-29 15:31       ` Ben Bennett
  0 siblings, 1 reply; 15+ messages in thread
From: Sverre Rabbelier @ 2009-09-29 14:32 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Ben Bennett, git

Heya,

On Tue, Sep 29, 2009 at 16:30, Matthieu Moy
<Matthieu.Moy@grenoble-inp.fr> wrote:
> The question is which @ is the login/server separator, and which one
> is included in the login. A quick test with

I think it only makes sense that this would work, since any @ can
never be part of the server name (since it's not an allowed
character), so I'm still curious why Ben wants to escape his @.

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 14:32     ` Sverre Rabbelier
@ 2009-09-29 15:31       ` Ben Bennett
  2009-09-29 16:59         ` Matthieu Moy
  0 siblings, 1 reply; 15+ messages in thread
From: Ben Bennett @ 2009-09-29 15:31 UTC (permalink / raw)
  To: Sverre Rabbelier; +Cc: Matthieu Moy, git

I am attempting to do a https clone. The username is an email address
but when I do a clone here is what happens.

Here is what I get , I might be messing up the clone command . btw ,
if i leave switch it to ssh , yes it does resolve the url correctly.

git clone https://benjamin.j.bennett@fooserver.com@fooserver.com/git_repos/main-code.git/
test
Initialized empty Git repository in /home/benjamin/planning_workspace/test/.git/
Password:
error: Couldn't resolve host 'fooserver.com@fooserver.com' while
accessing https://benjamin.j.bennett@fooserver.com@myfooserver.com/git_repos/main-code.git//info/refs

On Tue, Sep 29, 2009 at 9:32 AM, Sverre Rabbelier <srabbelier@gmail.com> wrote:
> Heya,
>
> On Tue, Sep 29, 2009 at 16:30, Matthieu Moy
> <Matthieu.Moy@grenoble-inp.fr> wrote:
>> The question is which @ is the login/server separator, and which one
>> is included in the login. A quick test with
>
> I think it only makes sense that this would work, since any @ can
> never be part of the server name (since it's not an allowed
> character), so I'm still curious why Ben wants to escape his @.
>
> --
> Cheers,
>
> Sverre Rabbelier
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 15:31       ` Ben Bennett
@ 2009-09-29 16:59         ` Matthieu Moy
  2009-09-29 17:07           ` Matthieu Moy
                             ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 16:59 UTC (permalink / raw)
  To: Ben Bennett; +Cc: Sverre Rabbelier, git

Ben Bennett <benbennett@gmail.com> writes:

> I am attempting to do a https clone. The username is an email address
> but when I do a clone here is what happens.

Hmm, right, it works with ssh, but not http.

I tried a quick fix like this:

diff --git a/http.c b/http.c
index 23b2a19..361a6be 100644
--- a/http.c
+++ b/http.c
@@ -281,9 +281,10 @@ static void http_auth_init(const char *url)
         * "proto://<host>/..."?
         */
        cp += 3;
-       at = strchr(cp, '@');
        colon = strchr(cp, ':');
        slash = strchrnul(cp, '/');
+       for(at = slash-1; *at != '@' && *at != '/'; at--)
+               continue;
        if (!at || slash <= at)
                return; /* No credentials */
        if (!colon || at <= colon) {

Unfortunately, it seems the complete URL is passed to curl, and curl
is the one doing it wrong. Indeed:

$ curl -v https://user@email.com@server.com/path/                                          
* getaddrinfo(3) failed for email.com@server.com:443
* Couldn't resolve host 'email.com@server.com'
* Closing connection #0
curl: (6) Couldn't resolve host 'email.com@server.com'

Now for the good news:

http://curl.haxx.se/mail/lib-2006-02/0134.html
http://sourceforge.net/tracker/index.php?func=detail&aid=2826621&group_id=976&atid=100976

In short, you have to use %40 to escape the @, and curl does it this
way because the RFC doesn't allow @ in usernames.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 16:59         ` Matthieu Moy
@ 2009-09-29 17:07           ` Matthieu Moy
  2009-09-29 17:48           ` Daniel Stenberg
  2009-09-29 17:51           ` Ben Bennett
  2 siblings, 0 replies; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 17:07 UTC (permalink / raw)
  To: Ben Bennett; +Cc: Sverre Rabbelier, git

Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:

> In short, you have to use %40 to escape the @, and curl does it this
> way because the RFC doesn't allow @ in usernames.

I've added a FAQ on the wiki. Feel free to improve:

http://git.or.cz/gitwiki/GitFaq#Myusernamecontainsa.27.40.27.2CIcan.27tclonethroughHTTP.2BAC8-HTTPS

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 16:59         ` Matthieu Moy
  2009-09-29 17:07           ` Matthieu Moy
@ 2009-09-29 17:48           ` Daniel Stenberg
  2009-09-29 18:09             ` Matthieu Moy
  2009-09-29 17:51           ` Ben Bennett
  2 siblings, 1 reply; 15+ messages in thread
From: Daniel Stenberg @ 2009-09-29 17:48 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Ben Bennett, Sverre Rabbelier, git

On Tue, 29 Sep 2009, Matthieu Moy wrote:

> Unfortunately, it seems the complete URL is passed to curl, and curl
> is the one doing it wrong. Indeed:
>
> $ curl -v https://user@email.com@server.com/path/
> * getaddrinfo(3) failed for email.com@server.com:443

This is not exactly curl "doing it wrong". This is a user passing in something 
that isn't a URL to the command that asks for a URL to work on. The user part 
cannot legally have a '@' letter in a URL, you must encode it.

> In short, you have to use %40 to escape the @, and curl does it this way 
> because the RFC doesn't allow @ in usernames.

Exactly. So curl is not "wrong", it just can't work around this user-error.

-- 

  / daniel.haxx.se

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 16:59         ` Matthieu Moy
  2009-09-29 17:07           ` Matthieu Moy
  2009-09-29 17:48           ` Daniel Stenberg
@ 2009-09-29 17:51           ` Ben Bennett
  2009-09-29 18:03             ` Matthieu Moy
  2 siblings, 1 reply; 15+ messages in thread
From: Ben Bennett @ 2009-09-29 17:51 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Sverre Rabbelier, git

Is it escaping the %40 when passed down? I am getting an error 401  ,
and checking the server logs , it is passing the %40 to the server in
the username.
Running curl from command line , I can connect, but through git , the
username is getting mangled or I have something screwed up.
 I will look at http.c tonight after work, to see if I am messing something up.

Thanks,
Ben


On Tue, Sep 29, 2009 at 11:59 AM, Matthieu Moy
<Matthieu.Moy@grenoble-inp.fr> wrote:
> Ben Bennett <benbennett@gmail.com> writes:
>
>> I am attempting to do a https clone. The username is an email address
>> but when I do a clone here is what happens.
>
> Hmm, right, it works with ssh, but not http.
>
> I tried a quick fix like this:
>
> diff --git a/http.c b/http.c
> index 23b2a19..361a6be 100644
> --- a/http.c
> +++ b/http.c
> @@ -281,9 +281,10 @@ static void http_auth_init(const char *url)
>         * "proto://<host>/..."?
>         */
>        cp += 3;
> -       at = strchr(cp, '@');
>        colon = strchr(cp, ':');
>        slash = strchrnul(cp, '/');
> +       for(at = slash-1; *at != '@' && *at != '/'; at--)
> +               continue;
>        if (!at || slash <= at)
>                return; /* No credentials */
>        if (!colon || at <= colon) {
>
> Unfortunately, it seems the complete URL is passed to curl, and curl
> is the one doing it wrong. Indeed:
>
> $ curl -v https://user@email.com@server.com/path/
> * getaddrinfo(3) failed for email.com@server.com:443
> * Couldn't resolve host 'email.com@server.com'
> * Closing connection #0
> curl: (6) Couldn't resolve host 'email.com@server.com'
>
> Now for the good news:
>
> http://curl.haxx.se/mail/lib-2006-02/0134.html
> http://sourceforge.net/tracker/index.php?func=detail&aid=2826621&group_id=976&atid=100976
>
> In short, you have to use %40 to escape the @, and curl does it this
> way because the RFC doesn't allow @ in usernames.
>
> --
> Matthieu Moy
> http://www-verimag.imag.fr/~moy/
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 17:51           ` Ben Bennett
@ 2009-09-29 18:03             ` Matthieu Moy
  2009-09-29 18:12               ` Matthieu Moy
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 18:03 UTC (permalink / raw)
  To: Ben Bennett; +Cc: Sverre Rabbelier, git

Ben Bennett <benbennett@gmail.com> writes:

> Is it escaping the %40 when passed down? I am getting an error 401  ,
> and checking the server logs , it is passing the %40 to the server in
> the username.
> Running curl from command line , I can connect, but through git , the
> username is getting mangled or I have something screwed up.

OK, so it seems Git should be fixed to unescape this %40 somewhere,
most likely in http_auth_init in http.c, in addition to by fix below.
http://curl.haxx.se/libcurl/c/curl_easy_unescape.html might help. I've
consumed by Git time budget for now, so if anyone else can have a
look ...

>> --- a/http.c
>> +++ b/http.c
>> @@ -281,9 +281,10 @@ static void http_auth_init(const char *url)
>>         * "proto://<host>/..."?
>>         */
>>        cp += 3;
>> -       at = strchr(cp, '@');
>>        colon = strchr(cp, ':');
>>        slash = strchrnul(cp, '/');
>> +       for(at = slash-1; *at != '@' && *at != '/'; at--)
>> +               continue;
>>        if (!at || slash <= at)
>>                return; /* No credentials */
>>        if (!colon || at <= colon) {
>>

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 17:48           ` Daniel Stenberg
@ 2009-09-29 18:09             ` Matthieu Moy
  2009-09-29 20:38               ` Daniel Stenberg
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 18:09 UTC (permalink / raw)
  To: Daniel Stenberg; +Cc: Ben Bennett, Sverre Rabbelier, git

Daniel Stenberg <daniel@haxx.se> writes:

> On Tue, 29 Sep 2009, Matthieu Moy wrote:
>
>> Unfortunately, it seems the complete URL is passed to curl, and curl
>> is the one doing it wrong. Indeed:
>>
>> $ curl -v https://user@email.com@server.com/path/
>> * getaddrinfo(3) failed for email.com@server.com:443
>
> This is not exactly curl "doing it wrong". This is a user passing in
> something that isn't a URL to the command that asks for a URL to work
> on. The user part cannot legally have a '@' letter in a URL, you must
> encode it.
>
>> In short, you have to use %40 to escape the @, and curl does it this
>> way because the RFC doesn't allow @ in usernames.
>
> Exactly. So curl is not "wrong", it just can't work around this user-error.

It may not want work around user-errors, but you can hardly say that
it _can't_. Many tools do in this case, Firefox is one of them. And
anyway, trying to connect to email.com@server.com is probably the
worst thing it can do.

At least, it could warn about two @ in the URL and say it can't
handle it ...

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 18:03             ` Matthieu Moy
@ 2009-09-29 18:12               ` Matthieu Moy
  2009-09-29 18:55                 ` Ben Bennett
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 18:12 UTC (permalink / raw)
  To: Ben Bennett; +Cc: Sverre Rabbelier, git

Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:

> OK, so it seems Git should be fixed to unescape this %40 somewhere,
> most likely in http_auth_init in http.c, in addition to by fix
> below.

... err, no not _in addition_ to it, forget this. There's one @ and
git finds it correctly.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 18:12               ` Matthieu Moy
@ 2009-09-29 18:55                 ` Ben Bennett
  0 siblings, 0 replies; 15+ messages in thread
From: Ben Bennett @ 2009-09-29 18:55 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Sverre Rabbelier, git

I will look at it tonight. But my fix would be to automatically escape
the @ symbol when  git passes onto curl.
Don't know if this would work easy or not, but it would be something
along the lines of .

https://(USERNAME)@(SERVER_ADDR)

The @ would be  the last index of the @ symbol in the URL.
Then somekind of function that escape_username_for_curl.




On Tue, Sep 29, 2009 at 1:12 PM, Matthieu Moy
<Matthieu.Moy@grenoble-inp.fr> wrote:
> Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
>
>> OK, so it seems Git should be fixed to unescape this %40 somewhere,
>> most likely in http_auth_init in http.c, in addition to by fix
>> below.
>
> ... err, no not _in addition_ to it, forget this. There's one @ and
> git finds it correctly.
>
> --
> Matthieu Moy
> http://www-verimag.imag.fr/~moy/
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 18:09             ` Matthieu Moy
@ 2009-09-29 20:38               ` Daniel Stenberg
  2009-09-29 20:47                 ` Matthieu Moy
  0 siblings, 1 reply; 15+ messages in thread
From: Daniel Stenberg @ 2009-09-29 20:38 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Ben Bennett, Sverre Rabbelier, git

On Tue, 29 Sep 2009, Matthieu Moy wrote:

>> Exactly. So curl is not "wrong", it just can't work around this user-error.
>
> It may not want work around user-errors, but you can hardly say that
> it _can't_.

It can't work around this error. In theory we could make it GUESS that one of 
the @-letters are actually supposed to be %40, but I won't. It could also 
guess that @ was accidentally a '2' with alt-gr pressed when using a nordic 
keyboard layout. Guessing here is crazy.

> Many tools do in this case, Firefox is one of them.

So what if you had that @ in your password and not in your user name?

> And anyway, trying to connect to email.com@server.com is probably the worst 
> thing it can do.

I understand that you're saying that as a git user and someone who's not into 
curl and libcurl details, but I'm in the opposite corner mostly and I claim 
that isn't at all such a bad outcome from that input. curl has that approach 
through-out its entire URL parser. It gets what it needs and then uses the 
rest unparsed. That way it is very liberal in what it accepts and it doesn't 
reject bad URLs as long as it only can extract the parts it needs.

If curl had a strict parser it would of course bluntly reject that URL at 
once.

> At least, it could warn about two @ in the URL and say it can't handle it

It could, sure. But curl has no such strict parser so it accepts all sorts of 
various violations.

I don't think this is the proper place to discuss what curl (or libcurl) 
should or shouldn't do with given URLs - but you're most welcome to bring your 
ideas and patches to the curl project and we can debate their virtues over 
there.

-- 

  / daniel.haxx.se

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: clone from url with email address as username?(escaping @ symbol)
  2009-09-29 20:38               ` Daniel Stenberg
@ 2009-09-29 20:47                 ` Matthieu Moy
  0 siblings, 0 replies; 15+ messages in thread
From: Matthieu Moy @ 2009-09-29 20:47 UTC (permalink / raw)
  To: Daniel Stenberg; +Cc: Ben Bennett, Sverre Rabbelier, git

Daniel Stenberg <daniel@haxx.se> writes:

>> Many tools do in this case, Firefox is one of them.
>
> So what if you had that @ in your password and not in your user
> name?

Then the last @ would still be the separator between the
login/password and the hostname, and looking at the '@' starting from
the right hand side would still work.

The problem is if you have a ":" in your login or password, _then_ it
is ambiguous (but by far less common), but the @ is here to split
something that can have a @ in it (login:pass) and something which
can't (hostname), so there isn't any ambiguity.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2009-09-29 20:48 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-29 14:20 clone from url with email address as username?(escaping @ symbol) Ben Bennett
2009-09-29 14:25 ` Sverre Rabbelier
2009-09-29 14:30   ` Matthieu Moy
2009-09-29 14:32     ` Sverre Rabbelier
2009-09-29 15:31       ` Ben Bennett
2009-09-29 16:59         ` Matthieu Moy
2009-09-29 17:07           ` Matthieu Moy
2009-09-29 17:48           ` Daniel Stenberg
2009-09-29 18:09             ` Matthieu Moy
2009-09-29 20:38               ` Daniel Stenberg
2009-09-29 20:47                 ` Matthieu Moy
2009-09-29 17:51           ` Ben Bennett
2009-09-29 18:03             ` Matthieu Moy
2009-09-29 18:12               ` Matthieu Moy
2009-09-29 18:55                 ` Ben Bennett

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).