X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/012d05c2b62332eb400d66b806e48216d39358c6..ceaab2f46ae8fa4598b9682eaf3210cda21517c9:/uip/inc.c diff --git a/uip/inc.c b/uip/inc.c index 5f5c5096..61d7ea9b 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -49,6 +49,12 @@ # define SASLminc(a) 0 #endif +#ifndef TLS_SUPPORT +# define TLSminc(a) (a) +#else +# define TLSminc(a) 0 +#endif + #define INC_SWITCHES \ X("audit audit-file", 0, AUDSW) \ X("noaudit", 0, NAUDSW) \ @@ -58,7 +64,6 @@ X("form formatfile", 0, FORMSW) \ X("format string", 5, FMTSW) \ X("host hostname", 0, HOSTSW) \ - X("oauth service", 0, OAUTHSW) \ X("user username", 0, USERSW) \ X("pack file", 0, PACKSW) \ X("nopack", 0, NPACKSW) \ @@ -71,9 +76,12 @@ X("version", 0, VERSIONSW) \ X("help", 0, HELPSW) \ X("snoop", -5, SNOOPSW) \ - X("sasl", SASLminc(-4), SASLSW) \ - X("nosasl", SASLminc(-6), NOSASLSW) \ - X("saslmech", SASLminc(-8), SASLMECHSW) \ + X("sasl", SASLminc(5), SASLSW) \ + X("nosasl", SASLminc(3), NOSASLSW) \ + X("saslmech", SASLminc(5), SASLMECHSW) \ + X("initialtls", TLSminc(-10), INITTLSSW) \ + X("noinitialtls", TLSminc(-12), NOINITTLSSW) \ + X("authservice", SASLminc(0), AUTHSERVICESW) \ X("proxy command", 0, PROXYSW) \ #define X(sw, minchars, id) id, @@ -186,19 +194,18 @@ main (int argc, char **argv) int chgflag = 1, trnflag = 1; int noisy = 1, width = -1; int hghnum = 0, msgnum = 0; - int sasl = 0; + int sasl = 0, tls = 0; int incerr = 0; /* <0 if inc hits an error which means it should not truncate mailspool */ char *cp, *maildir = NULL, *folder = NULL; char *format = NULL, *form = NULL; char *host = NULL, *port = NULL, *user = NULL, *proxy = NULL; - char *audfile = NULL, *from = NULL, *saslmech = NULL; + char *audfile = NULL, *from = NULL, *saslmech = NULL, *auth_svc = NULL; char buf[BUFSIZ], **argp, *nfs, **arguments; struct msgs *mp = NULL; struct stat st, s1; FILE *aud = NULL; char b[PATH_MAX + 1]; char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */ - const char *oauth_svc = NULL; int nmsgs, nbytes; char *MAILHOST_env_variable; @@ -326,16 +333,6 @@ main (int argc, char **argv) adios (NULL, "missing argument to %s", argp[-2]); continue; - case OAUTHSW: -#ifdef OAUTH_SUPPORT - if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - oauth_svc = cp; -#else - adios (NULL, "not built with OAuth support"); -#endif - continue; - case USERSW: if (!(user = *argp++) || *user == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -364,6 +361,24 @@ main (int argc, char **argv) if (!(saslmech = *argp++) || *saslmech == '-') adios (NULL, "missing argument to %s", argp[-2]); continue; + + case INITTLSSW: + tls++; + continue; + + case NOINITTLSSW: + tls = 0; + continue; + + case AUTHSERVICESW: +#ifdef OAUTH_SUPPORT + if (!(auth_svc = *argp++) || *auth_svc == '-') + adios (NULL, "missing argument to %s", argp[-2]); +#else + adios (NULL, "not built with OAuth support"); +#endif + continue; + case PROXYSW: if (!(proxy = *argp++) || *proxy == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -406,11 +421,14 @@ main (int argc, char **argv) if (inc_type == INC_POP) { struct nmh_creds creds = { 0, 0, 0 }; - if (oauth_svc == NULL) { + if (auth_svc == NULL) { + if (saslmech && ! strcasecmp(saslmech, "xoauth2")) { + adios (NULL, "must specify -authservice with -saslmech xoauth2"); + } nmh_get_credentials (host, user, sasl, &creds); } else { if (user == NULL) { - adios (NULL, "must specify -user with -oauth"); + adios (NULL, "must specify -user with -saslmech xoauth2"); } creds.user = user; } @@ -419,7 +437,7 @@ main (int argc, char **argv) * initialize POP connection */ if (pop_init (host, port, creds.user, creds.password, proxy, snoop, - sasl, saslmech, oauth_svc) == NOTOK) + sasl, saslmech, tls, auth_svc) == NOTOK) adios (NULL, "%s", response); /* Check if there are any messages */ @@ -603,7 +621,7 @@ go_to_it: if (errno != ENOENT) adios (packfile, "error on file"); cp = concat ("Create file \"", packfile, "\"? ", NULL); - if (noisy && !getanswer (cp)) + if (noisy && !read_yes_or_no_if_tty (cp)) done (1); free (cp); }