X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8a14191c0a0ad15bb8f35b49748c75c1e0a8c2f4..f28cfc5260eb87df0f6f106c837b3e2de640a9bf:/uip/mhlogin.c diff --git a/uip/mhlogin.c b/uip/mhlogin.c index 6c17134c..5e6d1615 100644 --- a/uip/mhlogin.c +++ b/uip/mhlogin.c @@ -1,5 +1,4 @@ -/* - * mhlogin.c -- login to external (OAuth) services +/* mhlogin.c -- login to external (OAuth) services * * This code is Copyright (c) 2014, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -10,9 +9,18 @@ #include #include -#include -#include -#include +#include "h/mh.h" +#include "sbr/getarguments.h" +#include "sbr/concat.h" +#include "sbr/smatch.h" +#include "sbr/ambigsw.h" +#include "sbr/print_version.h" +#include "sbr/print_help.h" +#include "sbr/error.h" +#include "h/done.h" +#include "h/utils.h" +#include "h/oauth.h" +#include "sbr/lock_file.h" #define MHLOGIN_SWITCHES \ X("user username", 0, USERSW) \ @@ -56,25 +64,25 @@ do_login(const char *svc, const char *user, const char *browser, int snoop) const char *url; if (svc == NULL) { - adios(NULL, "missing -authservice switch"); + die("missing -authservice switch"); } if (user == NULL) { - adios(NULL, "missing -user switch"); + die("missing -user switch"); } if (!mh_oauth_new(&ctx, svc)) { - adios(NULL, mh_oauth_get_err_string(ctx)); + die("%s", mh_oauth_get_err_string(ctx)); } if (snoop) { mh_oauth_log_to(stderr, ctx); } - fn = mh_xstrdup(mh_oauth_cred_fn(svc)); + fn = mh_oauth_cred_fn(svc); if ((url = mh_oauth_get_authorize_url(ctx)) == NULL) { - adios(NULL, mh_oauth_get_err_string(ctx)); + die("%s", mh_oauth_get_err_string(ctx)); } if (browser) { @@ -97,7 +105,7 @@ do_login(const char *svc, const char *user, const char *browser, int snoop) " to access %s:\n\n%s\n\n", mh_oauth_svc_display_name(ctx), url); } - printf("Enter the authorization code: "); + fputs("Enter the authorization code: ", stdout); fflush(stdout); code = geta(); @@ -110,7 +118,7 @@ do_login(const char *svc, const char *user, const char *browser, int snoop) } if (cred == NULL) { inform("error exchanging code for OAuth2 token"); - adios(NULL, mh_oauth_get_err_string(ctx)); + die("%s", mh_oauth_get_err_string(ctx)); } cred_file = lkfopendata(fn, "r+", &failed_to_lock); @@ -121,7 +129,7 @@ do_login(const char *svc, const char *user, const char *browser, int snoop) adios(fn, "oops"); } if (!mh_oauth_cred_save(cred_file, cred, user)) { - adios(NULL, mh_oauth_get_err_string(ctx)); + die("%s", mh_oauth_get_err_string(ctx)); } if (lkfclosedata(cred_file, fn) != 0) { adios (fn, "oops"); @@ -142,7 +150,7 @@ main(int argc, char **argv) const char *user = NULL, *saslmech = NULL, *svc = NULL, *browser = NULL; int snoop = 0; - if (nmh_init(argv[0], 1)) { return 1; } + if (nmh_init(argv[0], true, true)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -155,7 +163,7 @@ main(int argc, char **argv) ambigsw (cp, switches); done (1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + die("-%s unknown", cp); case HELPSW: snprintf(help, sizeof(help), "%s [switches]", @@ -168,22 +176,22 @@ main(int argc, char **argv) case USERSW: if (!(user = *argp++) || *user == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case SASLMECHSW: if (!(saslmech = *argp++) || *saslmech == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case AUTHSERVICESW: if (!(svc = *argp++) || *svc == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case BROWSERSW: if (!(browser = *argp++) || *browser == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); continue; case SNOOPSW: @@ -191,12 +199,12 @@ main(int argc, char **argv) continue; } } - adios(NULL, "extraneous arguments"); + die("extraneous arguments"); } if (saslmech && strcasecmp(saslmech, "xoauth2")) { /* xoauth is assumed */ - adios(NULL, "only -saslmech xoauth2 is supported"); + die("only -saslmech xoauth2 is supported"); } free(arguments); @@ -206,7 +214,7 @@ main(int argc, char **argv) NMH_UNUSED(svc); NMH_UNUSED(browser); NMH_UNUSED(snoop); - adios(NULL, "not built with OAuth support"); + die("not built with OAuth support"); return 1; #endif }