sasl: added basic SASL XOAUTH2 support
authorKyle L. Huff <kyle.huff@curetheitch.com>
Sun, 25 Aug 2013 17:17:01 +0000 (13:17 -0400)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 25 Aug 2013 21:02:38 +0000 (22:02 +0100)
Added the ability to generated a base64 encoded XOAUTH2 token
containing: "user=<username>^Aauth=Bearer <bearer token>^A^A"
as per RFC6749 "OAuth 2.0 Authorization Framework".

lib/curl_sasl.c
lib/curl_sasl.h

index 924be4bbc9e670d628c743b3d67d489a5502e552..b3ffc66156ddaa14901917807937ff58213c35bd 100644 (file)
@@ -22,6 +22,7 @@
  * RFC2831 DIGEST-MD5 authentication
  * RFC4422 Simple Authentication and Security Layer (SASL)
  * RFC4616 PLAIN authentication
+ * RFC6749 OAuth 2.0 Authorization Framework
  *
  ***************************************************************************/
 
@@ -477,6 +478,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()
  *
index 22dcf805b5169df3e23467ae5fa696f621cd2f06..964e94cad016f71da0dcc7a6e7c547a78ff5705e 100644 (file)
@@ -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);