]> diplodocus.org Git - nmh/blobdiff - uip/post.c
fdcompare.c: Move interface to own file.
[nmh] / uip / post.c
index ee0d380b037bc5d0d71d15457a8c75691a9e1f4c..67ab820c76578a225fdab91fc6c032ad99fd7423 100644 (file)
@@ -5,17 +5,25 @@
  * complete copyright information.
  */
 
-#include <h/mh.h>
+#include "h/mh.h"
+#include "sbr/context_foil.h"
+#include "sbr/readconfig.h"
+#include "sbr/ambigsw.h"
+#include "sbr/pidstatus.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/arglist.h"
+#include "sbr/error.h"
 #include <fcntl.h>
-#include <h/signals.h>
-#include <h/addrsbr.h>
-#include <h/aliasbr.h>
-#include <h/dropsbr.h>
-#include <h/mime.h>
+#include "h/signals.h"
+#include "h/addrsbr.h"
+#include "h/aliasbr.h"
+#include "h/dropsbr.h"
+#include "h/mime.h"
 #include "h/done.h"
-#include <h/utils.h>
-#include <h/tws.h>
-#include <h/mts.h>
+#include "h/utils.h"
+#include "h/tws.h"
+#include "h/mts.h"
 #include "sbr/m_mktemp.h"
 #include "sbr/message_id.h"
 
@@ -24,7 +32,7 @@
 #endif
 #include <time.h>
 
-#include <mts/smtp/smtp.h>
+#include "mts/smtp/smtp.h"
 
 #ifndef CYRUS_SASL
 # define SASLminc(a) (a)
@@ -225,27 +233,27 @@ static short fccind = 0;  /* index into fccfold[] */
 static short outputlinelen = OUTPUTLINELEN;
 
 static int pfd = NOTOK;                /* fd to write annotation list to        */
-static int recipients = 0;     /* how many people will get a copy       */
+static bool recipients;        /* how many people will get a copy       */
 static int unkadr = 0;         /* how many of those were unknown        */
 static int badadr = 0;         /* number of bad addrs                   */
-static int badmsg = 0;         /* message has bad semantics             */
-static int verbose = 0;                /* spell it out                          */
-static int format = 1;         /* format addresses                      */
-static int mime = 0;           /* use MIME-style encapsulations for Bcc */
-static int msgid = 0;          /* add msgid                             */
-static int debug = 0;          /* debugging post                        */
-static int watch = 0;          /* watch the delivery process            */
-static int whomsw = 0;         /* we are whom not post                  */
-static int checksw = 0;                /* whom -check                           */
+static bool badmsg;            /* message has bad semantics             */
+static bool verbose;           /* spell it out                          */
+static bool format = true;     /* format addresses                      */
+static bool mime;              /* use MIME-style encapsulations for Bcc */
+static bool msgid;             /* add msgid                             */
+static bool debug;             /* debugging post                        */
+static bool watch;             /* watch the delivery process            */
+static bool whomsw;            /* we are whom not post                  */
+static bool checksw;           /* whom -check                           */
 static int linepos=0;          /* putadr()'s position on the line       */
 static int nameoutput=0;       /* putadr() has output header name       */
-static int sasl=0;             /* Use SASL auth for SMTP                */
+static bool sasl;              /* Use SASL auth for SMTP                */
 static char *saslmech=NULL;    /* Force use of particular SASL mech     */
 static char *user=NULL;                /* Authenticate as this user             */
 static char *port="submission";        /* Name of server port for SMTP submission */
 static int tlsflag=0;          /* Flags to control TLS settings         */
 static int fromcount=0;                /* Count of addresses on From: header    */
-static int seensender=0;       /* Have we seen a Sender: header?        */
+static bool seensender;        /* Have we seen a Sender: header?        */
 
 static unsigned msgflags = 0;  /* what we've seen */
 
@@ -277,7 +285,7 @@ static struct mailname netaddrs;            /* network addrs   */
 static struct mailname uuaddrs;                        /* uucp addrs      */
 static struct mailname tmpaddrs;               /* temporary queue */
 
-static int snoop      = 0;
+static bool snoop;
 static char *clientsw = NULL;
 static char *serversw = NULL;
 
