X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c08cb60fe34b42b0a83bc88b57fd41b07793863f..8f802697c8d9c4fc52e4d0ce4facf643358aac1a:/sbr/oauth_prof.c diff --git a/sbr/oauth_prof.c b/sbr/oauth_prof.c index 26132fa2..13e5b973 100644 --- a/sbr/oauth_prof.c +++ b/sbr/oauth_prof.c @@ -5,7 +5,10 @@ * complete copyright information. */ -#include +#include "h/mh.h" +#include "concat.h" +#include "getcpy.h" +#include "context_find.h" #ifdef OAUTH_SUPPORT @@ -18,8 +21,8 @@ #include #include -#include -#include +#include "h/oauth.h" +#include "h/utils.h" #include "m_maildir.h" static const struct mh_oauth_service_info SERVICES[] = { @@ -124,35 +127,28 @@ mh_oauth_get_service_info(const char *svc_name, mh_oauth_service_info *svcinfo, } } - if (!update_svc(svcinfo, svc_name, errbuf, errbuflen)) { - return false; - } - - return true; + return update_svc(svcinfo, svc_name, errbuf, errbuflen); } -const char * +/* Return value must be free(3)'d. */ +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; + char *key = mh_oauth_node_name_for_svc("credential-file", svc); + char *value = context_find(key); + free(key); + + bool found = value; + if (found) { + if (*value == '/') + return mh_xstrdup(value); + } else + value = concat("oauth-", svc, NULL); + + const char *md = m_maildir(value); + if (!found) + free(value); + + return mh_xstrdup(md); } #endif