]> diplodocus.org Git - nmh/blobdiff - uip/inc.c
Add basic support for the STLS command in POP
[nmh] / uip / inc.c
index d65c46fbad8eb54f56428614005d8cea2750d061..dc49337d25dfc7371be1059493d0d8f7fdae5b50 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
  */
 #endif
 
-#include <h/mh.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "sbr/fmt_new.h"
+#include "sbr/dtime.h"
+#include "scansbr.h"
+#include "sbr/m_name.h"
+#include "sbr/m_gmprot.h"
+#include "sbr/getarguments.h"
+#include "sbr/concat.h"
+#include "sbr/seq_setunseen.h"
+#include "sbr/seq_setcur.h"
+#include "sbr/seq_save.h"
+#include "sbr/smatch.h"
+#include "sbr/getfolder.h"
+#include "sbr/ext_hook.h"
+#include "sbr/folder_read.h"
+#include "sbr/folder_realloc.h"
+#include "sbr/folder_free.h"
+#include "sbr/context_save.h"
+#include "sbr/context_replace.h"
+#include "sbr/context_find.h"
+#include "sbr/ambigsw.h"
+#include "sbr/path.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/utils.h"
 #include <fcntl.h>
-#include <h/dropsbr.h>
-#include <h/popsbr.h>
-#include <h/fmt_scan.h>
-#include <h/scansbr.h>
-#include <h/signals.h>
-#include <h/tws.h>
-#include <h/mts.h>
+#include "h/dropsbr.h"
+#include "popsbr.h"
+#include "h/fmt_scan.h"
+#include "h/signals.h"
+#include "h/tws.h"
+#include "h/mts.h"
 #include "h/done.h"
 #include "sbr/lock_file.h"
 #include "sbr/m_maildir.h"
@@ -73,6 +96,7 @@
     X("sasl", 0, SASLSW) \
     X("nosasl", 0, NOSASLSW) \
     X("saslmech", 0, SASLMECHSW) \
+    X("tls", TLSminc(-3), TLSSW) \
     X("initialtls", TLSminc(-10), INITTLSSW) \
     X("notls", TLSminc(-5), NOTLSSW) \
     X("certverify", TLSminc(-10), CERTVERSW) \
@@ -99,7 +123,7 @@ static struct Maildir_entry {
        time_t mtime;
 } *Maildir = NULL;
 static int num_maildir_entries = 0;
-static int snoop = 0;
+static bool snoop;
 
 typedef struct {
     FILE *mailout;
@@ -182,7 +206,8 @@ main (int argc, char **argv)
     int width = -1;
     int hghnum = 0, msgnum = 0;
     FILE *pf = NULL;
-    bool sasl, tls, noverify;
+    bool sasl, noverify;
+    int 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;
@@ -194,6 +219,7 @@ main (int argc, char **argv)
     FILE *aud = NULL;
     char b[PATH_MAX + 1];
     char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */
+    charstring_t scanl = NULL;
 
     int nmsgs, nbytes;
     char *MAILHOST_env_variable;
@@ -329,7 +355,7 @@ main (int argc, char **argv)
                continue;
 
            case SNOOPSW:
-               snoop++;
+               snoop = true;
                continue;
        
            case SASLSW:
@@ -344,12 +370,16 @@ main (int argc, char **argv)
                    die("missing argument to %s", argp[-2]);
                continue;
 
+           case TLSSW:
+               tls = 1;
+               continue;
+
            case INITTLSSW:
-                tls = true;
+                tls = 2;
                continue;
 
            case NOTLSSW:
-                tls = false;
+                tls = 0;
                continue;
 
            case CERTVERSW:
@@ -410,8 +440,10 @@ main (int argc, char **argv)
            }
        }
 
-       if (tls)
-           tlsflag |= P_INITTLS;
+       if (tls == 1)
+           tlsflag = P_STARTTLS;
+       else if (tls == 2)
+           tlsflag = P_INITTLS;
 
        if (noverify)
            tlsflag |= P_NOVERIFY;
@@ -590,7 +622,6 @@ main (int argc, char **argv)
 
         hghnum = msgnum = mp->hghmsg;
        for (i = 1; i <= nmsgs; i++) {
-           charstring_t scanl = NULL;
 
            msgnum++;
             cp = mh_xstrdup(m_name (msgnum));
@@ -632,7 +663,9 @@ main (int argc, char **argv)
                    fflush (stdout);
                break;
            }
-           charstring_free (scanl);
+
+           if (scanl)
+               charstring_clear (scanl);
 
             if (ferror(pf) || fclose (pf)) {
                 int e = errno;
@@ -649,6 +682,9 @@ main (int argc, char **argv)
            scan_finished();
        }
 
+       charstring_free (scanl);
+       scanl = NULL;
+
        if (pop_quit () == NOTOK)
            die("%s", response);
 
@@ -658,8 +694,6 @@ main (int argc, char **argv)
        scan_detect_mbox_style (in);            /* the MAGIC invocation... */
        hghnum = msgnum = mp->hghmsg;
        for (;;) {
-           charstring_t scanl = NULL;
-
            /* create scanline for new message */
            switch (incerr = scan (in, msgnum + 1, msgnum + 1, nfs, width,
                              msgnum == hghnum && chgflag, 1, NULL, 0L, noisy,
@@ -696,16 +730,18 @@ main (int argc, char **argv)
                if (noisy)
                    fflush (stdout);
 
+               charstring_clear (scanl);
                msgnum++;
                continue;
            }
-           charstring_free (scanl);
 
            /* If we get here there was some sort of error from scan(),
             * so stop processing anything more from the spool.
             */
            break;
        }
+       charstring_free (scanl);
+       scanl = NULL;
 
     } else {
         /* Mail from Maildir. */
@@ -715,8 +751,6 @@ main (int argc, char **argv)
 
        hghnum = msgnum = mp->hghmsg;
        for (i = 0; i < num_maildir_entries; i++) {
-           charstring_t scanl = NULL;
-
            msgnum++;
 
            sp = Maildir[i].filename;
@@ -780,7 +814,7 @@ main (int argc, char **argv)
                    fflush (stdout);
                break;
            }
-           charstring_free (scanl);
+           charstring_clear (scanl);
 
            if (ferror(pf) || fclose (pf)) {
                int e = errno;
@@ -798,6 +832,8 @@ main (int argc, char **argv)
            scan_finished();
        }
        free (Maildir); /* From now on Maildir is just a flag - don't dref! */
+       charstring_free (scanl);
+       scanl = NULL;
     }
 
     scan_finished ();