#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 "../sbr/m_mktemp.h"
-#include "../sbr/message_id.h"
+#include "sbr/m_mktemp.h"
+#include "sbr/message_id.h"
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
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 bool format = true; /* 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 void putfmt (char *, char *, int *, FILE *);
static void start_headers (void);
static void finish_headers (FILE *);
-static int get_header (char *, struct headers *);
+static int get_header (char *, struct headers *) PURE;
static int putadr (char *, char *, struct mailname *, FILE *, unsigned int,
char *, unsigned int);
static void putgrp (char *, char *, FILE *, unsigned int);
static void insert_fcc (struct headers *, char *);
static void make_bcc_file (int);
static void verify_all_addresses (int, int, char *, int, char *);
-static void chkadr (void);
+static void chkadr (void) PURE;
static void sigon (void);
static void sigoff (void);
static void p_refile (char *);
static void fcc (char *, char *);
-static void die (char *, char *, ...);
+static void fatal (char *, char *, ...) CHECK_PRINTF(2, 3);
static void post (char *, int, int, int, char *, int, char *);
static void do_text (char *file, int fd);
static void do_an_address (struct mailname *, int);
FILE *in, *out;
m_getfld_state_t gstate;
- if (nmh_init(argv[0], 0 /* use context_foil() */)) { return 1; }
+ if (nmh_init(argv[0], false, false)) { return 1; }
mts_init ();
arguments = getarguments (invo_name, argc, argv, 0);
ambigsw (cp, switches);
done (1);
case UNKWNSW:
- adios (NULL, "-%s unknown", cp);
+ die("-%s unknown", cp);
case HELPSW:
snprintf (buf, sizeof(buf), "%s [switches] file", invo_name);
case LIBSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
/* create a minimal context */
if (context_foil (cp) == -1)
done (1);
case ALIASW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
if ((state = alias (cp)) != AK_OK)
- adios (NULL, "aliasing error in %s - %s",
+ die("aliasing error in %s - %s",
cp, akerror (state));
continue;
case FILTSW:
if (!(filter = *argp++) || *filter == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
mime = 0;
continue;
case NFILTSW:
continue;
case FRMTSW:
- format++;
+ format = true;
continue;
case NFRMTSW:
- format = 0;
+ format = false;
continue;
case BITSTUFFSW:
case WIDTHSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
if ((outputlinelen = atoi (cp)) < 10)
- adios (NULL, "impossible width %d", outputlinelen);
+ die("impossible width %d", outputlinelen);
continue;
case ANNOSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
if ((pfd = atoi (cp)) <= 2)
- adios (NULL, "bad argument %s %s", argp[-2], cp);
+ die("bad argument %s %s", argp[-2], cp);
continue;
case CLIESW:
if (!(clientsw = *argp++) || *clientsw == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case SERVSW:
if (!(serversw = *argp++) || *serversw == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case SNOOPSW:
snoop++;
case PARTSW:
if (!(partno = *argp++) || *partno == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case SASLSW:
case SASLMECHSW:
if (!(saslmech = *argp++) || *saslmech == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case AUTHSERVICESW:
if (!(auth_svc = *argp++) || *auth_svc == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
oauth_flag++;
continue;
int i;
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
for (i = 0; oauthswitches[i].profname != NULL; i++) {
if (oauthswitches[i].switchnum == swnum) {
}
if (oauthswitches[i].profname == NULL)
- adios (NULL, "internal error: cannot map switch %s "
+ die("internal error: cannot map switch %s "
"to profile entry", argp[-2]);
oauth_flag++;
case USERSW:
if (!(user = *argp++) || *user == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case PORTSW:
if (!(port = *argp++) || *port == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
continue;
case TLSSW:
case FILEPROCSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
fileproc = cp;
continue;
case MHLPROCSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
mhlproc = cp;
continue;
case MTSSM:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
sendmail = cp;
continue;
case MTSSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
save_mts_method (cp);
continue;
case CREDENTIALSSW: {
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
add_profile_entry ("credentials", cp);
continue;
}
case MESSAGEIDSW:
if (!(cp = *argp++) || *cp == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
if (save_message_id_style (cp) != 0)
- adios (NULL, "unsupported messageid \"%s\"", cp);
+ die("unsupported messageid \"%s\"", cp);
continue;
}
}
if (msg)
- adios (NULL, "only one message at a time!");
- else
- msg = cp;
+ die("only one message at a time!");
+ msg = cp;
}
alias (AliasFile);
if (!msg)
- adios (NULL, "usage: %s [switches] file", invo_name);
+ die("usage: %s [switches] file", invo_name);
if (outputlinelen < 10)
- adios (NULL, "impossible width %d", outputlinelen);
+ die("impossible width %d", outputlinelen);
if ((in = fopen (msg, "r")) == NULL)
adios (msg, "unable to open");
} else {
char *cp = m_mktemp2(NULL, invo_name, NULL, &out);
if (cp == NULL) {
- adios(NULL, "unable to create temporary file in %s",
+ die("unable to create temporary file in %s",
get_temp_dir());
}
strncpy(tmpfil, cp, sizeof(tmpfil));
case LENERR:
case FMTERR:
- adios (NULL, "message format error in component #%d", compnum);
+ die("message format error in component #%d", compnum);
default:
- adios (NULL, "getfld() returned %d", state);
+ die("getfld() returned %d", state);
}
break;
}
if (debug) {
pl ();
done (0);
- } else {
- fclose (out);
}
+ fclose (out);
/*
* Here's how we decide which address to use as the envelope-from
char sbuf[128];
if (auth_svc == NULL) {
- adios(NULL, "No authentication service given with -authservice");
+ die("No authentication service given with -authservice");
}
for (i = 0; oauthswitches[i].profname != NULL; i++) {
mp->m_bcc++;
if (np->m_ingrp)
mp->m_ingrp = np->m_ingrp;
- else
- if (mp->m_gname)
- putgrp (namep, mp->m_gname, out, hdr->flags);
+ else if (mp->m_gname)
+ putgrp (namep, mp->m_gname, out, hdr->flags);
if (mp->m_ingrp) {
if (sm_mts == MTS_SENDMAIL_PIPE) {
/* Catch this before sendmail chokes with:
aliases and put them in Bcc:, but then
they'd have the Blind-Carbon-Copy
indication. */
- adios (NULL,
- "blind lists not compatible with"
+ die( "blind lists not compatible with"
" sendmail/pipe");
}
}
if (badmsg)
- adios (NULL, "re-format message and try again");
+ die("re-format message and try again");
if (!recipients)
- adios (NULL, "no addressees");
+ die("no addressees");
}
{
struct headers *h;
+ header = FENDNULL(header);
for (h = table; h->value; h++)
- if (!strcasecmp (FENDNULL(header), FENDNULL(h->value)))
- return (h - table);
+ if (!strcasecmp(FENDNULL(h->value), header))
+ return h - table;
return NOTOK;
}
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];
if (savehdr) {
shlen = strlen(savehdr);
- saveappend = 1;
+ saveappend = true;
}
if (*aka && mp->m_type != UUCPHOST && !mp->m_pers)
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, "");
linepos += 2;
if (saveappend) {
if (shlen + 2 + len >= savehdrsize) {
- saveappend = 0;
+ saveappend = false;
} else {
strncat(savehdr, ", ", savehdrsize - shlen);
}
linepos += len;
- return (flags & HTRY);
+ return flags & HTRY;
}
int i;
struct mailname *mp;
- printf ("-------\n\t-- Addresses --\nlocal:\t");
+ fputs("-------\n\t-- Addresses --\nlocal:\t", stdout);
for (mp = localaddrs.m_next; mp; mp = mp->m_next)
printf ("%s%s%s", mp->m_mbox,
mp->m_bcc ? "[BCC]" : "",
mp->m_next ? ",\n\t" : "");
- printf ("\nnet:\t");
+ fputs("\nnet:\t", stdout);
for (mp = netaddrs.m_next; mp; mp = mp->m_next)
printf ("%s%s@%s%s%s", FENDNULL(mp->m_path),
mp->m_mbox, mp->m_host,
mp->m_bcc ? "[BCC]" : "",
mp->m_next ? ",\n\t" : "");
- printf ("\nuucp:\t");
+ fputs("\nuucp:\t", stdout);
for (mp = uuaddrs.m_next; mp; mp = mp->m_next)
printf ("%s!%s%s%s", mp->m_host, mp->m_mbox,
mp->m_bcc ? "[BCC]" : "",
mp->m_next ? ",\n\t" : "");
- printf ("\n\t-- Folder Copies --\nfcc:\t");
+ fputs("\n\t-- Folder Copies --\nfcc:\t", stdout);
for (i = 0; i < fccind; i++)
printf ("%s%s", fccfold[i], i + 1 < fccind ? ",\n\t" : "");
putchar('\n');
snprintf (buffer, sizeof(buffer), "%s\n", adrformat (mp));
i = strlen (buffer);
- return (write (pfd, buffer, i) == i ? OK : NOTOK);
+ return write(pfd, buffer, i) == i ? OK : NOTOK;
}
return;
if (fccind >= FCCS)
- adios (NULL, "too many %ss", hdr->value);
+ die("too many %ss", hdr->value);
fccfold[fccind++] = mh_xstrdup(cp);
}
char *tfile = NULL, *program;
if ((tfile = m_mktemp2(NULL, "bccs", NULL, &out)) == NULL) {
- adios(NULL, "unable to create temporary file in %s", get_temp_dir());
+ die("unable to create temporary file in %s", get_temp_dir());
}
strncpy (bccfil, tfile, sizeof(bccfil));
* prefix and check again.
*/
if ((cp = strchr(prefix, 'a')) == NULL)
- adios (NULL, "lost prefix start");
+ die("lost prefix start");
while (find_prefix () == NOTOK) {
if (*cp < 'z')
(*cp)++;
- else
- if (*++cp == 0)
- adios (NULL, "can't find a unique delimiter string");
- else
- (*cp)++;
+ else if (*++cp == 0)
+ die("can't find a unique delimiter string");
+ else
+ (*cp)++;
}
fprintf (out, "%s: %s\n%s: multipart/digest; boundary=\"",
* of MIME encapsulation.
*/
if (filter != NULL) {
- for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
- sleep (5);
+ child_id = fork();
switch (child_id) {
case NOTOK:
adios ("fork", "unable to");
execvp (program, vec);
fprintf (stderr, "unable to exec ");
perror (mhlproc);
- _exit (-1);
+ _exit(1);
default:
pidXwait (child_id, mhlproc);
chkadr (void)
{
if (badadr && unkadr)
- die (NULL, "%d address%s unparsable, %d addressee%s undeliverable",
+ fatal (NULL, "%d address%s unparsable, %d addressee%s undeliverable",
badadr, PLURALS(badadr), unkadr, PLURALS(badadr));
if (badadr)
- die (NULL, "%d address%s unparsable", badadr, PLURALS(badadr));
+ fatal (NULL, "%d address%s unparsable", badadr, PLURALS(badadr));
if (unkadr)
- die (NULL, "%d addressee%s undeliverable", unkadr, PLURALS(unkadr));
+ fatal (NULL, "%d addressee%s undeliverable", unkadr, PLURALS(unkadr));
}
chkadr ();
if (rp_isbad (retval = sm_waend ()))
- die (NULL, "problem ending addresses; %s", rp_string (retval));
+ fatal (NULL, "problem ending addresses; %s", rp_string (retval));
}
post (char *file, int bccque, int talk, int eai, char *envelope,
int oauth_flag, char *auth_svc)
{
- int retval, i;
+ int retval;
pid_t child_id;
if (verbose) {
char **argp, *program;
int argc;
- for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
- sleep (5);
+ child_id = fork();
switch (child_id) {
case NOTOK:
adios ("fork", "unable to");
int eightbit = 0;
if (fd == NOTOK) {
- die (file, "unable to re-open");
+ fatal (file, "unable to re-open");
}
if (msgflags & MMIM && cte != UNKNOWN) {
} else {
if (scan_input (fd, &eightbit) == NOTOK) {
close (fd);
- die (file, "problem reading from");
+ fatal (file, "problem reading from");
}
}
oauth_flag ? auth_svc : NULL, tlsflag))
|| rp_isbad (retval = sm_winit (envelope, eai, eightbit))) {
close (fd);
- die (NULL, "problem initializing server; %s", rp_string (retval));
+ fatal (NULL, "problem initializing server; %s", rp_string (retval));
}
do_addresses (bccque, talk && verbose);
verbose, snoop, sasl, saslmech, user,
oauth_flag ? auth_svc : NULL, tlsflag))
|| rp_isbad (retval = sm_winit (envelope, eai, eightbit))) {
- die (NULL, "problem initializing server; %s", rp_string (retval));
+ fatal (NULL, "problem initializing server; %s", rp_string (retval));
}
}
puts(" -- Address Verification Successful --");
if (!whomsw || checksw)
- sm_end (DONE);
+ sm_end (whomsw ? OK : DONE);
fflush (stdout);
sigoff ();
return;
}
if (talk)
- printf (": ");
+ fputs(": ", stdout);
fflush (stdout);
switch (retval = sm_wadr (mbox, host,
default:
if (!talk)
fprintf (stderr, " %s: ", addr);
- die (NULL, "unexpected response; %s", rp_string (retval));
+ fatal (NULL, "unexpected response; %s", rp_string (retval));
}
fflush (stdout);
while ((state = read (fd, buf, sizeof(buf))) > 0) {
if (rp_isbad (retval = sm_wtxt (buf, state)))
- die (NULL, "problem writing text; %s\n", rp_string (retval));
+ fatal (NULL, "problem writing text; %s\n", rp_string (retval));
}
if (state == NOTOK)
- die (file, "problem reading from");
+ fatal (file, "problem reading from");
switch (retval = sm_wtend ()) {
case RP_OK:
case RP_NO:
case RP_NDEL:
- die (NULL, "posting failed; %s", rp_string (retval));
+ fatal (NULL, "posting failed; %s", rp_string (retval));
break;
default:
- die (NULL, "unexpected response; %s", rp_string (retval));
+ fatal (NULL, "unexpected response; %s", rp_string (retval));
}
}
fcc (char *file, char *folder)
{
pid_t child_id;
- int i, status, argp;
+ int status, argp;
char fold[BUFSIZ];
char **arglist, *program;
printf (" %sFcc %s: ", msgstate == RESENT ? "Resent-" : "", folder);
fflush (stdout);
- for (i = 0; (child_id = fork ()) == NOTOK && i < 5; i++)
- sleep (5);
-
+ child_id = fork();
switch (child_id) {
case NOTOK:
if (!verbose)
arglist[argp++] = fold;
arglist[argp] = NULL;
execvp (program, arglist);
- _exit (-1);
+ _exit(1);
default:
if ((status = pidwait (child_id, OK))) {
*/
static void
-die (char *what, char *fmt, ...)
+fatal (char *what, char *fmt, ...)
{
int err;
va_list ap;