summaryrefslogtreecommitdiff
path: root/lib/vauth/gsasl.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vauth/gsasl.c')
-rw-r--r--lib/vauth/gsasl.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/lib/vauth/gsasl.c b/lib/vauth/gsasl.c
index 02a06357f..40fef53c9 100644
--- a/lib/vauth/gsasl.c
+++ b/lib/vauth/gsasl.c
@@ -28,7 +28,6 @@
#include <curl/curl.h>
-#include "curl_base64.h"
#include "vauth/vauth.h"
#include "urldata.h"
#include "sendf.h"
@@ -94,42 +93,24 @@ CURLcode Curl_auth_gsasl_start(struct Curl_easy *data,
}
CURLcode Curl_auth_gsasl_token(struct Curl_easy *data,
- const char *chlg64,
+ const struct bufref *chlg,
struct gsasldata *gsasl,
- char **outptr, size_t *outlen)
+ struct bufref *out)
{
- unsigned char *chlg = NULL;
- size_t chlglen = 0;
- CURLcode result = CURLE_OK;
int res;
char *response;
-
- if(chlg64) {
- result = Curl_base64_decode(chlg64, &chlg, &chlglen);
- if(result)
- return result;
- }
+ size_t outlen;
res = gsasl_step(gsasl->client,
- (const char *)chlg, chlglen, &response, outlen);
+ (const char *) Curl_bufref_ptr(chlg), Curl_bufref_len(chlg),
+ &response, &outlen);
if(res != GSASL_OK && res != GSASL_NEEDS_MORE) {
- if(chlg64)
- free(chlg);
failf(data, "GSASL step: %s\n", gsasl_strerror(res));
return CURLE_BAD_CONTENT_ENCODING;
}
- if(*outlen > 0) {
- result = Curl_base64_encode(data, response, 0, outptr, outlen);
- gsasl_free(response);
- }
- else {
- *outptr = strdup("");
- if(!*outptr)
- result = CURLE_OUT_OF_MEMORY;
- }
-
- return result;
+ Curl_bufref_set(out, response, outlen, gsasl_free);
+ return CURLE_OK;
}
void Curl_auth_gsasl_cleanup(struct gsasldata *gsasl)