SCCS-vsn: usr.sbin/sendmail/src/envelope.c 8.54
SCCS-vsn: usr.sbin/sendmail/src/collect.c 8.31
SCCS-vsn: usr.sbin/sendmail/src/sendmail.h 8.105
SCCS-vsn: usr.sbin/sendmail/src/savemail.c 8.58
SCCS-vsn: usr.sbin/sendmail/src/deliver.c 8.132
SCCS-vsn: usr.sbin/sendmail/src/queue.c 8.72
SCCS-vsn: usr.sbin/sendmail/src/mime.c 8.12
-static char sccsid[] = "@(#)collect.c 8.30 (Berkeley) %G%";
+static char sccsid[] = "@(#)collect.c 8.31 (Berkeley) %G%";
#endif /* not lint */
# include <errno.h>
#endif /* not lint */
# include <errno.h>
int mstate;
char *pbp;
char peekbuf[8];
int mstate;
char *pbp;
char peekbuf[8];
char bufbuf[MAXLINE];
extern bool isheader();
extern void eatheader();
char bufbuf[MAXLINE];
extern bool isheader();
extern void eatheader();
- e->e_df = queuename(e, 'd');
- e->e_df = newstr(e->e_df);
- if ((tf = dfopen(e->e_df, O_WRONLY|O_CREAT|O_TRUNC, FileMode)) == NULL)
+ strcpy(dfname, queuename(e, 'd'));
+ if ((tf = dfopen(dfname, O_WRONLY|O_CREAT|O_TRUNC, FileMode)) == NULL)
- syserr("Cannot create %s", e->e_df);
+ syserr("Cannot create %s", dfname);
e->e_flags |= EF_NO_BODY_RETN;
finis();
}
e->e_flags |= EF_NO_BODY_RETN;
finis();
}
}
HasEightBits = FALSE;
e->e_msgsize = 0;
}
HasEightBits = FALSE;
e->e_msgsize = 0;
+ e->e_flags |= EF_HAS_DF;
if (CollectErrno != 0)
{
errno = CollectErrno;
if (CollectErrno != 0)
{
errno = CollectErrno;
- syserr(CollectErrorMessage, e->e_df);
+ syserr(CollectErrorMessage, dfname);
finis();
}
usrerr(CollectErrorMessage);
finis();
}
usrerr(CollectErrorMessage);
usrerr("554 Eight bit data not allowed");
}
usrerr("554 Eight bit data not allowed");
}
- if ((e->e_dfp = fopen(e->e_df, "r")) == NULL)
+ if ((e->e_dfp = fopen(dfname, "r")) == NULL)
{
/* we haven't acked receipt yet, so just chuck this */
{
/* we haven't acked receipt yet, so just chuck this */
- syserr("Cannot reopen %s", e->e_df);
+ syserr("Cannot reopen %s", dfname);
e->e_flags |= EF_NO_BODY_RETN;
if (fstat(fileno(tf), &st) < 0)
st.st_size = 0;
e->e_flags |= EF_NO_BODY_RETN;
if (fstat(fileno(tf), &st) < 0)
st.st_size = 0;
- (void) freopen(e->e_df, "w", tf);
+ (void) freopen(queuename(e, 'd'), "w", tf);
if (st.st_size <= 0)
fprintf(tf, "\n*** Mail could not be accepted");
else if (sizeof st.st_size > sizeof (long))
if (st.st_size <= 0)
fprintf(tf, "\n*** Mail could not be accepted");
else if (sizeof st.st_size > sizeof (long))
-static char sccsid[] = "@(#)deliver.c 8.131 (Berkeley) %G%";
+static char sccsid[] = "@(#)deliver.c 8.132 (Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
ee->e_from.q_flags |= QDONTSEND;
ee->e_dfp = NULL;
ee->e_xfp = NULL;
ee->e_from.q_flags |= QDONTSEND;
ee->e_dfp = NULL;
ee->e_xfp = NULL;
ee->e_errormode = EM_MAIL;
for (q = e->e_sendqueue; q != NULL; q = q->q_next)
ee->e_errormode = EM_MAIL;
for (q = e->e_sendqueue; q != NULL; q = q->q_next)
q->q_flags &= ~QQUEUEUP;
}
q->q_flags &= ~QQUEUEUP;
}
- if (e->e_df != NULL && mode != SM_VERIFY)
+ if (mode != SM_VERIFY && bitset(EF_HAS_DF, e->e_flags))
+ char df1buf[20], df2buf[20];
+
- ee->e_df = queuename(ee, 'd');
- ee->e_df = newstr(ee->e_df);
- if (link(e->e_df, ee->e_df) < 0)
+ strcpy(df1buf, queuename(e, 'd'));
+ strcpy(df2buf, queuename(ee, 'd'));
+ if (link(df1buf, df2buf) < 0)
{
syserr("sendall: link(%s, %s)",
{
syserr("sendall: link(%s, %s)",
** Output the body of the message
*/
** Output the body of the message
*/
- if (e->e_dfp == NULL && e->e_df != NULL)
+ if (e->e_dfp == NULL && bitset(EF_HAS_DF, e->e_flags))
- e->e_dfp = fopen(e->e_df, "r");
+ char *df = queuename(e, 'd');
+
+ e->e_dfp = fopen(df, "r");
if (e->e_dfp == NULL)
syserr("putbody: Cannot open %s for %s from %s",
if (e->e_dfp == NULL)
syserr("putbody: Cannot open %s for %s from %s",
- e->e_df, e->e_to, e->e_from.q_paddr);
+ df, e->e_to, e->e_from.q_paddr);
}
if (e->e_dfp == NULL)
{
}
if (e->e_dfp == NULL)
{
- syserr("putbody: %s: read error", e->e_df);
+ syserr("putbody: df%s: read error", e->e_id);
}
/* we have to open the dfile BEFORE setuid */
}
/* we have to open the dfile BEFORE setuid */
- if (e->e_dfp == NULL && e->e_df != NULL)
+ if (e->e_dfp == NULL && bitset(EF_HAS_DF, e->e_flags))
- e->e_dfp = fopen(e->e_df, "r");
+ char *df = queuename(e, 'd');
+
+ e->e_dfp = fopen(df, "r");
if (e->e_dfp == NULL)
{
syserr("mailfile: Cannot open %s for %s from %s",
if (e->e_dfp == NULL)
{
syserr("mailfile: Cannot open %s for %s from %s",
- e->e_df, e->e_to, e->e_from.q_paddr);
+ df, e->e_to, e->e_from.q_paddr);
-static char sccsid[] = "@(#)envelope.c 8.53 (Berkeley) %G%";
+static char sccsid[] = "@(#)envelope.c 8.54 (Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
queueit = TRUE;
/* see if a notification is needed */
queueit = TRUE;
/* see if a notification is needed */
- if (e->e_df != NULL &&
- bitset(QBADADDR, q->q_flags) &&
+ if (bitset(QBADADDR, q->q_flags) &&
bitset(QPINGONFAILURE, q->q_flags))
{
failure_return = TRUE;
bitset(QPINGONFAILURE, q->q_flags))
{
failure_return = TRUE;
if (tTd(50, 1))
printf("\n===== Dropping [dq]f%s (queueit=%d, e_flags=%x) =====\n\n",
e->e_id, queueit, e->e_flags);
if (tTd(50, 1))
printf("\n===== Dropping [dq]f%s (queueit=%d, e_flags=%x) =====\n\n",
e->e_id, queueit, e->e_flags);
- if (e->e_df != NULL)
- xunlink(e->e_df);
+ xunlink(queuename(e, 'd'));
xunlink(queuename(e, 'q'));
#ifdef LOG
xunlink(queuename(e, 'q'));
#ifdef LOG
/* make sure that this envelope is marked unused */
if (e->e_dfp != NULL)
/* make sure that this envelope is marked unused */
if (e->e_dfp != NULL)
- (void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
+ (void) xfclose(e->e_dfp, "dropenvelope df", e->e_id);
- e->e_id = e->e_df = NULL;
+ e->e_id = NULL;
+ e->e_flags &= ~EF_HAS_DF;
}
\f/*
** CLEARENVELOPE -- clear an envelope without unlocking
}
\f/*
** CLEARENVELOPE -- clear an envelope without unlocking
if (e->e_xfp != NULL)
(void) xfclose(e->e_xfp, "clearenvelope xfp", e->e_id);
if (e->e_dfp != NULL)
if (e->e_xfp != NULL)
(void) xfclose(e->e_xfp, "clearenvelope xfp", e->e_id);
if (e->e_dfp != NULL)
- (void) xfclose(e->e_dfp, "clearenvelope dfp", e->e_df);
+ (void) xfclose(e->e_dfp, "clearenvelope dfp", e->e_id);
e->e_xfp = e->e_dfp = NULL;
}
e->e_xfp = e->e_dfp = NULL;
}
# include <string.h>
#ifndef lint
# include <string.h>
#ifndef lint
-static char sccsid[] = "@(#)mime.c 8.11 (Berkeley) %G%";
+static char sccsid[] = "@(#)mime.c 8.12 (Berkeley) %G%";
/* remember where we were */
offset = ftell(e->e_dfp);
if (offset == -1)
/* remember where we were */
offset = ftell(e->e_dfp);
if (offset == -1)
- syserr("mime8to7: cannot ftell on %s", e->e_df);
+ syserr("mime8to7: cannot ftell on df%s", e->e_id);
/* do a scan of this body type to count character types */
while (fgets(buf, sizeof buf, e->e_dfp) != NULL)
/* do a scan of this body type to count character types */
while (fgets(buf, sizeof buf, e->e_dfp) != NULL)
/* return to the original offset for processing */
/* XXX use relative seeks to handle >31 bit file sizes? */
if (fseek(e->e_dfp, offset, SEEK_SET) < 0)
/* return to the original offset for processing */
/* XXX use relative seeks to handle >31 bit file sizes? */
if (fseek(e->e_dfp, offset, SEEK_SET) < 0)
- syserr("mime8to7: cannot fseek on %s", e->e_df);
+ syserr("mime8to7: cannot fseek on df%s", e->e_id);
#ifndef lint
#ifdef QUEUE
#ifndef lint
#ifdef QUEUE
-static char sccsid[] = "@(#)queue.c 8.71 (Berkeley) %G% (with queueing)";
+static char sccsid[] = "@(#)queue.c 8.72 (Berkeley) %G% (with queueing)";
-static char sccsid[] = "@(#)queue.c 8.71 (Berkeley) %G% (without queueing)";
+static char sccsid[] = "@(#)queue.c 8.72 (Berkeley) %G% (without queueing)";
#endif
#endif /* not lint */
#endif
#endif /* not lint */
** If there is no data file yet, create one.
*/
** If there is no data file yet, create one.
*/
+ if (!bitset(EF_HAS_DF, e->e_flags))
struct stat stbuf;
extern putbody();
struct stat stbuf;
extern putbody();
- e->e_df = queuename(e, 'd');
- e->e_df = newstr(e->e_df);
- fd = open(e->e_df, O_WRONLY|O_CREAT|O_TRUNC, FileMode);
+ strcpy(dfname, queuename(e, 'd'));
+ fd = open(dfname, O_WRONLY|O_CREAT|O_TRUNC, FileMode);
if (fd < 0 || (dfp = fdopen(fd, "w")) == NULL)
syserr("!queueup: cannot create data temp file %s, uid=%d",
if (fd < 0 || (dfp = fdopen(fd, "w")) == NULL)
syserr("!queueup: cannot create data temp file %s, uid=%d",
if (fstat(fd, &stbuf) < 0)
e->e_dfino = -1;
else
if (fstat(fd, &stbuf) < 0)
e->e_dfino = -1;
else
e->e_dfdev = stbuf.st_dev;
e->e_dfino = stbuf.st_ino;
}
e->e_dfdev = stbuf.st_dev;
e->e_dfino = stbuf.st_ino;
}
+ e->e_flags |= EF_HAS_DF;
bzero(&mcibuf, sizeof mcibuf);
mcibuf.mci_out = dfp;
mcibuf.mci_mailer = FileMailer;
bzero(&mcibuf, sizeof mcibuf);
mcibuf.mci_out = dfp;
mcibuf.mci_mailer = FileMailer;
fprintf(tfp, "I%d/%d/%ld\n",
major(e->e_dfdev), minor(e->e_dfdev), e->e_dfino);
fprintf(tfp, "I%d/%d/%ld\n",
major(e->e_dfdev), minor(e->e_dfdev), e->e_dfino);
- /* output type and name of data file */
if (e->e_bodytype != NULL)
fprintf(tfp, "B%s\n", e->e_bodytype);
if (e->e_bodytype != NULL)
fprintf(tfp, "B%s\n", e->e_bodytype);
- fprintf(tfp, "D%s\n", e->e_df);
/* message from envelope, if it exists */
if (e->e_message != NULL)
/* message from envelope, if it exists */
if (e->e_message != NULL)
/* rename (locked) tf to be (locked) qf */
qf = queuename(e, 'q');
if (rename(tf, qf) < 0)
/* rename (locked) tf to be (locked) qf */
qf = queuename(e, 'q');
if (rename(tf, qf) < 0)
- syserr("cannot rename(%s, %s), df=%s, uid=%d",
- tf, qf, e->e_df, geteuid());
+ syserr("cannot rename(%s, %s), uid=%d",
+ tf, qf, geteuid());
/* close and unlock old (locked) qf */
if (e->e_lockfp != NULL)
/* close and unlock old (locked) qf */
if (e->e_lockfp != NULL)
# ifdef LOG
/* save log info */
if (LogLevel > 79)
# ifdef LOG
/* save log info */
if (LogLevel > 79)
- syslog(LOG_DEBUG, "%s: queueup, qf=%s, df=%s\n", e->e_id, qf, e->e_df);
+ syslog(LOG_DEBUG, "%s: queueup, qf=%s", e->e_id, qf);
# endif /* LOG */
if (tTd(40, 1))
# endif /* LOG */
if (tTd(40, 1))
OpMode = MD_DELIVER;
ctladdr = NULL;
e->e_dfino = -1;
OpMode = MD_DELIVER;
ctladdr = NULL;
e->e_dfino = -1;
while ((bp = fgetfolded(buf, sizeof buf, qfp)) != NULL)
{
register char *p;
while ((bp = fgetfolded(buf, sizeof buf, qfp)) != NULL)
{
register char *p;
u_long qflags;
ADDRESS *q;
u_long qflags;
ADDRESS *q;
break;
case 'D': /* data file name */
break;
case 'D': /* data file name */
- e->e_df = newstr(&bp[1]);
- e->e_dfp = fopen(e->e_df, "r");
- if (e->e_dfp == NULL)
- {
- syserr("readqf: cannot open %s", e->e_df);
- e->e_msgsize = -1;
- }
- else if (fstat(fileno(e->e_dfp), &st) >= 0)
- {
- e->e_msgsize = st.st_size;
- e->e_dfdev = st.st_dev;
- e->e_dfino = st.st_ino;
- }
+ /* obsolete -- ignore */
break;
case 'T': /* init time */
break;
case 'T': /* init time */
errno = 0;
e->e_flags |= EF_CLRQUEUE | EF_FATALERRS | EF_RESPONSE;
}
errno = 0;
e->e_flags |= EF_CLRQUEUE | EF_FATALERRS | EF_RESPONSE;
}
+ else
+ {
+ /*
+ ** Arrange to read the data file.
+ */
+
+ p = queuename(e, 'd');
+ e->e_dfp = fopen(p, "r");
+ if (e->e_dfp == NULL)
+ {
+ syserr("readqf: cannot open %s", p);
+ }
+ else if (fstat(fileno(e->e_dfp), &st) >= 0)
+ {
+ e->e_msgsize = st.st_size;
+ e->e_dfdev = st.st_dev;
+ e->e_dfino = st.st_ino;
+ }
+ }
+
-static char sccsid[] = "@(#)savemail.c 8.57 (Berkeley) %G%";
+static char sccsid[] = "@(#)savemail.c 8.58 (Berkeley) %G%";
#endif /* not lint */
# include "sendmail.h"
#endif /* not lint */
# include "sendmail.h"
- if (e->e_parent->e_df != NULL)
+ if (bitset(EF_HAS_DF, e->e_parent->e_flags))
{
sendbody = !bitset(EF_NO_BODY_RETN, e->e_parent->e_flags);
{
sendbody = !bitset(EF_NO_BODY_RETN, e->e_parent->e_flags);
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)sendmail.h 8.104 (Berkeley) %G%
+ * @(#)sendmail.h 8.105 (Berkeley) %G%
# ifdef _DEFINE
# define EXTERN
# ifndef lint
# ifdef _DEFINE
# define EXTERN
# ifndef lint
-static char SmailSccsId[] = "@(#)sendmail.h 8.104 %G%";
+static char SmailSccsId[] = "@(#)sendmail.h 8.105 %G%";
# endif
# else /* _DEFINE */
# define EXTERN extern
# endif
# else /* _DEFINE */
# define EXTERN extern
struct envelope *e_parent; /* the message this one encloses */
struct envelope *e_sibling; /* the next envelope of interest */
char *e_bodytype; /* type of message body */
struct envelope *e_parent; /* the message this one encloses */
struct envelope *e_sibling; /* the next envelope of interest */
char *e_bodytype; /* type of message body */
- char *e_df; /* location of temp file */
FILE *e_dfp; /* temporary file */
char *e_id; /* code for this entry in queue */
FILE *e_xfp; /* transcript file */
FILE *e_dfp; /* temporary file */
char *e_id; /* code for this entry in queue */
FILE *e_xfp; /* transcript file */
#define EF_NL_NOT_EOL 0x0040000 /* don't accept raw NL as EOLine */
#define EF_CRLF_NOT_EOL 0x0080000 /* don't accept CR-LF as EOLine */
#define EF_RET_PARAM 0x0100000 /* RCPT command had RET argument */
#define EF_NL_NOT_EOL 0x0040000 /* don't accept raw NL as EOLine */
#define EF_CRLF_NOT_EOL 0x0080000 /* don't accept CR-LF as EOLine */
#define EF_RET_PARAM 0x0100000 /* RCPT command had RET argument */
+#define EF_HAS_DF 0x0200000 /* set when df file is instantiated */
EXTERN ENVELOPE *CurEnv; /* envelope currently being processed */
\f/*
EXTERN ENVELOPE *CurEnv; /* envelope currently being processed */
\f/*