git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] credential: allow wildcard patterns when matching config

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 16, 2020, 20:53 UTC
Message-ID
<20200216205329.GD6134@camp.crustytoothpaste.net>
In-Reply-To
<20200216061323.GA2397568@coredump.intra.peff.net>
On 2020-02-16 at 06:13:23, Jeff King wrote:
>    So I think we're OK here, unless you can come up with any more
>    obscure case.

Yeah, I made this implicit in my patch, but I couldn't think of a situation where we'd hit this case. I'll update the commit message to reflect that we don't intend for this behavior to change.

Show 15 quoted lines
>    Some options are:
> 
>      - teach urlmatch to pass matching config keys to our callback even
>        if they're "worse" than a previously-seen key, so that we can
>        then record all helpers in the order they appear in the config
>        (retaining the existing behavior)
> 
>      - use urlmatch's cmp_matches() to order the list of helper. This
>        would be a change in behavior, but I wonder if it might be what
>        people prefer. I suspect it would make some happy (if the
>        host-specific helper can answer the query above, you'd just as
>        soon not run the cache helper at all) and others not (if the
>        host-specific one is expensive or requires user interaction, you
>        may want to try the cache first). So I'm not sure if it would be
>        a good idea or not.

I think it should be reasonably simple to adjust the logic to do the former. I'd like to avoid making non-backwards compatible changes in this series. I'll add some tests for this case as well, since I think it's going to be important to get right. Thanks for the sanity check.

Show 15 quoted lines
> A few comments on the patch itself:
> 
> > --- a/Documentation/gitcredentials.txt
> > +++ b/Documentation/gitcredentials.txt
> > @@ -131,7 +131,9 @@ context would not match:
> >  because the hostnames differ. Nor would it match `foo.example.com`; Git
> >  compares hostnames exactly, without considering whether two hosts are part of
> >  the same domain. Likewise, a config entry for `http://example.com` would not
> > -match: Git compares the protocols exactly.
> > +match: Git compares the protocols exactly.  However, you may use wildcards in
> > +the domain name and other pattern matching techniques as with the `http.<url>.*`
> > +options.
> 
> You'd probably want to review the documentation to accommodate any of
> the behavior changes discussed above that we end up with.
As mentioned, my hope is to not need to do this.
Show 9 quoted lines
> > +	config.section = "credential";
> > +	config.key = NULL;
> > +	config.collect_fn = credential_config_callback;
> > +	config.cascade_fn = git_default_config;
> > +	config.cb = c;
> 
> I don't think the old code would ever call git_default_config (we _just_
> want to load values for this specific URL). So I think you'd want to
> leave the cascade_fn NULL here?
Okay, can do.
Show 16 quoted lines
> > +	credential_describe(c, &url);
> > +	normalized_url = url_normalize(url.buf, &config.url);
> 
> The purpose of credential_describe() so far has been to show the URL to
> the user. It won't do any %-encoding that would be required for more
> exotic URLs. But I assume we'd want that in whatever we feed to
> url_normalize. So for example:
> 
>   echo url=https://example.com/%2566 |
>   GIT_TERMINAL_PROMPT=0 git \
>     -c credential.https://example.com/%2566.helper='!echo >&2 run helper'
>     credential fill
> 
> matches in the current code, but not after your patch (we decode %25
> into just "%", and then feed "%66" to the url normalizer, which decodes
> it to "f".
Good point.  I'll fix this and add a test.
-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204
Previous: Jeff KingNext: Taylor Blau
Message 6 of 8 in “Wildcard matching for credentials”
  1. 0/3 Wildcard matching for credentialsbrian m. carlson, Feb 14, 2020
  2. 1/3 mailmap: add an additional email address for brian m. carlsonbrian m. carlson, Feb 14, 2020
  3. 2/3 t1300: add test for urlmatch with multiple wildcardsbrian m. carlson, Feb 14, 2020
  4. 3/3 credential: allow wildcard patterns when matching configbrian m. carlson, Feb 14, 2020
  5. Jeff KingFeb 16, 2020
  6. brian m. carlsonFeb 16, 2020
  7. Taylor BlauFeb 14, 2020
  8. brian m. carlsonFeb 15, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.