{ "filter filterfile", 0 },
#define NFILTSW 1
{ "nofilter", 0 },
-#define FRMTSW 2
- { "format", 0 },
-#define NFRMTSW 3
- { "noformat", 0 },
-#define REMVSW 4
- { "remove", 0 },
-#define NREMVSW 5
- { "noremove", 0 },
-#define VERBSW 6
+#define VERBSW 2
{ "verbose", 0 },
-#define NVERBSW 7
+#define NVERBSW 3
{ "noverbose", 0 },
-#define WATCSW 8
+#define WATCSW 4
{ "watch", 0 },
-#define NWATCSW 9
+#define NWATCSW 5
{ "nowatch", 0 },
-#define BACKSW 10
- { "backup", 0 },
-#define NBACKSW 11
- { "nobackup", 0 },
-#define ALIASW 12
+#define ALIASW 6
{ "alias aliasfile", 0 },
-#define NALIASW 13
+#define NALIASW 7
{ "noalias", 0 },
-#define VERSIONSW 14
+#define VERSIONSW 8
{ "version", 0 },
-#define HELPSW 15
+#define HELPSW 9
{ "help", 0 },
-#define DEBUGSW 16
+#define DEBUGSW 10
{ "debug", -5 },
-#define DISTSW 17
+#define DISTSW 11
{ "dist", -4 }, /* interface from dist */
-#define PUSHSW 18 /* fork to sendmail then exit */
+#define PUSHSW 12 /* fork to sendmail then exit */
{ "push", -4 },
-#define NPUSHSW 19 /* exec sendmail */
+#define NPUSHSW 13 /* exec sendmail */
{ "nopush", -6 },
-#define LIBSW 20
+#define LIBSW 14
{ "library directory", -7 },
{ NULL, 0 }
};
static int badmsg = 0; /* message has bad semantics */
static int verbose = 0; /* spell it out */
static int debug = 0; /* debugging post */
-static int rmflg = 1; /* remove temporary file when done */
static int watch = 0; /* watch the delivery process */
-static int backflg = 0; /* rename input file as *.bak when done */
static int pushflg = 0; /* if going to fork to sendmail */
static int aliasflg = 0; /* if going to process aliases */
static char tmpfil[] = "/tmp/pstXXXXXX";
-static char from[BUFSIZ]; /* my network address */
-static char signature[BUFSIZ]; /* my signature */
static char *filter = NULL; /* the filter for BCC'ing */
static char *subject = NULL; /* the subject field for BCC'ing */
static char *fccfold[FCCS]; /* foldernames for FCC'ing */
extern char *getfullname(void);
extern char *getusername(void);
-extern boolean draft_from_masquerading; /* defined in mts.c */
-
/*
** static prototypes
*/
static void putfmt(char *, char *, FILE *);
-static void start_headers(void);
static void finish_headers(FILE *);
static int get_header(char *, struct headers *);
static void putadr(char *, struct mailname *);
if (context_foil(NULL) == -1)
done(1);
- mts_init(invo_name);
arguments = getarguments(invo_name, argc, argv, 0);
argp = arguments;
filter = NULL;
continue;
- case REMVSW:
- rmflg++;
- continue;
- case NREMVSW:
- rmflg = 0;
- continue;
-
- case BACKSW:
- backflg++;
- continue;
- case NBACKSW:
- backflg = 0;
- continue;
-
case VERBSW:
verbose++;
continue;
argp[-2]);
aliasflg = 1;
if ((state = alias(cp)) != AK_OK)
- adios(NULL, "aliasing error in file %s - %s", cp, akerror(state) );
+ adios(NULL, "aliasing error in file %s - %s", cp, akerror(state));
continue;
case NALIASW:
aliasflg = 0;
if ((in = fopen(msg, "r")) == NULL)
adios(msg, "unable to open");
- start_headers();
if (debug) {
verbose++;
out = stdout;
- }
- else {
+ } else {
#ifdef HAVE_MKSTEMP
- if ((out = fdopen( mkstemp(tmpfil), "w" )) == NULL )
- adios(tmpfil, "unable to create");
+ if ((out = fdopen(mkstemp(tmpfil), "w")) == NULL)
+ adios(tmpfil, "unable to create");
#else
- mktemp(tmpfil);
- if ((out = fopen(tmpfil, "w")) == NULL)
- adios(tmpfil, "unable to create");
- chmod(tmpfil, 0600);
+ mktemp(tmpfil);
+ if ((out = fopen(tmpfil, "w")) == NULL)
+ adios(tmpfil, "unable to create");
+ chmod(tmpfil, 0600);
#endif
- }
+ }
hdrtab = (msgstate == normal) ? NHeaders : RHeaders;
}
break;
}
-
fclose(in);
- if (backflg) {
- strncpy(buf, m_backup(msg), sizeof(buf));
- if (rename(msg, buf) == NOTOK)
- advise(buf, "unable to rename %s to", msg);
- }
if (debug) {
+ /* stop here */
done(0);
- } else {
- fclose(out);
}
+ fclose(out);
+
/* process Fcc */
for (i=0; i<fccind; i++) {
fcc(tmpfil, fccfold[i]);
** re-open the temp file, unlink it and exec sendmail, giving it
** the msg temp file as std in.
*/
- if (freopen(tmpfil, "r", stdin) == NULL)
+ if (!freopen(tmpfil, "r", stdin)) {
adios(tmpfil, "can't reopen for sendmail");
- if (rmflg)
- unlink(tmpfil);
+ }
+ unlink(tmpfil);
argp = sargv;
*argp++ = "send-mail";
** alias processing as well.
** -- Dan Harkless <dan-nmh@dilvish.speed.net>
*/
- fprintf(out, "%s: %s", name, str );
+ fprintf(out, "%s: %s", name, str);
}
}
}
/*
-** Construct signature name
+** Add yet missing headers.
*/
static void
-start_headers(void)
+finish_headers(FILE *out)
{
char *cp;
+ char from[BUFSIZ]; /* my network address */
+ char signature[BUFSIZ]; /* my signature */
+ char *resentstr = (msgstate == resent) ? "Resent-" : "";
+
+ if (!(msgflags & MDAT)) {
+ fprintf(out, "%sDate: %s\n", resentstr, dtimenow(0));
+ }
strncpy(from, getusername(), sizeof(from));
if ((cp = getfullname()) && *cp) {
} else {
snprintf(signature, sizeof(signature), "%s", from);
}
-}
-
-
-/*
-** Add yet missing headers.
-*/
-static void
-finish_headers(FILE *out)
-{
- char *resentstr = (msgstate == resent) ? "Resent-" : "";
-
- if (!(msgflags & MDAT)) {
- fprintf(out, "%sDate: %s\n", resentstr, dtimenow(0));
- }
if (!(msgflags & MFRM)) {
fprintf(out, "%sFrom: %s\n", resentstr, signature);
- } else if (!draft_from_masquerading) {
- /*
- ** mts.conf didn't contain "masquerade:[...]draft_from[...]"
- ** so we'll reveal the user's actual account@thismachine
- ** address in a Sender: header (and use it as the envelope
- ** From: later).
- */
+ } else {
+ /* In case the From: header contains multiple addresses. */
fprintf(out, "%sSender: %s\n", resentstr, from);
}
#ifdef notdef
if (mp->m_nohost) {
/* a local name - see if it's an alias */
cp = akvalue(mp->m_mbox);
- if (cp == mp->m_mbox)
+ if (cp == mp->m_mbox) {
/* wasn't an alias - use what the user typed */
linepos = putone(mp->m_text, linepos, namelen);
- else
+ } else {
/* an alias - expand it */
while ((cp = getname(cp))) {
if (linepos > MAX_SM_FIELD) {
- fprintf(out, "\n%s: ", name);
- linepos = namelen;
+ fprintf(out, "\n%s: ", name);
+ linepos = namelen;
}
- mp2 = getm( cp, NULL, 0, AD_HOST, NULL);
+ mp2 = getm(cp, NULL, 0, AD_HOST, NULL);
if (akvisible()) {
mp2->m_pers = getcpy(mp->m_mbox);
- linepos = putone( adrformat(mp2), linepos, namelen );
+ linepos = putone(adrformat(mp2), linepos, namelen);
} else {
- linepos = putone( mp2->m_text, linepos, namelen );
+ linepos = putone(mp2->m_text,
+ linepos,
+ namelen);
}
- mnfree( mp2 );
+ mnfree(mp2);
}
+ }
} else {
/* not a local name - use what the user typed */
- linepos = putone( mp->m_text, linepos, namelen );
+ linepos = putone(mp->m_text, linepos, namelen);
}
mp2 = mp;
mp = mp->m_next;
- mnfree( mp2 );
+ mnfree(mp2);
}
- putc( '\n', out );
+ putc('\n', out);
}
static int
register int len;
static int linepos;
- len = strlen( adr );
+ len = strlen(adr);
if (pos == indent)
linepos = pos;
else if (linepos+len > OUTPUTLINELEN) {
- fprintf( out, ",\n%*s", indent, "");
+ fprintf(out, ",\n%*s", indent, "");
linepos = indent;
pos += indent + 2;
} else {
- fputs( ", ", out );
+ fputs(", ", out);
linepos += 2;
pos += 2;
}
- fputs( adr, out );
+ fputs(adr, out);
linepos += len;
return (pos+len);
chmod(bccfil, 0600);
fprintf(out, "Date: %s\n", dtimenow(0));
- if (msgflags & MFRM) {
- /* There was already a From: in the draft. Don't add one. */
- if (!draft_from_masquerading)
- /*
- ** mts.conf didn't contain "masquerade:[...]draft_from[...]"
- ** so we'll reveal the user's actual account@thismachine
- ** address in a Sender: header (and use it as the envelope
- ** From: later).
- */
- fprintf(out, "Sender: %s\n", from);
- } else
+ if (!(msgflags & MFRM)) {
/* Construct a From: header. */
fprintf(out, "From: %s\n", signature);
+ } else {
+ /* Add a Sender: header in case the From: header is fake. */
+ fprintf(out, "Sender: %s\n", from);
+ }
if (subject)
fprintf(out, "Subject: %s", subject);
fprintf(out, "BCC:\n\n------- Blind-Carbon-Copy\n\n");
fflush(out);
- if (filter == NULL) {
+ if (!filter) {
if ((fd = open(tmpfil, O_RDONLY)) == NOTOK)
adios(NULL, "unable to re-open");
cpydgst(fd, fileno(out), tmpfil, bccfil);