curl: added basic SASL XOAUTH2 support
authorKyle L. Huff <kyle.huff@curetheitch.com>
Sun, 25 Aug 2013 17:18:59 +0000 (13:18 -0400)
committerSteve Holme <steve_holme@hotmail.com>
Mon, 26 Aug 2013 19:43:02 +0000 (20:43 +0100)
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

src/tool_cfgable.c
src/tool_cfgable.h
src/tool_getparam.c
src/tool_operate.c

index da11f4a..1c55c29 100644 (file)
@@ -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);
index 144552e..a12bdcd 100644 (file)
@@ -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);
index d9deb3b..813cc70 100644 (file)
@@ -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  */
index 60d09ff..a37e0c8 100644 (file)
@@ -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. */