From: David Levine Date: Thu, 17 Mar 2016 01:32:48 +0000 (-0400) Subject: Added oauth support to whatnow. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/c2a69f6b1ae454f3bbcc645020bb2408e9d46612?ds=inline;hp=-c Added oauth support to whatnow. --- c2a69f6b1ae454f3bbcc645020bb2408e9d46612 diff --git a/Makefile.am b/Makefile.am index cb34b5db..0d37d5e4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -323,11 +323,11 @@ uip_burst_LDADD = $(LDADD) $(ICONVLIB) $(POSTLINK) uip_comp_SOURCES = uip/comp.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c -uip_comp_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(POSTLINK) +uip_comp_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(CURLLIB) $(POSTLINK) uip_dist_SOURCES = uip/dist.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c uip/forwsbr.c -uip_dist_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(POSTLINK) +uip_dist_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(CURLLIB) $(POSTLINK) uip_flist_SOURCES = uip/flist.c uip_flist_LDADD = $(LDADD) $(POSTLINK) @@ -337,10 +337,10 @@ uip_folder_LDADD = $(LDADD) $(POSTLINK) uip_forw_SOURCES = uip/forw.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c uip/forwsbr.c -uip_forw_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(POSTLINK) +uip_forw_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(CURLLIB) $(POSTLINK) uip_inc_SOURCES = uip/inc.c uip/scansbr.c uip/dropsbr.c uip/popsbr.c -uip_inc_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(SASLLIB) $(POSTLINK) $(CURLLIB) +uip_inc_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(SASLLIB) $(CURLLIB) $(POSTLINK) uip_install_mh_SOURCES = uip/install-mh.c uip_install_mh_LDADD = $(LDADD) $(POSTLINK) @@ -388,7 +388,7 @@ uip_mhstore_SOURCES = uip/mhstore.c uip/mhparse.c uip/mhcachesbr.c \ uip_mhstore_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK) uip_msgchk_SOURCES = uip/msgchk.c uip/popsbr.c -uip_msgchk_LDADD = $(LDADD) $(SASLLIB) $(POSTLINK) $(CURLLIB) +uip_msgchk_LDADD = $(LDADD) $(SASLLIB) $(CURLLIB) $(POSTLINK) uip_new_SOURCES = uip/new.c uip_new_LDADD = $(LDADD) $(POSTLINK) @@ -407,7 +407,7 @@ uip_refile_LDADD = $(LDADD) $(POSTLINK) uip_repl_SOURCES = uip/repl.c uip/replsbr.c uip/whatnowproc.c uip/whatnowsbr.c \ uip/sendsbr.c uip/annosbr.c uip/distsbr.c -uip_repl_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(POSTLINK) +uip_repl_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(ICONVLIB) $(CURLLIB) $(POSTLINK) uip_rmf_SOURCES = uip/rmf.c uip_rmf_LDADD = $(LDADD) $(POSTLINK) @@ -420,7 +420,7 @@ uip_scan_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK) uip_send_SOURCES = uip/send.c uip/sendsbr.c uip/annosbr.c \ uip/distsbr.c -uip_send_LDADD = $(LDADD) $(POSTLINK) $(CURLLIB) +uip_send_LDADD = $(LDADD) $(CURLLIB) $(POSTLINK) uip_show_SOURCES = uip/show.c uip/mhlsbr.c uip_show_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(POSTLINK) @@ -430,7 +430,7 @@ uip_sortm_LDADD = $(LDADD) $(POSTLINK) uip_whatnow_SOURCES = uip/whatnow.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c -uip_whatnow_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(POSTLINK) +uip_whatnow_LDADD = $(LDADD) $(READLINELIB) $(TERMLIB) $(CURLLIB) $(POSTLINK) uip_whom_SOURCES = uip/whom.c uip/distsbr.c uip_whom_LDADD = $(LDADD) $(POSTLINK) diff --git a/uip/send.c b/uip/send.c index 8b64948d..491efbb1 100644 --- a/uip/send.c +++ b/uip/send.c @@ -9,10 +9,12 @@ #include #include - -#include #include +#ifdef OAUTH_SUPPORT +# include +#endif + #ifndef CYRUS_SASL # define SASLminc(a) (a) #else /* CYRUS_SASL */ diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index e8131262..223d3f0f 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -44,6 +44,10 @@ #include #include +#ifdef OAUTH_SUPPORT +# include +#endif + #define WHATNOW_SWITCHES \ X("draftfolder +folder", 0, DFOLDSW) \ X("draftmessage msg", 0, DMSGSW) \ @@ -945,7 +949,8 @@ buildfile (char **argp, char *file) X("nosasl", SASLminc(-6), NOSASLSW) \ X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \ X("saslmech", SASLminc(-5), SASLMECHSW) \ - X("user", SASLminc(-4), USERSW) \ + X("oauth service", 5, OAUTHSW) \ + X("user username", SASLminc(-4), USERSW) \ X("attach fieldname", 6, SNDATTACHSW) \ X("noattach", 0, SNDNOATTACHSW) \ X("attachformat", 7, SNDATTACHFORMAT) \ @@ -956,7 +961,6 @@ buildfile (char **argp, char *file) X("sendmail program", 0, MTSSM) \ X("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \ X("messageid localname|random", 2, MESSAGEIDSW) \ - X("oauth service", 5, OAUTHSW) \ #define X(sw, minchars, id) id, DEFINE_SWITCH_ENUM(SEND); @@ -986,6 +990,8 @@ sendit (char *sp, char **arg, char *file, int pushed) int vecp, n = 1; char *cp, buf[BUFSIZ], **argp, *program; char **arguments, *savearg[MAXARGS], **vec; + const char *user = NULL, *oauth_svc = NULL; + int snoop = 0; struct stat st; #ifndef lint @@ -1126,7 +1132,6 @@ sendit (char *sp, char **arg, char *file, int pushed) case NMSGDSW: case WATCSW: case NWATCSW: - case SNOOPSW: case SASLSW: case NOSASLSW: case TLSSW: @@ -1135,6 +1140,11 @@ sendit (char *sp, char **arg, char *file, int pushed) vec[vecp++] = --cp; continue; + case SNOOPSW: + snoop++; + vec[vecp++] = --cp; + continue; + case ALIASW: case FILTSW: case WIDTHSW: @@ -1147,13 +1157,25 @@ sendit (char *sp, char **arg, char *file, int pushed) case MTSSM: case MTSSW: case MESSAGEIDSW: - case OAUTHSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { advise (NULL, "missing argument to %s", argp[-2]); return; } vec[vecp++] = cp; + user = cp; + continue; + + case OAUTHSW: +#ifdef OAUTH_SUPPORT + if (!(cp = *argp++) || *cp == '-') + adios (NULL, "missing argument to %s", argp[-2]); + oauth_svc = cp; +#else + NMH_UNUSED (user); + NMH_UNUSED (oauth_svc); + adios (NULL, "not built with OAuth support"); +#endif continue; case SDRFSW: @@ -1222,6 +1244,18 @@ sendit (char *sp, char **arg, char *file, int pushed) distfile = NULL; } +#ifdef OAUTH_SUPPORT + if (oauth_svc != NULL) { + if (user == NULL) { + adios (NULL, "must specify -user with -oauth"); + } + + vec[vecp++] = "-oauth"; + vec[vecp++] = mh_oauth_do_xoauth (user, oauth_svc, + snoop ? stderr : NULL); + } +#endif /* OAUTH_SUPPORT */ + if (altmsg == NULL || stat (altmsg, &st) == NOTOK) { st.st_mtime = 0; st.st_dev = 0;