diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/curl_sasl.c | 35 | ||||
| -rw-r--r-- | lib/curl_sasl.h | 8 | 
2 files changed, 43 insertions, 0 deletions
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c index 924be4bbc..b3ffc6615 100644 --- a/lib/curl_sasl.c +++ b/lib/curl_sasl.c @@ -22,6 +22,7 @@   * RFC2831 DIGEST-MD5 authentication   * RFC4422 Simple Authentication and Security Layer (SASL)   * RFC4616 PLAIN authentication + * RFC6749 OAuth 2.0 Authorization Framework   *   ***************************************************************************/ @@ -478,6 +479,40 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,  #endif /* USE_NTLM */  /* + * Curl_sasl_create_xoauth2_message() + * + * This is used to generate an already encoded XOAUTH2 message ready + * for sending to the recipient. + * + * Parameters: + * + * data    [in]     - The session handle. + * user    [in]     - The user name. + * bearer  [in]     - The XOAUTH Bearer token. + * outptr  [in/out] - The address where a pointer to newly allocated memory + *                    holding the result will be stored upon completion. + * outlen  [out]    - The length of the output message. + * + * Returns CURLE_OK on success. + */ +CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data, +                                          const char *user, +                                          const char *bearer, +                                          char **outptr, size_t *outlen) +{ +  char *xoauth; + +  xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer); + +  if(!xoauth) +    return CURLE_OUT_OF_MEMORY; + +  /* Base64 encode the reply */ +  return Curl_base64_encode(data, xoauth, strlen(xoauth), outptr, +                            outlen); +} + +/*   * Curl_sasl_cleanup()   *   * This is used to cleanup any libraries or curl modules used by the sasl diff --git a/lib/curl_sasl.h b/lib/curl_sasl.h index 22dcf805b..964e94cad 100644 --- a/lib/curl_sasl.h +++ b/lib/curl_sasl.h @@ -32,6 +32,7 @@  #define SASL_MECH_GSSAPI        (1 << 4)  #define SASL_MECH_EXTERNAL      (1 << 5)  #define SASL_MECH_NTLM          (1 << 6) +#define SASL_MECH_XOAUTH2       (1 << 7)  /* Authentication mechanism values */  #define SASL_AUTH_NONE          0 @@ -85,6 +86,13 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,  #endif /* USE_NTLM */ +/* This is used to generate a base64 encoded XOAUTH2 authentication message +   containing the user name and bearer token */ +CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data, +                                          const char *user, +                                          const char *bearer, +                                          char **outptr, size_t *outlen); +  /* This is used to cleanup any libraries or curl modules used by the sasl     functions */  void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused);  | 
