diff options
author | Kyle L. Huff <kyle.huff@curetheitch.com> | 2013-08-25 13:17:20 -0400 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2013-08-25 22:03:57 +0100 |
commit | 06c1bea72faabb6fad4b7ef818aafaa336c9a7aa (patch) | |
tree | 11f12873c373e217c2a5948bd1df49ee07288501 | |
parent | 19a05c908f7d8be82de6f69f533317d8a0db49dd (diff) |
options: added basic SASL XOAUTH2 support
Added the ability to specify an XOAUTH2 bearer token [RFC6750] via the
option CURLOPT_XOAUTH2_BEARER for authentication using RFC6749 "OAuth
2.0 Authorization Framework".
-rw-r--r-- | include/curl/curl.h | 3 | ||||
-rw-r--r-- | include/curl/typecheck-gcc.h | 1 | ||||
-rw-r--r-- | lib/url.c | 15 | ||||
-rw-r--r-- | lib/urldata.h | 4 |
4 files changed, 23 insertions, 0 deletions
diff --git a/include/curl/curl.h b/include/curl/curl.h index 0fb00e811..ed536d162 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -1553,6 +1553,9 @@ typedef enum { * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), + /* The XOAUTH2 bearer token */ + CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220), + CURLOPT_LASTENTRY /* the last unused */ } CURLoption; diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h index f8917e811..a9fee0c84 100644 --- a/include/curl/typecheck-gcc.h +++ b/include/curl/typecheck-gcc.h @@ -264,6 +264,7 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist, (option) == CURLOPT_RTSP_SESSION_ID || \ (option) == CURLOPT_RTSP_STREAM_URI || \ (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ 0) /* evaluates to true if option takes a curl_write_callback argument */ @@ -1569,6 +1569,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, result = setstropt(&data->set.str[STRING_PASSWORD], va_arg(param, char *)); break; + case CURLOPT_XOAUTH2_BEARER: + /* + * XOAUTH2 bearer token to use in the operation + */ + result = setstropt(&data->set.str[STRING_BEARER], + va_arg(param, char *)); + break; case CURLOPT_POSTQUOTE: /* * List of RAW FTP commands to use after a transfer @@ -2488,6 +2495,7 @@ static void conn_free(struct connectdata *conn) Curl_safefree(conn->user); Curl_safefree(conn->passwd); + Curl_safefree(conn->xoauth2_bearer); Curl_safefree(conn->options); Curl_safefree(conn->proxyuser); Curl_safefree(conn->proxypasswd); @@ -5181,6 +5189,13 @@ static CURLcode create_conn(struct SessionHandle *data, } } + if(data->set.str[STRING_BEARER]) { + conn->xoauth2_bearer = strdup(data->set.str[STRING_BEARER]); + if(!conn->xoauth2_bearer) { + return CURLE_OUT_OF_MEMORY; + } + } + #ifndef CURL_DISABLE_PROXY /************************************************************* * Extract the user and password from the authentication string diff --git a/lib/urldata.h b/lib/urldata.h index dde35a9cb..7d850e1e4 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -876,6 +876,8 @@ struct connectdata { char *passwd; /* password string, allocated */ char *options; /* options string, allocated */ + char *xoauth2_bearer; /* bearer token for xoauth2, allocated */ + char *proxyuser; /* proxy user name string, allocated */ char *proxypasswd; /* proxy password string, allocated */ curl_proxytype proxytype; /* what kind of proxy that is in use */ @@ -1367,6 +1369,8 @@ enum dupstring { STRING_TLSAUTH_PASSWORD, /* TLS auth <password> */ #endif + STRING_BEARER, /* <bearer>, if used */ + /* -- end of strings -- */ STRING_LAST /* not used, just an end-of-list marker */ }; |