diff options
author | Kyle L. Huff <kyle.huff@curetheitch.com> | 2013-08-25 13:18:59 -0400 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2013-08-26 20:43:02 +0100 |
commit | e7dcc454c67a2fa9069b6393b7591a3d949049b4 (patch) | |
tree | f629a458a38efa7cb5b22fad0fd492f95009745a | |
parent | 84789e12fb1d6d22532bd2ce7bfae3a160648a60 (diff) |
curl: added basic SASL XOAUTH2 support
Added the ability to specify an XOAUTH2 bearer token [RFC6750] via the
--bearer option.
Example usage:
curl --url "imaps://imap.gmail.com:993/INBOX/;UID=1" --ssl-reqd
--bearer ya29.AHES6Z...OMfsHYI --user username@example.com
-rw-r--r-- | src/tool_cfgable.c | 2 | ||||
-rw-r--r-- | src/tool_cfgable.h | 1 | ||||
-rw-r--r-- | src/tool_getparam.c | 12 | ||||
-rw-r--r-- | src/tool_operate.c | 3 |
4 files changed, 15 insertions, 3 deletions
diff --git a/src/tool_cfgable.c b/src/tool_cfgable.c index da11f4afe..1c55c296f 100644 --- a/src/tool_cfgable.c +++ b/src/tool_cfgable.c @@ -96,6 +96,8 @@ void free_config_fields(struct Configurable *config) Curl_safefree(config->krblevel); Curl_safefree(config->trace_dump); + Curl_safefree(config->xoauth2_bearer); + config->trace_stream = NULL; /* closed elsewhere when appropriate */ Curl_safefree(config->writeout); diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h index 144552e84..a12bdcd32 100644 --- a/src/tool_cfgable.h +++ b/src/tool_cfgable.h @@ -208,6 +208,7 @@ struct Configurable { #ifdef CURLDEBUG bool test_event_based; #endif + char *xoauth2_bearer; /* XOAUTH2 bearer token */ }; /* struct Configurable */ void free_config_fields(struct Configurable *config); diff --git a/src/tool_getparam.c b/src/tool_getparam.c index d9deb3b2b..813cc70c0 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -75,6 +75,7 @@ static const struct LongShort aliases[]= { {"*", "url", TRUE}, {"*a", "random-file", TRUE}, {"*b", "egd-file", TRUE}, + {"*B", "bearer", TRUE}, {"*c", "connect-timeout", TRUE}, {"*d", "ciphers", TRUE}, {"*e", "disable-epsv", FALSE}, @@ -498,6 +499,9 @@ ParameterError getparameter(char *flag, /* f or -long-flag */ case 'b': /* egd-file */ GetStr(&config->egd_file, nextarg); break; + case 'B': /* XOAUTH2 Bearer */ + GetStr(&config->xoauth2_bearer, nextarg); + break; case 'c': /* connect-timeout */ err = str2udouble(&config->connecttimeout, nextarg); if(err) @@ -1632,9 +1636,11 @@ ParameterError getparameter(char *flag, /* f or -long-flag */ /* user:password */ GetStr(&config->userpwd, nextarg); cleanarg(nextarg); - err = checkpasswd("host", &config->userpwd); - if(err) - return err; + if(!config->xoauth2_bearer) { + err = checkpasswd("host", &config->userpwd); + if(err) + return err; + } break; case 'U': /* Proxy user:password */ diff --git a/src/tool_operate.c b/src/tool_operate.c index 60d09ff25..a37e0c84d 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -977,6 +977,9 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[]) else if(!config->use_metalink) my_setopt(curl, CURLOPT_HEADER, config->include_headers?1L:0L); + if(config->xoauth2_bearer) + my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->xoauth2_bearer); + #if !defined(CURL_DISABLE_PROXY) { /* TODO: Make this a run-time check instead of compile-time one. */ |