creds: hold credentials

Authorizdation credentials are kept in `struct Curl_creds`. This contains:

* `user`: the username, maybe the empty string
* `passwd`: the password, maybe the empty string
* `sasl_authzid`: the SASL authz value, maybe the empty string
* `oauth_bearer`: the OAUTH bearer token, maybe the empty string
* `source`: where the credentials from from
* `refcount`: a reference counter to link/unkink creds

A `creds` with all values empty is equivalent to NULL, e.g. no `creds`
instance. With reference counting, `creds` can be linked/unlinked
in several places.

See docs/internals/CREDENTIALS.md for use.

Closes #21548
This commit is contained in:
Stefan Eissing 2026-05-11 14:25:52 +02:00 committed by Daniel Stenberg
parent a32a2b0b77
commit 8f71d0fde5
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
47 changed files with 1138 additions and 962 deletions

View file

@ -40,24 +40,21 @@
*
* Parameters:
*
* authzid [in] - The authorization identity.
* authcid [in] - The authentication identity.
* creds [in] - The credentials.
* passwd [in] - The password.
* out [out] - The result storage.
*
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_plain_message(const char *authzid,
const char *authcid,
const char *passwd,
CURLcode Curl_auth_create_plain_message(struct Curl_creds *creds,
struct bufref *out)
{
size_t len;
char *auth;
size_t zlen = (authzid == NULL ? 0 : strlen(authzid));
size_t clen = strlen(authcid);
size_t plen = strlen(passwd);
size_t zlen = strlen(Curl_creds_sasl_authzid(creds));
size_t clen = strlen(Curl_creds_user(creds));
size_t plen = strlen(Curl_creds_passwd(creds));
if((zlen > CURL_MAX_INPUT_LENGTH) || (clen > CURL_MAX_INPUT_LENGTH) ||
(plen > CURL_MAX_INPUT_LENGTH))
@ -65,8 +62,10 @@ CURLcode Curl_auth_create_plain_message(const char *authzid,
len = zlen + clen + plen + 2;
auth = curl_maprintf("%s%c%s%c%s", authzid ? authzid : "", '\0',
authcid, '\0', passwd);
auth = curl_maprintf("%s%c%s%c%s",
Curl_creds_sasl_authzid(creds), '\0',
Curl_creds_user(creds), '\0',
Curl_creds_passwd(creds));
if(!auth)
return CURLE_OUT_OF_MEMORY;
Curl_bufref_set(out, auth, len, curl_free);

View file

@ -47,18 +47,19 @@
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct bufref *out)
{
struct HMAC_context *ctxt;
unsigned char digest[MD5_DIGEST_LEN];
char *response;
const char *user = Curl_creds_user(creds);
const char *passwd = Curl_creds_passwd(creds);
/* Compute the digest using the password as the key */
ctxt = Curl_HMAC_init(&Curl_HMAC_MD5,
(const unsigned char *)passwdp,
curlx_uztoui(strlen(passwdp)));
(const unsigned char *)passwd,
curlx_uztoui(strlen(passwd)));
if(!ctxt)
return CURLE_OUT_OF_MEMORY;
@ -73,7 +74,7 @@ CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg,
/* Generate the response */
response = curl_maprintf(
"%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
userp, digest[0], digest[1], digest[2], digest[3], digest[4],
user, digest[0], digest[1], digest[2], digest[3], digest[4],
digest[5], digest[6], digest[7], digest[8], digest[9], digest[10],
digest[11], digest[12], digest[13], digest[14], digest[15]);
if(!response)

View file

@ -332,13 +332,14 @@ bool Curl_auth_is_digest_supported(void)
*/
CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
const struct bufref *chlg,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
struct bufref *out)
{
size_t i;
struct MD5_context *ctxt;
const char *userp = Curl_creds_user(creds);
const char *passwdp = Curl_creds_passwd(creds);
char *response = NULL;
unsigned char digest[MD5_DIGEST_LEN];
char HA1_hex[(2 * MD5_DIGEST_LEN) + 1];
@ -666,8 +667,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
* Parameters:
*
* data [in] - The session handle.
* userp [in] - The username.
* passwdp [in] - The user's password.
* creds [in] - The credentials
* request [in] - The HTTP request.
* uripath [in] - The path of the HTTP uri.
* digest [in/out] - The digest data struct being used and modified.
@ -679,8 +679,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
*/
static CURLcode auth_create_digest_http_message(
struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const unsigned char *request,
const unsigned char *uripath,
struct digestdata *digest,
@ -689,6 +688,8 @@ static CURLcode auth_create_digest_http_message(
CURLcode (*hash)(unsigned char *, const unsigned char *, const size_t))
{
CURLcode result;
const char *userp = Curl_creds_user(creds);
const char *passwdp = Curl_creds_passwd(creds);
unsigned char hashbuf[32]; /* 32 bytes/256 bits */
unsigned char request_digest[65];
unsigned char ha1[65]; /* 64 digits and 1 zero byte */
@ -986,29 +987,28 @@ oom:
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const unsigned char *request,
const unsigned char *uripath,
struct digestdata *digest,
char **outptr, size_t *outlen)
{
if(digest->algo <= ALGO_MD5SESS)
return auth_create_digest_http_message(data, userp, passwdp,
return auth_create_digest_http_message(data, creds,
request, uripath, digest,
outptr, outlen,
auth_digest_md5_to_ascii,
Curl_md5it);
if(digest->algo <= ALGO_SHA256SESS)
return auth_create_digest_http_message(data, userp, passwdp,
return auth_create_digest_http_message(data, creds,
request, uripath, digest,
outptr, outlen,
auth_digest_sha256_to_ascii,
Curl_sha256it);
#ifdef CURL_HAVE_SHA512_256
if(digest->algo <= ALGO_SHA512_256SESS)
return auth_create_digest_http_message(data, userp, passwdp,
return auth_create_digest_http_message(data, creds,
request, uripath, digest,
outptr, outlen,
auth_digest_sha256_to_ascii,

View file

@ -28,6 +28,7 @@
#if defined(USE_WINDOWS_SSPI) && !defined(CURL_DISABLE_DIGEST_AUTH)
#include "creds.h"
#include "vauth/vauth.h"
#include "vauth/digest.h"
#include "curlx/multibyte.h"
@ -83,8 +84,7 @@ bool Curl_auth_is_digest_supported(void)
*/
CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
const struct bufref *chlg,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
struct bufref *out)
{
@ -137,9 +137,10 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
}
if(userp && *userp) {
if(Curl_creds_has_user(creds)) {
/* Populate our identity structure */
result = Curl_create_sspi_identity(userp, passwdp, &identity);
result = Curl_create_sspi_identity(creds->user, creds->passwd,
&identity);
if(result) {
curlx_free(spn);
curlx_free(output_token);
@ -381,8 +382,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const unsigned char *request,
const unsigned char *uripath,
struct digestdata *digest,
@ -421,16 +421,12 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
/* If the user/passwd that was used to make the identity for http_context
has changed then delete that context. */
if((userp && !digest->user) || (!userp && digest->user) ||
(passwdp && !digest->passwd) || (!passwdp && digest->passwd) ||
(userp && digest->user && Curl_timestrcmp(userp, digest->user)) ||
(passwdp && digest->passwd && Curl_timestrcmp(passwdp, digest->passwd))) {
if(!Curl_creds_same(creds, digest->creds)) {
if(digest->http_context) {
Curl_pSecFn->DeleteSecurityContext(digest->http_context);
curlx_safefree(digest->http_context);
}
curlx_safefree(digest->user);
curlx_safefree(digest->passwd);
Curl_creds_unlink(&digest->creds);
}
if(digest->http_context) {
@ -473,13 +469,13 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
unsigned long attrs;
TCHAR *spn;
/* free the copy of user/passwd used to make the previous identity */
curlx_safefree(digest->user);
curlx_safefree(digest->passwd);
/* free the credentials used to make the previous identity */
Curl_creds_unlink(&digest->creds);
if(userp && *userp) {
if(Curl_creds_has_user(creds)) {
/* Populate our identity structure */
if(Curl_create_sspi_identity(userp, passwdp, &identity)) {
if(Curl_create_sspi_identity(creds->user, creds->passwd,
&identity)) {
curlx_free(output_token);
return CURLE_OUT_OF_MEMORY;
}
@ -499,26 +495,8 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
/* Use the current Windows user */
p_identity = NULL;
if(userp) {
digest->user = curlx_strdup(userp);
if(!digest->user) {
curlx_free(output_token);
Curl_sspi_free_identity(p_identity);
return CURLE_OUT_OF_MEMORY;
}
}
if(passwdp) {
digest->passwd = curlx_strdup(passwdp);
if(!digest->passwd) {
curlx_free(output_token);
Curl_sspi_free_identity(p_identity);
curlx_safefree(digest->user);
return CURLE_OUT_OF_MEMORY;
}
}
if(creds)
Curl_creds_link(&digest->creds, creds);
/* Acquire our credentials handle */
status = Curl_pSecFn->AcquireCredentialsHandle(NULL,
@ -649,8 +627,7 @@ void Curl_auth_digest_cleanup(struct digestdata *digest)
}
/* Free the copy of user/passwd used to make the identity for http_context */
curlx_safefree(digest->user);
curlx_safefree(digest->passwd);
Curl_creds_unlink(&digest->creds);
}
#endif /* USE_WINDOWS_SSPI && !CURL_DISABLE_DIGEST_AUTH */

View file

@ -54,15 +54,14 @@ bool Curl_auth_gsasl_is_supported(struct Curl_easy *data,
}
CURLcode Curl_auth_gsasl_start(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct gsasldata *gsasl)
{
#if GSASL_VERSION_NUMBER >= 0x010b00
int res;
res =
#endif
gsasl_property_set(gsasl->client, GSASL_AUTHID, userp);
gsasl_property_set(gsasl->client, GSASL_AUTHID, creds->user);
#if GSASL_VERSION_NUMBER >= 0x010b00
if(res != GSASL_OK) {
failf(data, "setting AUTHID failed: %s", gsasl_strerror(res));
@ -73,7 +72,7 @@ CURLcode Curl_auth_gsasl_start(struct Curl_easy *data,
#if GSASL_VERSION_NUMBER >= 0x010b00
res =
#endif
gsasl_property_set(gsasl->client, GSASL_PASSWORD, passwdp);
gsasl_property_set(gsasl->client, GSASL_PASSWORD, creds->passwd);
#if GSASL_VERSION_NUMBER >= 0x010b00
if(res != GSASL_OK) {
failf(data, "setting PASSWORD failed: %s", gsasl_strerror(res));

View file

@ -74,8 +74,7 @@ bool Curl_auth_is_gssapi_supported(void)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
const bool mutual_auth,
@ -90,8 +89,7 @@ CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
(void)userp;
(void)passwdp;
(void)creds;
if(!krb5->spn) {
gss_buffer_desc spn_token = GSS_C_EMPTY_BUFFER;

View file

@ -79,8 +79,7 @@ bool Curl_auth_is_gssapi_supported(void)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
const bool mutual_auth,
@ -128,9 +127,10 @@ CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
if(!krb5->credentials) {
/* Do we have credentials to use or are we using single sign-on? */
if(userp && *userp) {
if(Curl_creds_has_user(creds)) {
/* Populate our identity structure */
result = Curl_create_sspi_identity(userp, passwdp, &krb5->identity);
result = Curl_create_sspi_identity(
creds->user, creds->passwd, &krb5->identity);
if(result)
return result;

View file

@ -421,8 +421,7 @@ static void unicodecpy(unsigned char *dest, const char *src, size_t length)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
struct ntlmdata *ntlm,
@ -453,8 +452,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
size_t domoff = hostoff + hostlen; /* This is 0: remember that host and
domain are empty */
(void)data;
(void)userp;
(void)passwdp;
(void)creds;
(void)service;
(void)host;
@ -542,8 +540,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct ntlmdata *ntlm,
struct bufref *out)
{
@ -579,6 +576,8 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
/* The fixed hostname we provide, in order to not leak our real local host
name. Copy the name used by Firefox. */
static const char host[] = "WORKSTATION";
const char *userp = Curl_creds_user(creds);
const char *passwdp = Curl_creds_passwd(creds);
const char *user;
const char *domain = "";
size_t hostoff = 0;

View file

@ -76,8 +76,7 @@ bool Curl_auth_is_ntlm_supported(void)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
struct ntlmdata *ntlm,
@ -111,11 +110,12 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
if(!ntlm->output_token)
return CURLE_OUT_OF_MEMORY;
if(userp && *userp) {
if(Curl_creds_has_user(creds)) {
CURLcode result;
/* Populate our identity structure */
result = Curl_create_sspi_identity(userp, passwdp, &ntlm->identity);
result = Curl_create_sspi_identity(
creds->user, creds->passwd, &ntlm->identity);
if(result)
return result;
@ -227,8 +227,7 @@ CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data,
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct ntlmdata *ntlm,
struct bufref *out)
{
@ -240,8 +239,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
SECURITY_STATUS status;
unsigned long attrs;
(void)passwdp;
(void)userp;
(void)creds;
/* Setup the type-2 "input" security buffer */
type_2_desc.ulVersion = SECBUFFER_VERSION;

View file

@ -47,21 +47,22 @@
*
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_oauth_bearer_message(const char *user,
CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_creds *creds,
const char *host,
const long port,
const char *bearer,
struct bufref *out)
{
char *oauth;
/* Generate the message */
if(port == 0 || port == 80)
oauth = curl_maprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1", user, host,
bearer);
oauth = curl_maprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1",
Curl_creds_user(creds), host,
Curl_creds_oauth_bearer(creds));
else
oauth = curl_maprintf("n,a=%s,\1host=%s\1port=%ld\1auth=Bearer %s\1\1",
user, host, port, bearer);
Curl_creds_user(creds), host, port,
Curl_creds_oauth_bearer(creds));
if(!oauth)
return CURLE_OUT_OF_MEMORY;
@ -83,12 +84,13 @@ CURLcode Curl_auth_create_oauth_bearer_message(const char *user,
*
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_create_xoauth_bearer_message(const char *user,
const char *bearer,
CURLcode Curl_auth_create_xoauth_bearer_message(struct Curl_creds *creds,
struct bufref *out)
{
/* Generate the message */
char *xoauth = curl_maprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
char *xoauth = curl_maprintf("user=%s\1auth=Bearer %s\1\1",
Curl_creds_user(creds),
Curl_creds_oauth_bearer(creds));
if(!xoauth)
return CURLE_OUT_OF_MEMORY;

View file

@ -70,8 +70,7 @@ bool Curl_auth_is_spnego_supported(void)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
const char *user,
const char *password,
struct Curl_creds *creds,
const char *service,
const char *host,
const char *chlg64,
@ -90,8 +89,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
struct gss_channel_bindings_struct chan;
#endif
(void)user;
(void)password;
(void)creds;
if(nego->context && nego->status == GSS_S_COMPLETE) {
/* We finished successfully our part of authentication, but server

View file

@ -78,8 +78,7 @@ bool Curl_auth_is_spnego_supported(void)
* Returns CURLE_OK on success.
*/
CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
const char *user,
const char *password,
struct Curl_creds *creds,
const char *service,
const char *host,
const char *chlg64,
@ -133,9 +132,10 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
if(!nego->credentials) {
/* Do we have credentials to use or are we using single sign-on? */
if(user && *user) {
if(Curl_creds_has_user(creds)) {
/* Populate our identity structure */
result = Curl_create_sspi_identity(user, password, &nego->identity);
result = Curl_create_sspi_identity(creds->user, creds->passwd,
&nego->identity);
if(result)
return result;

View file

@ -24,6 +24,7 @@
#include "curl_setup.h"
#include "vauth/vauth.h"
#include "creds.h"
#include "curlx/multibyte.h"
#include "url.h"
@ -111,15 +112,16 @@ TCHAR *Curl_auth_build_spn(const char *service, const char *host,
*
* Returns TRUE on success; otherwise FALSE.
*/
bool Curl_auth_user_contains_domain(const char *user)
bool Curl_auth_user_contains_domain(struct Curl_creds *creds)
{
bool valid = FALSE;
if(user && *user) {
if(Curl_creds_has_user(creds)) {
/* Check we have a domain name or UPN present */
const char *p = strpbrk(user, "\\/@");
const char *p = strpbrk(creds->user, "\\/@");
valid = (p != NULL && p > user && p < user + strlen(user) - 1);
valid = (p != NULL) && (p > creds->user) &&
(p < (creds->user + strlen(creds->user) - 1));
}
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
else
@ -133,14 +135,12 @@ bool Curl_auth_user_contains_domain(const char *user)
/*
* Curl_auth_allowed_to_host() tells if authentication, cookies or other
* "sensitive data" can (still) be sent to this host.
* "sensitive data" can be sent to the connection's origin.
*/
bool Curl_auth_allowed_to_host(struct Curl_easy *data)
{
return !data->state.this_is_a_follow ||
data->set.allow_auth_to_other_hosts ||
(data->state.first_origin &&
Curl_peer_equal(data->state.first_origin, data->conn->origin));
return data->set.allow_auth_to_other_hosts ||
Curl_peer_equal(data->state.initial_origin, data->conn->origin);
}
#ifdef USE_NTLM

View file

@ -30,6 +30,7 @@
#include "urldata.h"
struct Curl_easy;
struct Curl_creds;
struct connectdata;
#ifndef CURL_DISABLE_DIGEST_AUTH
@ -69,12 +70,10 @@ TCHAR *Curl_auth_build_spn(const char *service, const char *host,
#endif
/* This is used to test if the user contains a Windows domain name */
bool Curl_auth_user_contains_domain(const char *user);
bool Curl_auth_user_contains_domain(struct Curl_creds *creds);
/* This is used to generate a PLAIN cleartext message */
CURLcode Curl_auth_create_plain_message(const char *authzid,
const char *authcid,
const char *passwd,
CURLcode Curl_auth_create_plain_message(struct Curl_creds *creds,
struct bufref *out);
/* This is used to generate a LOGIN cleartext message */
@ -86,8 +85,7 @@ void Curl_auth_create_external_message(const char *user, struct bufref *out);
#ifndef CURL_DISABLE_DIGEST_AUTH
/* This is used to generate a CRAM-MD5 response message */
CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct bufref *out);
/* This is used to evaluate if DIGEST is supported */
@ -96,8 +94,7 @@ bool Curl_auth_is_digest_supported(void);
/* This is used to generate a base64 encoded DIGEST-MD5 response message */
CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
const struct bufref *chlg,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
struct bufref *out);
@ -107,8 +104,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
/* This is used to generate an HTTP DIGEST response message */
CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const unsigned char *request,
const unsigned char *uripath,
struct digestdata *digest,
@ -140,8 +136,7 @@ bool Curl_auth_gsasl_is_supported(struct Curl_easy *data,
struct gsasldata *gsasl);
/* This is used to start a gsasl method */
CURLcode Curl_auth_gsasl_start(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct gsasldata *gsasl);
/* This is used to process and generate a new SASL token */
@ -197,8 +192,7 @@ void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm);
/* This is used to generate a base64 encoded NTLM type-1 message */
CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
struct ntlmdata *ntlm,
@ -211,8 +205,7 @@ CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data,
/* This is used to generate a base64 encoded NTLM type-3 message */
CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
struct ntlmdata *ntlm,
struct bufref *out);
@ -221,15 +214,13 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
#endif /* USE_NTLM */
/* This is used to generate a base64 encoded OAuth 2.0 message */
CURLcode Curl_auth_create_oauth_bearer_message(const char *user,
CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_creds *creds,
const char *host,
const long port,
const char *bearer,
struct bufref *out);
/* This is used to generate a base64 encoded XOAuth 2.0 message */
CURLcode Curl_auth_create_xoauth_bearer_message(const char *user,
const char *bearer,
CURLcode Curl_auth_create_xoauth_bearer_message(struct Curl_creds *creds,
struct bufref *out);
#ifdef USE_KERBEROS5
@ -260,8 +251,7 @@ bool Curl_auth_is_gssapi_supported(void);
/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) user token
message */
CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
struct Curl_creds *creds,
const char *service,
const char *host,
const bool mutual_auth,
@ -330,8 +320,7 @@ Curl_auth_nego_get(struct connectdata *conn, bool proxy);
/* This is used to decode a base64 encoded SPNEGO (Negotiate) challenge
message */
CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
const char *user,
const char *password,
struct Curl_creds *creds,
const char *service,
const char *host,
const char *chlg64,