Commit e7dcc454 authored by Kyle L. Huff's avatar Kyle L. Huff Committed by Steve Holme
Browse files

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
parent 84789e12
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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);
+9 −3
Original line number Diff line number Diff line
@@ -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);
      if(!config->xoauth2_bearer) {
        err = checkpasswd("host", &config->userpwd);
        if(err)
          return err;
      }
      break;
    case 'U':
      /* Proxy user:password  */
+3 −0
Original line number Diff line number Diff line
@@ -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. */