@@ -318,8 +326,10 @@ static int find_prefix (void);
 int
 main (int argc, char **argv)
 {
-    int state, compnum, dashstuff = 0, swnum, oauth_flag = 0, tls = -1;
-    int noverify = 0;
+    int state, compnum, dashstuff = 0, swnum;
+    bool oauth_flag = false;
+    int tls = -1;
+    bool noverify = false;
     int eai = 0; /* use Email Address Internationalization (EAI) (SMTPUTF8) */
     char *cp, *msg = NULL, **argp, **arguments, *envelope;
     char buf[NMH_BUFSIZ], name[NAMESZ], *auth_svc = NULL;
@@ -366,14 +376,14 @@ main (int argc, char **argv)
                    continue;
 
                case CHKSW: 
-                   checksw++;
+                   checksw = true;
                    continue;
                case NCHKSW: 
-                   checksw = 0;
+                   checksw = false;
                    continue;
 
                case DEBUGSW: 
-                   debug++;
+                   debug = true;
                    continue;
 
                case DISTSW:
@@ -383,17 +393,17 @@ main (int argc, char **argv)
                case FILTSW:
                    if (!(filter = *argp++) || *filter == '-')
                        die("missing argument to %s", argp[-2]);
-                   mime = 0;
+                   mime = false;
                    continue;
                case NFILTSW:
                    filter = NULL;
                    continue;
                
                case FRMTSW: 
-                   format++;
+                   format = true;
                    continue;
                case NFRMTSW: 
-                   format = 0;
+                   format = false;
                    continue;
 
                case BITSTUFFSW:
@@ -404,36 +414,36 @@ main (int argc, char **argv)
                    continue;
 
                case MIMESW:
-                   mime++;
+                   mime = true;
                    filter = NULL;
                    continue;
                case NMIMESW: 
-                   mime = 0;
+                   mime = false;
                    continue;
 
                case MSGDSW: 
-                   msgid++;
+                   msgid = true;
                    continue;
                case NMSGDSW: 
-                   msgid = 0;
+                   msgid = false;
                    continue;
 
                case VERBSW: 
-                   verbose++;
+                   verbose = true;
                    continue;
                case NVERBSW: 
-                   verbose = 0;
+                   verbose = false;
                    continue;
 
                case WATCSW: 
-                   watch++;
+                   watch = true;
                    continue;
                case NWATCSW: 
-                   watch = 0;
+                   watch = false;
                    continue;
 
                case WHOMSW: 
-                   whomsw++;
+                   whomsw = true;
                    continue;
 
                case WIDTHSW: 
@@ -459,7 +469,7 @@ main (int argc, char **argv)
                        die("missing argument to %s", argp[-2]);
                    continue;
                case SNOOPSW:
-                   snoop++;
+                   snoop = true;
                    continue;
 
                case PARTSW:
@@ -468,11 +478,11 @@ main (int argc, char **argv)
                    continue;
 
                case SASLSW:
-                   sasl++;
+                   sasl = true;
                    continue;
 
                case NOSASLSW:
-                   sasl = 0;
+                   sasl = false;
                    continue;
 
                case SASLMECHSW:
@@ -483,7 +493,7 @@ main (int argc, char **argv)
                case AUTHSERVICESW:
                    if (!(auth_svc = *argp++) || *auth_svc == '-')
                        die("missing argument to %s", argp[-2]);
-                   oauth_flag++;
+                   oauth_flag = true;
                    continue;
 
                case OAUTHCREDFILESW:
@@ -510,7 +520,7 @@ main (int argc, char **argv)
                        die("internal error: cannot map switch %s "
                               "to profile entry", argp[-2]);
 
-                   oauth_flag++;
+                   oauth_flag = true;
                    continue;
                }
 
@@ -537,11 +547,11 @@ main (int argc, char **argv)
                    continue;
 
                case CERTVERSW:
-                   noverify = 0;
+                   noverify = false;
                    continue;
 
                case NOCERTVERSW:
-                   noverify++;
+                   noverify = true;
                    continue;
 
                case FILEPROCSW:
