Skip to content

Commit

Permalink
credential-cache: respect authtype capability
Browse files Browse the repository at this point in the history
Previously, credential-cache populated authtype regardless whether
"get" request had authtype capability. As documented in
git-credential.txt, authtype "should not be sent unless the appropriate
capability ... is provided".

Add test. Without this change, the test failed because "credential fill"
printed an incomplete credential with only protocol and host attributes
(the unexpected authtype attribute was discarded by credential.c).

Signed-off-by: M Hickford <[email protected]>
  • Loading branch information
hickford committed Jan 9, 2025
1 parent 92999a4 commit db575d9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
4 changes: 2 additions & 2 deletions builtin/credential-cache--daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,9 @@ static void serve_one_client(FILE *in, FILE *out)
fprintf(out, "username=%s\n", e->item.username);
if (e->item.password)
fprintf(out, "password=%s\n", e->item.password);
if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_HELPER) && e->item.authtype)
if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_RESPONSE) && e->item.authtype)
fprintf(out, "authtype=%s\n", e->item.authtype);
if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_HELPER) && e->item.credential)
if (credential_has_capability(&c.capa_authtype, CREDENTIAL_OP_RESPONSE) && e->item.credential)
fprintf(out, "credential=%s\n", e->item.credential);
if (e->item.password_expiry_utc != TIME_MAX)
fprintf(out, "password_expiry_utc=%"PRItime"\n",
Expand Down
15 changes: 15 additions & 0 deletions t/lib-credential.sh
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,21 @@ helper_test_authtype() {
EOF
'

test_expect_success "helper ($HELPER) gets authtype and credential only if request has authtype capability" '
check fill $HELPER <<-\EOF
protocol=https
host=git.example.com
--
protocol=https
host=git.example.com
username=askpass-username
password=askpass-password
--
askpass: Username for '\''https://git.example.com'\'':
askpass: Password for '\''https://[email protected]'\'':
EOF
'

test_expect_success "helper ($HELPER) stores authtype and credential with username" '
check approve $HELPER <<-\EOF
capability[]=authtype
Expand Down

0 comments on commit db575d9

Please sign in to comment.