summaryrefslogtreecommitdiff
path: root/credential.c
diff options
context:
space:
mode:
authorMatthew John Cheetham <mjcheetham@outlook.com>2023-02-27 17:20:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2023-02-27 18:40:40 (GMT)
commit5f2117b24f568ecc789c677748d70ccd538b16ba (patch)
tree46d33f1ad5a426299b6274f4e258428913592be5 /credential.c
parent6b8dda9a4fdec1638b047506a121df8e15872492 (diff)
downloadgit-5f2117b24f568ecc789c677748d70ccd538b16ba.zip
git-5f2117b24f568ecc789c677748d70ccd538b16ba.tar.gz
git-5f2117b24f568ecc789c677748d70ccd538b16ba.tar.bz2
credential: add WWW-Authenticate header to cred requests
Add the value of the WWW-Authenticate response header to credential requests. Credential helpers that understand and support HTTP authentication and authorization can use this standard header (RFC 2616 Section 14.47 [1]) to generate valid credentials. WWW-Authenticate headers can contain information pertaining to the authority, authentication mechanism, or extra parameters/scopes that are required. The current I/O format for credential helpers only allows for unique names for properties/attributes, so in order to transmit multiple header values (with a specific order) we introduce a new convention whereby a C-style array syntax is used in the property name to denote multiple ordered values for the same property. In this case we send multiple `wwwauth[]` properties where the order that the repeated attributes appear in the conversation reflects the order that the WWW-Authenticate headers appeared in the HTTP response. Add a set of tests to exercise the HTTP authentication header parsing and the interop with credential helpers. Credential helpers will receive WWW-Authenticate information in credential requests. [1] https://datatracker.ietf.org/doc/html/rfc2616#section-14.47 Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'credential.c')
-rw-r--r--credential.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/credential.c b/credential.c
index 897b467..f566c8a 100644
--- a/credential.c
+++ b/credential.c
@@ -270,6 +270,9 @@ void credential_write(const struct credential *c, FILE *fp)
credential_write_item(fp, "path", c->path, 0);
credential_write_item(fp, "username", c->username, 0);
credential_write_item(fp, "password", c->password, 0);
+ for (size_t i = 0; i < c->wwwauth_headers.nr; i++)
+ credential_write_item(fp, "wwwauth[]", c->wwwauth_headers.v[i],
+ 0);
}
static int run_credential_helper(struct credential *c,