X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/63fc8244f0ddecdbdacc21ab797acd2f466a2823..d0bd505e1a9b0bc2fc107446dcb615bf55c42e81:/sbr/oauth_prof.c?ds=inline diff --git a/sbr/oauth_prof.c b/sbr/oauth_prof.c index 4f9e2a2f..7dbd4fdb 100644 --- a/sbr/oauth_prof.c +++ b/sbr/oauth_prof.c @@ -1,4 +1,5 @@ -/* +/* oauth_prof.c -- OAuth 2.0 implementation for XOAUTH2 in SMTP and POP3. + * * This code is Copyright (c) 2014, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -19,6 +20,7 @@ #include #include +#include "m_maildir.h" static const struct mh_oauth_service_info SERVICES[] = { /* https://developers.google.com/accounts/docs/OAuth2InstalledApp */ @@ -56,14 +58,8 @@ copy_svc(mh_oauth_service_info *to, const mh_oauth_service_info *from) char * mh_oauth_node_name_for_svc(const char *base_name, const char *svc) { - char *result = mh_xmalloc(sizeof "oauth-" - 1 - + strlen(svc) - + 1 /* '-' */ - + strlen(base_name) - + 1 /* '\0' */); - sprintf(result, "oauth-%s-%s", svc, base_name); /* TODO: s/_/-/g ? */ - return result; + return concat("oauth-", svc, "-", base_name, NULL); } /* Update one service_info field if overridden in profile. */ @@ -74,7 +70,7 @@ update_svc_field(char **field, const char *base_name, const char *svc) const char *value = context_find(name); if (value != NULL) { free(*field); - *field = getcpy(value); + *field = mh_xstrdup(value); } free(name); } @@ -134,4 +130,29 @@ mh_oauth_get_service_info(const char *svc_name, mh_oauth_service_info *svcinfo, return TRUE; } + +const char * +mh_oauth_cred_fn(const char *svc) +{ + char *result, *result_if_allocated; + + char *component = mh_oauth_node_name_for_svc("credential-file", svc); + result = context_find(component); + free(component); + + if (result == NULL) { + result = concat("oauth-", svc, NULL); + 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); + } + + return result; +} #endif