X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8e0f9bd3daae9d05dec58026d5a5924367e4e874..96170cff6dc485c44c89a949cc9f407db7079451:/uip/inc.c diff --git a/uip/inc.c b/uip/inc.c index a47b3367..015fbab5 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) \ @@ -69,11 +75,13 @@ X("width columns", 0, WIDTHSW) \ 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("authservice", SASLminc(-11), AUTHSERVICESW) \ + X("snoop", 0, SNOOPSW) \ + X("sasl", SASLminc(5), SASLSW) \ + X("nosasl", SASLminc(3), NOSASLSW) \ + X("saslmech", SASLminc(5), SASLMECHSW) \ + X("initialtls", TLSminc(-10), INITTLSSW) \ + X("notls", TLSminc(-12), NOTLSSW) \ + X("authservice", SASLminc(0), AUTHSERVICESW) \ X("proxy command", 0, PROXYSW) \ #define X(sw, minchars, id) id, @@ -186,7 +194,7 @@ 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; @@ -211,7 +219,7 @@ main (int argc, char **argv) if (nmh_init(argv[0], 1)) { return 1; } - mts_init (invo_name); + mts_init (); arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -234,13 +242,13 @@ main (int argc, char **argv) while ((cp = *argp++)) { if (*cp == '-') { switch (smatch (++cp, switches)) { - case AMBIGSW: + case AMBIGSW: ambigsw (cp, switches); done (1); - case UNKWNSW: + case UNKWNSW: adios (NULL, "-%s unknown", cp); - case HELPSW: + case HELPSW: snprintf (buf, sizeof(buf), "%s [+folder] [switches]", invo_name); print_help (buf, switches, 1); done (0); @@ -248,19 +256,19 @@ main (int argc, char **argv) print_version(invo_name); done (0); - case AUDSW: + case AUDSW: if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); audfile = getcpy (m_maildir (cp)); continue; - case NAUDSW: + case NAUDSW: audfile = NULL; continue; - case CHGSW: + case CHGSW: chgflag++; continue; - case NCHGSW: + case NCHGSW: chgflag = 0; continue; @@ -271,14 +279,14 @@ main (int argc, char **argv) * 1 by default (truncating is default) * 0 if -notruncate is given */ - case TRNCSW: + case TRNCSW: trnflag = 2; continue; - case NTRNCSW: + case NTRNCSW: trnflag = 0; continue; - case FILESW: + case FILESW: if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); from = path (cp, TFILE); @@ -291,25 +299,25 @@ main (int argc, char **argv) trnflag = 0; continue; - case SILSW: + case SILSW: noisy = 0; continue; - case NSILSW: + case NSILSW: noisy++; continue; - case FORMSW: + case FORMSW: if (!(form = *argp++) || *form == '-') adios (NULL, "missing argument to %s", argp[-2]); format = NULL; continue; - case FMTSW: + case FMTSW: if (!(format = *argp++) || *format == '-') adios (NULL, "missing argument to %s", argp[-2]); form = NULL; continue; - case WIDTHSW: + case WIDTHSW: if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); width = atoi (cp); @@ -354,6 +362,14 @@ main (int argc, char **argv) adios (NULL, "missing argument to %s", argp[-2]); continue; + case INITTLSSW: + tls++; + continue; + + case NOTLSSW: + tls = 0; + continue; + case AUTHSERVICESW: #ifdef OAUTH_SUPPORT if (!(auth_svc = *argp++) || *auth_svc == '-') @@ -421,7 +437,7 @@ main (int argc, char **argv) * initialize POP connection */ if (pop_init (host, port, creds.user, creds.password, proxy, snoop, - sasl, saslmech, auth_svc) == NOTOK) + sasl, saslmech, tls, auth_svc) == NOTOK) adios (NULL, "%s", response); /* Check if there are any messages */ @@ -605,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); } @@ -657,7 +673,7 @@ go_to_it: switch (incerr = scan (pf, msgnum, 0, nfs, width, packfile ? 0 : msgnum == mp->hghmsg + 1 && chgflag, 1, NULL, stop - start, noisy, &scanl)) { - case SCNEOF: + case SCNEOF: printf ("%*d empty\n", DMAXFOLDER, msgnum); break; @@ -668,12 +684,12 @@ go_to_it: /* fall thru */ case SCNERR: - case SCNNUM: + case SCNNUM: break; - case SCNMSG: + case SCNMSG: case SCNENC: - default: + default: if (aud) fputs (charstring_buffer (scanl), aud); if (noisy) @@ -733,7 +749,7 @@ go_to_it: msgnum == hghnum && chgflag, 1, NULL, 0L, noisy, &scanl)) { case SCNFAT: - case SCNEOF: + case SCNEOF: break; case SCNERR: @@ -742,11 +758,11 @@ go_to_it: advise (NULL, "aborted!"); /* doesn't clean up locks! */ break; - case SCNNUM: + case SCNNUM: advise (NULL, "BUG in %s, number out of range", invo_name); break; - default: + default: advise (NULL, "BUG in %s, scan() botch (%d)", invo_name, incerr); break; @@ -807,7 +823,7 @@ go_to_it: } fclose (sf); sf = NULL; - } + } if (pf == NULL && (pf = fopen (cp, "r")) == NULL) adios (cp, "not available"); chmod (cp, m_gmprot ()); @@ -816,7 +832,7 @@ go_to_it: switch (incerr = scan (pf, msgnum, 0, nfs, width, msgnum == mp->hghmsg + 1 && chgflag, 1, NULL, stop - start, noisy, &scanl)) { - case SCNEOF: + case SCNEOF: printf ("%*d empty\n", DMAXFOLDER, msgnum); break; @@ -827,12 +843,12 @@ go_to_it: /* fall thru */ case SCNERR: - case SCNNUM: + case SCNNUM: break; - case SCNMSG: + case SCNMSG: case SCNENC: - default: + default: /* * Run the external program hook on the message. */