eliminate `D' line in qf file
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Wed, 22 Mar 1995 07:28:42 +0000 (23:28 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Wed, 22 Mar 1995 07:28:42 +0000 (23:28 -0800)
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

usr/src/usr.sbin/sendmail/src/collect.c
usr/src/usr.sbin/sendmail/src/deliver.c
usr/src/usr.sbin/sendmail/src/envelope.c
usr/src/usr.sbin/sendmail/src/mime.c
usr/src/usr.sbin/sendmail/src/queue.c
usr/src/usr.sbin/sendmail/src/savemail.c
usr/src/usr.sbin/sendmail/src/sendmail.h

index 1974489..3f72621 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-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>
@@ -74,6 +74,7 @@ maketemp(from)
        int mstate;
        char *pbp;
        char peekbuf[8];
        int mstate;
        char *pbp;
        char peekbuf[8];
+       char dfname[20];
        char bufbuf[MAXLINE];
        extern bool isheader();
        extern void eatheader();
        char bufbuf[MAXLINE];
        extern bool isheader();
        extern void eatheader();
@@ -95,11 +96,10 @@ maketemp(from)
        {
                struct stat stbuf;
 
        {
                struct stat stbuf;
 
-               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();
                }
@@ -112,6 +112,7 @@ maketemp(from)
                }
                HasEightBits = FALSE;
                e->e_msgsize = 0;
                }
                HasEightBits = FALSE;
                e->e_msgsize = 0;
+               e->e_flags |= EF_HAS_DF;
        }
 
        /*
        }
 
        /*
@@ -407,7 +408,7 @@ readerr:
                if (CollectErrno != 0)
                {
                        errno = CollectErrno;
                if (CollectErrno != 0)
                {
                        errno = CollectErrno;
-                       syserr(CollectErrorMessage, e->e_df);
+                       syserr(CollectErrorMessage, dfname);
                        finis();
                }
                usrerr(CollectErrorMessage);
                        finis();
                }
                usrerr(CollectErrorMessage);
@@ -530,10 +531,10 @@ readerr:
                        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);
                finis();
        }
 }
                finis();
        }
 }
@@ -580,7 +581,7 @@ tferror(tf, e)
                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))
index af40cf4..d0a07be 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-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"
@@ -358,7 +358,6 @@ sendall(e, mode)
                        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_df = 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)
@@ -374,15 +373,17 @@ sendall(e, mode)
                                        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_dfp = NULL;
                                ee->e_dfp = NULL;
-                               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)",
-                                               e->e_df, ee->e_df);
+                                               df1buf, df2buf);
                                }
                        }
 #ifdef LOG
                                }
                        }
 #ifdef LOG
@@ -2245,12 +2246,14 @@ putbody(mci, e, separator)
        **  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)
        {
@@ -2466,7 +2469,7 @@ putch:
 
        if (ferror(e->e_dfp))
        {
 
        if (ferror(e->e_dfp))
        {
-               syserr("putbody: %s: read error", e->e_df);
+               syserr("putbody: df%s: read error", e->e_id);
                ExitStat = EX_IOERR;
        }
 
                ExitStat = EX_IOERR;
        }
 
@@ -2585,13 +2588,15 @@ mailfile(filename, ctladdr, e)
                }
 
                /* 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);
                        }
                }
 
                        }
                }
 
index 177a317..6b9149b 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-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"
@@ -119,8 +119,7 @@ dropenvelope(e)
                        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;
@@ -282,8 +281,7 @@ dropenvelope(e)
                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
@@ -306,9 +304,10 @@ dropenvelope(e)
 
        /* 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_dfp = NULL;
        e->e_dfp = NULL;
-       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
@@ -345,7 +344,7 @@ clearenvelope(e, fullclear)
                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;
        }
 
index f07799e..c526f68 100644 (file)
@@ -10,7 +10,7 @@
 # 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%";
 #endif /* not lint */
 
 /*
 #endif /* not lint */
 
 /*
@@ -238,7 +238,7 @@ mime8to7(mci, header, e, boundaries, flags)
                /* 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)
@@ -270,7 +270,7 @@ mime8to7(mci, header, e, boundaries, flags)
                /* 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);
        }
 
        /*
        }
 
        /*
index e67979b..d5d37d7 100644 (file)
@@ -10,9 +10,9 @@
 
 #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)";
 #else
 #else
-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 */
 
@@ -155,18 +155,18 @@ queueup(e, queueall, announce)
        **  If there is no data file yet, create one.
        */
 
        **  If there is no data file yet, create one.
        */
 
-       if (e->e_df == NULL)
+       if (!bitset(EF_HAS_DF, e->e_flags))
        {
                register FILE *dfp;
        {
                register FILE *dfp;
+               char dfname[20];
                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",
-                               e->e_df, geteuid());
+                               dfname, geteuid());
                if (fstat(fd, &stbuf) < 0)
                        e->e_dfino = -1;
                else
                if (fstat(fd, &stbuf) < 0)
                        e->e_dfino = -1;
                else
@@ -174,6 +174,7 @@ queueup(e, queueall, announce)
                        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;
@@ -209,10 +210,9 @@ queueup(e, queueall, announce)
                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 */
+       /* output body type */
        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)
@@ -365,8 +365,8 @@ queueup(e, queueall, announce)
                /* 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)
@@ -381,7 +381,7 @@ queueup(e, queueall, announce)
 # 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))
@@ -1258,10 +1258,10 @@ readqf(e)
        OpMode = MD_DELIVER;
        ctladdr = NULL;
        e->e_dfino = -1;
        OpMode = MD_DELIVER;
        ctladdr = NULL;
        e->e_dfino = -1;
+       e->e_msgsize = -1;
        while ((bp = fgetfolded(buf, sizeof buf, qfp)) != NULL)
        {
                register char *p;
        while ((bp = fgetfolded(buf, sizeof buf, qfp)) != NULL)
        {
                register char *p;
-               struct stat st;
                u_long qflags;
                ADDRESS *q;
 
                u_long qflags;
                ADDRESS *q;
 
@@ -1311,19 +1311,7 @@ readqf(e)
                        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 */
@@ -1400,6 +1388,26 @@ readqf(e)
                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;
+               }
+       }
+
        return TRUE;
 }
 \f/*
        return TRUE;
 }
 \f/*
index 0c9b2c4..29acfa9 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-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"
@@ -891,7 +891,7 @@ errbody(mci, e, separator)
        */
 
        putline("", mci);
        */
 
        putline("", mci);
-       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);
 
index e0e2e39..c1669cb 100644 (file)
@@ -5,7 +5,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)sendmail.h  8.104 (Berkeley) %G%
+ *     @(#)sendmail.h  8.105 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -15,7 +15,7 @@
 # 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
@@ -372,7 +372,6 @@ ENVELOPE
        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 */
@@ -412,6 +411,7 @@ ENVELOPE
 #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/*