X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/63fc8244f0ddecdbdacc21ab797acd2f466a2823..e65127948dd214fcfc807d2ff15f871aaf5904e1:/sbr/oauth.c diff --git a/sbr/oauth.c b/sbr/oauth.c index e86aefe4..85fe7146 100644 --- a/sbr/oauth.c +++ b/sbr/oauth.c @@ -127,23 +127,22 @@ static boolean get_json_strings(const char *, size_t, FILE *, ...); static boolean make_query_url(char *, size_t, CURL *, const char *, ...); static boolean post(struct curl_ctx *, const char *, const char *); -char * -mh_oauth_do_xoauth(const char *user, const char *svc, FILE *log) +int +mh_oauth_do_xoauth(const char *user, const char *svc, unsigned char **oauth_res, + size_t *oauth_res_len, FILE *log) { mh_oauth_ctx *ctx; mh_oauth_cred *cred; char *fn; int failed_to_lock = 0; FILE *fp; - size_t client_res_len; char *client_res; - char *client_res_b64; if (!mh_oauth_new (&ctx, svc)) adios(NULL, mh_oauth_get_err_string(ctx)); if (log != NULL) mh_oauth_log_to(stderr, ctx); - fn = getcpy(mh_oauth_cred_fn(ctx)); + fn = getcpy(mh_oauth_cred_fn(svc)); fp = lkfopendata(fn, "r+", &failed_to_lock); if (fp == NULL) { if (errno == ENOENT) { @@ -183,18 +182,14 @@ mh_oauth_do_xoauth(const char *user, const char *svc, FILE *log) free(fn); /* XXX writeBase64raw modifies the source buffer! make a copy */ - client_res = getcpy(mh_oauth_sasl_client_response(&client_res_len, user, + client_res = getcpy(mh_oauth_sasl_client_response(oauth_res_len, user, cred)); mh_oauth_cred_free(cred); mh_oauth_free(ctx); - client_res_b64 = mh_xmalloc(((((client_res_len) + 2) / 3 ) * 4) + 1); - if (writeBase64raw((unsigned char *)client_res, client_res_len, - (unsigned char *)client_res_b64) != OK) { - adios(NULL, "base64 encoding of XOAUTH2 client response failed"); - } - free(client_res); - return client_res_b64; + *oauth_res = (unsigned char *) client_res; + + return OK; } static boolean @@ -569,36 +564,6 @@ mh_oauth_cred_free(mh_oauth_cred *cred) free(cred); } -const char * -mh_oauth_cred_fn(mh_oauth_ctx *ctx) -{ - char *result, *result_if_allocated; - const char *svc = ctx->svc.name; - - char *component = mh_oauth_node_name_for_svc("credential-file", svc); - result = context_find(component); - free(component); - - if (result == NULL) { - result = mh_xmalloc(sizeof "oauth-" - 1 - + strlen(svc) - + 1 /* '\0' */); - sprintf(result, "oauth-%s", svc); - result_if_allocated = result; - } else { - result_if_allocated = NULL; - } - - if (result[0] != '/') { - const char *tmp = m_maildir(result); - free(result_if_allocated); - result = getcpy(tmp); - } - - free(ctx->cred_fn); - return ctx->cred_fn = result; -} - /* for loading multi-user cred files */ struct user_creds { mh_oauth_cred *creds; @@ -1165,5 +1130,4 @@ get_json_strings(const char *input, size_t input_len, FILE *log, ...) free(tokens); return result; } - #endif