@@ -601,7 +611,7 @@ main (int argc, char **argv)
 
     start_headers ();
     if (debug) {
-       verbose++;
+       verbose = true;
        out = stdout;
     } else {
        if (whomsw) {
@@ -788,7 +798,9 @@ main (int argc, char **argv)
 static void
 putfmt (char *name, char *str, int *eai, FILE *out)
 {
-    int count, grp, i, keep;
+    int count;
+    bool grp;
+    int i, keep;
     char *cp, *pp, *qp;
     char namep[BUFSIZ], error[BUFSIZ];
     char *savehdr = NULL;
@@ -801,7 +813,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
 
     if (msgstate == NORMAL && uprf (name, "resent")) {
        inform("illegal header line -- %s:", name);
-       badmsg++;
+       badmsg = true;
        return;
     }
 
@@ -845,7 +857,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
     }
     if (hdr->flags & HBAD) {
        inform("illegal header line -- %s:", name);
-       badmsg++;
+       badmsg = true;
        return;
     }
     msgflags |= (hdr->set & ~(MVIS | MINV));
@@ -904,7 +916,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
            if (hdr->flags & HTRY)
                badadr++;
            else
-               badmsg++;
+               badmsg = true;
        }
     }
 
@@ -918,11 +930,11 @@ putfmt (char *name, char *str, int *eai, FILE *out)
            if ((msgstate == RESENT) ? (hdr->set & MRSN)
                                        : (hdr->set & MSND)) {
                inform("%s: field requires one address", name);
-               badmsg++;
+               badmsg = true;
            }
 #ifdef notdef
            inform("%s: field requires at least one address", name);
-           badmsg++;
+           badmsg = true;
 #endif /* notdef */
        }
        return;
@@ -930,7 +942,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
 
     if (count > 1 && (hdr->flags & HONE)) {
        inform("%s: field only permits one address", name);
-       badmsg++;
+       badmsg = true;
        return;
     }
 
@@ -938,7 +950,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
     snprintf (namep, sizeof(namep), "%s%s",
                (hdr->flags & HMNG) ? "Original-" : "", name);
 
-    for (grp = 0, mp = tmpaddrs.m_next; mp; mp = np)
+    for (grp = false, mp = tmpaddrs.m_next; mp; mp = np)
        if (mp->m_nohost) {     /* also used to test (hdr->flags & HTRY) */
            /* The address doesn't include a host, so it might be an alias. */
            pp = akvalue (mp->m_mbox);  /* do mh alias substitution */
@@ -973,7 +985,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
                                                : (hdr->set & MSND)) {
                    strncpy(sender, auxformat(mp, 0), sizeof(sender) - 1);
                    sender[sizeof(sender) - 1] = '\0';
-                   seensender++;
+                   seensender = true;
                }
 
                /*
@@ -1004,7 +1016,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
                               " sendmail/pipe");
                    }
 
-                   grp++;
+                   grp = true;
                }
                if (putadr (namep, qp, mp, out, hdr->flags, savehdr,
                            savehdrlen))
@@ -1038,7 +1050,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
                                            : (hdr->set & MSND)) {
                strncpy(sender, auxformat(mp, 0), sizeof(sender) - 1);
                sender[sizeof(sender) - 1] = '\0';
-               seensender++;
+               seensender = true;
            }
 
            /*
@@ -1055,7 +1067,7 @@ putfmt (char *name, char *str, int *eai, FILE *out)
            if (mp->m_gname)
                putgrp (namep, mp->m_gname, out, hdr->flags);
            if (mp->m_ingrp)
-               grp++;
+               grp = true;
            keep = putadr (namep, "", mp, out, hdr->flags, savehdr, savehdrlen);
            np = mp->m_next;
            if (keep) {
@@ -1077,9 +1089,9 @@ putfmt (char *name, char *str, int *eai, FILE *out)
        }
     }
 
-    if (grp > 0 && (hdr->flags & HNGR)) {
+    if (grp && (hdr->flags & HNGR)) {
        inform("%s: field does not allow groups", name);
-       badmsg++;
+       badmsg = true;
     }
     if (linepos) {
        putc ('\n', out);
@@ -1120,14 +1132,14 @@ finish_headers (FILE *out)
                 */
                inform("message has no From: header");
                inform("See default components files for examples");
