diff options
author | Matthew John Cheetham <mjcheetham@outlook.com> | 2023-02-27 17:20:20 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-02-27 18:40:40 (GMT) |
commit | 5f2117b24f568ecc789c677748d70ccd538b16ba (patch) | |
tree | 46d33f1ad5a426299b6274f4e258428913592be5 /credential.c | |
parent | 6b8dda9a4fdec1638b047506a121df8e15872492 (diff) | |
download | git-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.c | 3 |
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, |