diff options
author | Jeff King <peff@peff.net> | 2011-12-10 05:31:24 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-12-11 23:16:24 -0800 |
commit | 118250728e1aa46c19d4d258950b2ba15cb6d5d2 (patch) | |
tree | 8ad51df9c4dff257351e698391cc0e70d0b405cb /t | |
parent | http: use credential API to get passwords (diff) | |
download | tgif-118250728e1aa46c19d4d258950b2ba15cb6d5d2.tar.xz |
credential: apply helper config
The functionality for credential storage helpers is already
there; we just need to give the users a way to turn it on.
This patch provides a "credential.helper" configuration
variable which allows the user to provide one or more helper
strings.
Rather than simply matching credential.helper, we will also
compare URLs in subsection headings to the current context.
This means you can apply configuration to a subset of
credentials. For example:
[credential "https://example.com"]
helper = foo
would match a request for "https://example.com/foo.git", but
not one for "https://kernel.org/foo.git".
This is overkill for the "helper" variable, since users are
unlikely to want different helpers for different sites (and
since helpers run arbitrary code, they could do the matching
themselves anyway).
However, future patches will add new config variables where
this extra feature will be more useful.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rwxr-xr-x | t/t0300-credentials.sh | 42 | ||||
-rwxr-xr-x | t/t5550-http-fetch.sh | 12 |
2 files changed, 54 insertions, 0 deletions
diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh index 81a455f4c3..42d0f5b707 100755 --- a/t/t0300-credentials.sh +++ b/t/t0300-credentials.sh @@ -192,4 +192,46 @@ test_expect_success 'internal getpass does not ask for known username' ' EOF ' +HELPER="!f() { + cat >/dev/null + echo username=foo + echo password=bar + }; f" +test_expect_success 'respect configured credentials' ' + test_config credential.helper "$HELPER" && + check fill <<-\EOF + -- + username=foo + password=bar + -- + EOF +' + +test_expect_success 'match configured credential' ' + test_config credential.https://example.com.helper "$HELPER" && + check fill <<-\EOF + protocol=https + host=example.com + path=repo.git + -- + username=foo + password=bar + -- + EOF +' + +test_expect_success 'do not match configured credential' ' + test_config credential.https://foo.helper "$HELPER" && + check fill <<-\EOF + protocol=https + host=bar + -- + username=askpass-username + password=askpass-password + -- + askpass: Username for '\''https://bar'\'': + askpass: Password for '\''https://askpass-username@bar'\'': + EOF +' + test_done diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index 398a2d29a4..c59908fe77 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -101,6 +101,18 @@ test_expect_success 'http auth can request both user and pass' ' expect_askpass both user@host ' +test_expect_success 'http auth respects credential helper config' ' + test_config_global credential.helper "!f() { + cat >/dev/null + echo username=user@host + echo password=user@host + }; f" && + >askpass-query && + echo wrong >askpass-response && + git clone "$HTTPD_URL/auth/repo.git" clone-auth-helper && + expect_askpass none +' + test_expect_success 'fetch changes via http' ' echo content >>file && git commit -a -m two && |