-               badmsg++;
+               badmsg = true;
                break;
            }
 
-           if (fromcount > 1 && (seensender == 0 && !(msgflags & MEFM))) {
+           if (fromcount > 1 && (!seensender && !(msgflags & MEFM))) {
                inform("A Sender: or Envelope-From: header is required "
                        "with multiple\nFrom: addresses");
-               badmsg++;
+               badmsg = true;
                break;
            }
 
@@ -1143,12 +1155,12 @@ finish_headers (FILE *out)
             * from Envelope-From: (which in this case, cannot be blank)
             */
 
-           if (fromcount > 1 && seensender == 0) {
+           if (fromcount > 1 && !seensender) {
                if (efrom[0] == '\0') {
                    inform("Envelope-From cannot be blank when there "
                            "is multiple From: addresses\nand no Sender: "
                            "header");
-                   badmsg++;
+                   badmsg = true;
                } else {
                    fprintf (out, "Sender: %s\n", efrom);
                }
@@ -1161,22 +1173,22 @@ finish_headers (FILE *out)
        case RESENT: 
            if (!(msgflags & MDAT)) {
                inform("message has no Date: header");
-               badmsg++;
+               badmsg = true;
            }
            if (!(msgflags & MFRM)) {
                inform("message has no From: header");
-               badmsg++;
+               badmsg = true;
            }
            if (!(msgflags & MRFM)) {
                inform("message has no Resent-From: header");
                inform("See default components files for examples");
-               badmsg++;
+               badmsg = true;
                break;
            }
-           if (fromcount > 1 && (seensender == 0 && !(msgflags & MEFM))) {
+           if (fromcount > 1 && (!seensender && !(msgflags & MEFM))) {
                inform("A Resent-Sender: or Envelope-From: header is "
                        "required with multiple\nResent-From: addresses");
-               badmsg++;
+               badmsg = true;
                break;
            }
 
@@ -1193,12 +1205,12 @@ finish_headers (FILE *out)
             * from Envelope-From (which in this case, cannot be blank)
             */
 
-           if (fromcount > 1 && seensender == 0) {
+           if (fromcount > 1 && !seensender) {
                if (efrom[0] == '\0') {
                    inform("Envelope-From cannot be blank when there "
                            "is multiple Resent-From: addresses and no "
                            "Resent-Sender: header");
-                   badmsg++;
+                   badmsg = true;
                } else {
                    fprintf (out, "Resent-Sender: %s\n", efrom);
                }
@@ -1234,7 +1246,8 @@ static int
 putadr (char *name, char *aka, struct mailname *mp, FILE *out,
        unsigned int flags, char *savehdr, unsigned int savehdrsize)
 {
-    int len, saveappend = 0;
+    int len;
+    bool saveappend = false;
     unsigned int shlen;
     char *cp;
     char buffer[BUFSIZ];
@@ -1252,7 +1265,7 @@ putadr (char *name, char *aka, struct mailname *mp, FILE *out,
 
     if (savehdr) {
        shlen = strlen(savehdr);
-       saveappend = 1;
+       saveappend = true;
     }
 
     if (*aka && mp->m_type != UUCPHOST && !mp->m_pers)
@@ -1274,7 +1287,7 @@ putadr (char *name, char *aka, struct mailname *mp, FILE *out,
            fprintf (out, ",\n%*s", linepos = nameoutput, "");
            if (saveappend) {
                if (shlen + 2 + nameoutput + len >= savehdrsize) {
-                   saveappend = 0;
+                   saveappend = false;
                } else {
                    snprintf(savehdr + shlen, savehdrsize - shlen, ",\n%*s",
                             linepos, "");
@@ -1285,7 +1298,7 @@ putadr (char *name, char *aka, struct mailname *mp, FILE *out,
            linepos += 2;
            if (saveappend) {
                if (shlen + 2 + len >= savehdrsize) {
-                   saveappend = 0;
+                   saveappend = false;
                } else {
                    strncat(savehdr, ", ", savehdrsize - shlen);
                }
@@ -1358,7 +1371,7 @@ insert (struct mailname *np)
            return 0;
 
     mp->m_next = np;
-    recipients++;
+    recipients = true;
     return 1;
 }