1: /*
   2: **  Sendmail
   3: **  Copyright (c) 1983  Eric P. Allman
   4: **  Berkeley, California
   5: **
   6: **  Copyright (c) 1983 Regents of the University of California.
   7: **  All rights reserved.  The Berkeley software License Agreement
   8: **  specifies the terms and conditions for redistribution.
   9: **
  10: **	@(#)sendmail.h	5.8 (Berkeley) 1/10/86
  11: */
  12: 
  13: /*
  14: **  SENDMAIL.H -- Global definitions for sendmail.
  15: */
  16: 
  17: 
  18: 
  19: # ifdef _DEFINE
  20: # define EXTERN
  21: # ifndef lint
  22: static char SmailSccsId[] = "@(#)sendmail.h	5.8		1/10/86";
  23: # endif lint
  24: # else  _DEFINE
  25: # define EXTERN extern
  26: # endif _DEFINE
  27: 
  28: # include <stdio.h>
  29: # include <ctype.h>
  30: # include <setjmp.h>
  31: # include "conf.h"
  32: # include "useful.h"
  33: 
  34: # ifdef LOG
  35: # include <sys/syslog.h>
  36: # endif LOG
  37: 
  38: # ifdef DAEMON
  39: # ifdef VMUNIX
  40: # include <sys/socket.h>
  41: # include <netinet/in.h>
  42: # endif VMUNIX
  43: # endif DAEMON
  44: 
  45: 
  46: # define PSBUFSIZE  (MAXNAME + MAXATOM) /* size of prescan buffer */
  47: 
  48: 
  49: /*
  50: **  Data structure for bit maps.
  51: **
  52: **	Each bit in this map can be referenced by an ascii character.
  53: **	This is 128 possible bits, or 12 8-bit bytes.
  54: */
  55: 
  56: #define BITMAPBYTES 16  /* number of bytes in a bit map */
  57: #define BYTEBITS    8   /* number of bits in a byte */
  58: 
  59: /* internal macros */
  60: #define _BITWORD(bit)   (bit / (BYTEBITS * sizeof (int)))
  61: #define _BITBIT(bit)    (1 << (bit % (BYTEBITS * sizeof (int))))
  62: 
  63: typedef int BITMAP[BITMAPBYTES / sizeof (int)];
  64: 
  65: /* test bit number N */
  66: #define bitnset(bit, map)   ((map)[_BITWORD(bit)] & _BITBIT(bit))
  67: 
  68: /* set bit number N */
  69: #define setbitn(bit, map)   (map)[_BITWORD(bit)] |= _BITBIT(bit)
  70: 
  71: /* clear bit number N */
  72: #define clrbitn(bit, map)   (map)[_BITWORD(bit)] &= ~_BITBIT(bit)
  73: 
  74: /* clear an entire bit map */
  75: #define clrbitmap(map)      bzero((char *) map, BITMAPBYTES)
  76: /*
  77: **  Address structure.
  78: **	Addresses are stored internally in this structure.
  79: */
  80: 
  81: struct address
  82: {
  83:     char        *q_paddr;   /* the printname for the address */
  84:     char        *q_user;    /* user name */
  85:     char        *q_host;    /* host name */
  86:     struct mailer   *q_mailer;  /* mailer to use */
  87:     u_short     q_flags;    /* status flags, see below */
  88:     short       q_uid;      /* user-id of receiver (if known) */
  89:     short       q_gid;      /* group-id of receiver (if known) */
  90:     char        *q_home;    /* home dir (local mailer only) */
  91:     char        *q_fullname;    /* full name if known */
  92:     struct address  *q_next;    /* chain */
  93:     struct address  *q_alias;   /* address this results from */
  94:     struct address  *q_tchain;  /* temporary use chain */
  95:     time_t      q_timeout;  /* timeout for this address */
  96: };
  97: 
  98: typedef struct address ADDRESS;
  99: 
 100: # define QDONTSEND  000001  /* don't send to this address */
 101: # define QBADADDR   000002  /* this address is verified bad */
 102: # define QGOODUID   000004  /* the q_uid q_gid fields are good */
 103: # define QPRIMARY   000010  /* set from argv */
 104: # define QQUEUEUP   000020  /* queue for later transmission */
 105: /*
 106: **  Mailer definition structure.
 107: **	Every mailer known to the system is declared in this
 108: **	structure.  It defines the pathname of the mailer, some
 109: **	flags associated with it, and the argument vector to
 110: **	pass to it.  The flags are defined in conf.c
 111: **
 112: **	The argument vector is expanded before actual use.  All
 113: **	words except the first are passed through the macro
 114: **	processor.
 115: */
 116: 
 117: struct mailer
 118: {
 119:     char    *m_name;    /* symbolic name of this mailer */
 120:     char    *m_mailer;  /* pathname of the mailer to use */
 121:     BITMAP  m_flags;    /* status flags, see below */
 122:     short   m_mno;      /* mailer number internally */
 123:     char    **m_argv;   /* template argument vector */
 124:     short   m_s_rwset;  /* rewriting set for sender addresses */
 125:     short   m_r_rwset;  /* rewriting set for recipient addresses */
 126:     char    *m_eol;     /* end of line string */
 127:     long    m_maxsize;  /* size limit on message to this mailer */
 128: };
 129: 
 130: typedef struct mailer   MAILER;
 131: 
 132: /* bits for m_flags */
 133: # define M_CANONICAL    'C' /* make addresses canonical "u@dom" */
 134: # define M_EXPENSIVE    'e' /* it costs to use this mailer.... */
 135: # define M_ESCFROM  'E' /* escape From lines to >From */
 136: # define M_FOPT     'f' /* mailer takes picky -f flag */
 137: # define M_HST_UPPER    'h' /* preserve host case distinction */
 138: # define M_INTERNAL 'I' /* SMTP to another sendmail site */
 139: # define M_LOCAL    'l' /* delivery is to this host */
 140: # define M_LIMITS   'L' /* must enforce SMTP line limits */
 141: # define M_MUSER    'm' /* can handle multiple users at once */
 142: # define M_NHDR     'n' /* don't insert From line */
 143: # define M_FROMPATH 'p' /* use reverse-path in MAIL FROM: */
 144: # define M_ROPT     'r' /* mailer takes picky -r flag */
 145: # define M_SECURE_PORT  'R' /* try to send on a reserved TCP port */
 146: # define M_STRIPQ   's' /* strip quote chars from user/host */
 147: # define M_RESTR    'S' /* must be daemon to execute */
 148: # define M_USR_UPPER    'u' /* preserve user case distinction */
 149: # define M_UGLYUUCP 'U' /* this wants an ugly UUCP from line */
 150: # define M_XDOT     'X' /* use hidden-dot algorithm */
 151: 
 152: EXTERN MAILER   *Mailer[MAXMAILERS+1];
 153: 
 154: EXTERN MAILER   *LocalMailer;       /* ptr to local mailer */
 155: EXTERN MAILER   *ProgMailer;        /* ptr to program mailer */
 156: /*
 157: **  Header structure.
 158: **	This structure is used internally to store header items.
 159: */
 160: 
 161: struct header
 162: {
 163:     char        *h_field;   /* the name of the field */
 164:     char        *h_value;   /* the value of that field */
 165:     struct header   *h_link;    /* the next header */
 166:     u_short     h_flags;    /* status bits, see below */
 167:     BITMAP      h_mflags;   /* m_flags bits needed */
 168: };
 169: 
 170: typedef struct header   HDR;
 171: 
 172: /*
 173: **  Header information structure.
 174: **	Defined in conf.c, this struct declares the header fields
 175: **	that have some magic meaning.
 176: */
 177: 
 178: struct hdrinfo
 179: {
 180:     char    *hi_field;  /* the name of the field */
 181:     u_short hi_flags;   /* status bits, see below */
 182: };
 183: 
 184: extern struct hdrinfo   HdrInfo[];
 185: 
 186: /* bits for h_flags and hi_flags */
 187: # define H_EOH      00001   /* this field terminates header */
 188: # define H_RCPT     00002   /* contains recipient addresses */
 189: # define H_DEFAULT  00004   /* if another value is found, drop this */
 190: # define H_RESENT   00010   /* this address is a "Resent-..." address */
 191: # define H_CHECK    00020   /* check h_mflags against m_flags */
 192: # define H_ACHECK   00040   /* ditto, but always (not just default) */
 193: # define H_FORCE    00100   /* force this field, even if default */
 194: # define H_TRACE    00200   /* this field contains trace information */
 195: # define H_FROM     00400   /* this is a from-type field */
 196: # define H_VALID    01000   /* this field has a validated value */
 197: /*
 198: **  Envelope structure.
 199: **	This structure defines the message itself.  There is usually
 200: **	only one of these -- for the message that we originally read
 201: **	and which is our primary interest -- but other envelopes can
 202: **	be generated during processing.  For example, error messages
 203: **	will have their own envelope.
 204: */
 205: 
 206: struct envelope
 207: {
 208:     HDR     *e_header;  /* head of header list */
 209:     long        e_msgpriority;  /* adjusted priority of this message */
 210:     time_t      e_ctime;    /* time message appeared in the queue */
 211:     char        *e_to;      /* the target person */
 212:     char        *e_receiptto;   /* return receipt address */
 213:     ADDRESS     e_from;     /* the person it is from */
 214:     char        **e_fromdomain; /* the domain part of the sender */
 215:     ADDRESS     *e_sendqueue;   /* list of message recipients */
 216:     ADDRESS     *e_errorqueue;  /* the queue for error responses */
 217:     long        e_msgsize;  /* size of the message in bytes */
 218:     int     e_nrcpts;   /* number of recipients */
 219:     short       e_class;    /* msg class (priority, junk, etc.) */
 220:     short       e_flags;    /* flags, see below */
 221:     short       e_hopcount; /* number of times processed */
 222:     int     (*e_puthdr)();  /* function to put header of message */
 223:     int     (*e_putbody)(); /* function to put body of message */
 224:     struct envelope *e_parent;  /* the message this one encloses */
 225:     struct envelope *e_sibling; /* the next envelope of interest */
 226:     char        *e_df;      /* location of temp file */
 227:     FILE        *e_dfp;     /* temporary file */
 228:     char        *e_id;      /* code for this entry in queue */
 229:     FILE        *e_xfp;     /* transcript file */
 230:     char        *e_message; /* error message */
 231:     char        *e_macro[128];  /* macro definitions */
 232: };
 233: 
 234: typedef struct envelope ENVELOPE;
 235: 
 236: /* values for e_flags */
 237: #define EF_OLDSTYLE 000001      /* use spaces (not commas) in hdrs */
 238: #define EF_INQUEUE  000002      /* this message is fully queued */
 239: #define EF_TIMEOUT  000004      /* this message is too old */
 240: #define EF_CLRQUEUE 000010      /* disk copy is no longer needed */
 241: #define EF_SENDRECEIPT  000020      /* send a return receipt */
 242: #define EF_FATALERRS    000040      /* fatal errors occured */
 243: #define EF_KEEPQUEUE    000100      /* keep queue files always */
 244: #define EF_RESPONSE 000200      /* this is an error or return receipt */
 245: #define EF_RESENT   000400      /* this message is being forwarded */
 246: 
 247: EXTERN ENVELOPE *CurEnv;    /* envelope currently being processed */
 248: /*
 249: **  Message priority classes.
 250: **
 251: **	The message class is read directly from the Priority: header
 252: **	field in the message.
 253: **
 254: **	CurEnv->e_msgpriority is the number of bytes in the message plus
 255: **	the creation time (so that jobs ``tend'' to be ordered correctly),
 256: **	adjusted by the message class, the number of recipients, and the
 257: **	amount of time the message has been sitting around.  This number
 258: **	is used to order the queue.  Higher values mean LOWER priority.
 259: **
 260: **	Each priority class point is worth WkClassFact priority points;
 261: **	each recipient is worth WkRecipFact priority points.  Each time
 262: **	we reprocess a message the priority is adjusted by WkTimeFact.
 263: **	WkTimeFact should normally decrease the priority so that jobs
 264: **	that have historically failed will be run later; thanks go to
 265: **	Jay Lepreau at Utah for pointing out the error in my thinking.
 266: **
 267: **	The "class" is this number, unadjusted by the age or size of
 268: **	this message.  Classes with negative representations will have
 269: **	error messages thrown away if they are not local.
 270: */
 271: 
 272: struct priority
 273: {
 274:     char    *pri_name;  /* external name of priority */
 275:     int pri_val;    /* internal value for same */
 276: };
 277: 
 278: EXTERN struct priority  Priorities[MAXPRIORITIES];
 279: EXTERN int      NumPriorities;  /* pointer into Priorities */
 280: /*
 281: **  Rewrite rules.
 282: */
 283: 
 284: struct rewrite
 285: {
 286:     char    **r_lhs;    /* pattern match */
 287:     char    **r_rhs;    /* substitution value */
 288:     struct rewrite  *r_next;/* next in chain */
 289: };
 290: 
 291: EXTERN struct rewrite   *RewriteRules[MAXRWSETS];
 292: 
 293: /*
 294: **  Special characters in rewriting rules.
 295: **	These are used internally only.
 296: **	The COND* rules are actually used in macros rather than in
 297: **		rewriting rules, but are given here because they
 298: **		cannot conflict.
 299: */
 300: 
 301: /* left hand side items */
 302: # define MATCHZANY  '\020'  /* match zero or more tokens */
 303: # define MATCHANY   '\021'  /* match one or more tokens */
 304: # define MATCHONE   '\022'  /* match exactly one token */
 305: # define MATCHCLASS '\023'  /* match one token in a class */
 306: # define MATCHNCLASS    '\024'  /* match anything not in class */
 307: # define MATCHREPL  '\025'  /* replacement on RHS for above */
 308: 
 309: /* right hand side items */
 310: # define CANONNET   '\026'  /* canonical net, next token */
 311: # define CANONHOST  '\027'  /* canonical host, next token */
 312: # define CANONUSER  '\030'  /* canonical user, next N tokens */
 313: # define CALLSUBR   '\031'  /* call another rewriting set */
 314: 
 315: /* conditionals in macros */
 316: # define CONDIF     '\032'  /* conditional if-then */
 317: # define CONDELSE   '\033'  /* conditional else */
 318: # define CONDFI     '\034'  /* conditional fi */
 319: 
 320: /* bracket characters for host name lookup */
 321: # define HOSTBEGIN  '\035'  /* hostname lookup begin */
 322: # define HOSTEND    '\036'  /* hostname lookup end */
 323: 
 324: /* \001 is also reserved as the macro expansion character */
 325: /*
 326: **  Information about hosts that we have looked up recently.
 327: **
 328: **	This stuff is 4.2/3bsd specific.
 329: */
 330: 
 331: # ifdef DAEMON
 332: # ifdef VMUNIX
 333: 
 334: # define HOSTINFO   struct hostinfo
 335: 
 336: HOSTINFO
 337: {
 338:     char        *ho_name;   /* name of this host */
 339:     struct in_addr  ho_inaddr;  /* internet address */
 340:     short       ho_flags;   /* flag bits, see below */
 341:     short       ho_errno;   /* error number on last connection */
 342:     short       ho_exitstat;    /* exit status from last connection */
 343: };
 344: 
 345: 
 346: /* flag bits */
 347: #define HOF_VALID   00001       /* this entry is valid */
 348: 
 349: # endif VMUNIX
 350: # endif DAEMON
 351: /*
 352: **  Symbol table definitions
 353: */
 354: 
 355: struct symtab
 356: {
 357:     char        *s_name;    /* name to be entered */
 358:     char        s_type;     /* general type (see below) */
 359:     struct symtab   *s_next;    /* pointer to next in chain */
 360:     union
 361:     {
 362:         BITMAP      sv_class;   /* bit-map of word classes */
 363:         ADDRESS     *sv_addr;   /* pointer to address header */
 364:         MAILER      *sv_mailer; /* pointer to mailer */
 365:         char        *sv_alias;  /* alias */
 366: # ifdef HOSTINFO
 367:         HOSTINFO    sv_host;    /* host information */
 368: # endif HOSTINFO
 369:     }   s_value;
 370: };
 371: 
 372: typedef struct symtab   STAB;
 373: 
 374: /* symbol types */
 375: # define ST_UNDEF   0   /* undefined type */
 376: # define ST_CLASS   1   /* class map */
 377: # define ST_ADDRESS 2   /* an address in parsed format */
 378: # define ST_MAILER  3   /* a mailer header */
 379: # define ST_ALIAS   4   /* an alias */
 380: # define ST_HOST    5   /* host information */
 381: 
 382: # define s_class    s_value.sv_class
 383: # define s_address  s_value.sv_addr
 384: # define s_mailer   s_value.sv_mailer
 385: # define s_alias    s_value.sv_alias
 386: # define s_host     s_value.sv_host
 387: 
 388: extern STAB *stab();
 389: 
 390: /* opcodes to stab */
 391: # define ST_FIND    0   /* find entry */
 392: # define ST_ENTER   1   /* enter if not there */
 393: /*
 394: **  STRUCT EVENT -- event queue.
 395: **
 396: **	Maintained in sorted order.
 397: **
 398: **	We store the pid of the process that set this event to insure
 399: **	that when we fork we will not take events intended for the parent.
 400: */
 401: 
 402: struct event
 403: {
 404:     time_t      ev_time;    /* time of the function call */
 405:     int     (*ev_func)();   /* function to call */
 406:     int     ev_arg;     /* argument to ev_func */
 407:     int     ev_pid;     /* pid that set this event */
 408:     struct event    *ev_link;   /* link to next item */
 409: };
 410: 
 411: typedef struct event    EVENT;
 412: 
 413: EXTERN EVENT    *EventQueue;        /* head of event queue */
 414: /*
 415: **  Operation, send, and error modes
 416: **
 417: **	The operation mode describes the basic operation of sendmail.
 418: **	This can be set from the command line, and is "send mail" by
 419: **	default.
 420: **
 421: **	The send mode tells how to send mail.  It can be set in the
 422: **	configuration file.  It's setting determines how quickly the
 423: **	mail will be delivered versus the load on your system.  If the
 424: **	-v (verbose) flag is given, it will be forced to SM_DELIVER
 425: **	mode.
 426: **
 427: **	The error mode tells how to return errors.
 428: */
 429: 
 430: EXTERN char OpMode;     /* operation mode, see below */
 431: 
 432: #define MD_DELIVER  'm'     /* be a mail sender */
 433: #define MD_ARPAFTP  'a'     /* old-style arpanet protocols */
 434: #define MD_SMTP     's'     /* run SMTP on standard input */
 435: #define MD_DAEMON   'd'     /* run as a daemon */
 436: #define MD_VERIFY   'v'     /* verify: don't collect or deliver */
 437: #define MD_TEST     't'     /* test mode: resolve addrs only */
 438: #define MD_INITALIAS    'i'     /* initialize alias database */
 439: #define MD_PRINT    'p'     /* print the queue */
 440: #define MD_FREEZE   'z'     /* freeze the configuration file */
 441: 
 442: 
 443: EXTERN char SendMode;   /* send mode, see below */
 444: 
 445: #define SM_DELIVER  'i'     /* interactive delivery */
 446: #define SM_QUICKD   'j'     /* deliver w/o queueing */
 447: #define SM_FORK     'b'     /* deliver in background */
 448: #define SM_QUEUE    'q'     /* queue, don't deliver */
 449: #define SM_VERIFY   'v'     /* verify only (used internally) */
 450: 
 451: /* used only as a parameter to sendall */
 452: #define SM_DEFAULT  '\0'        /* unspecified, use SendMode */
 453: 
 454: 
 455: EXTERN char ErrorMode;  /* error mode, see below */
 456: 
 457: #define EM_PRINT    'p'     /* print errors */
 458: #define EM_MAIL     'm'     /* mail back errors */
 459: #define EM_WRITE    'w'     /* write back errors */
 460: #define EM_BERKNET  'e'     /* special berknet processing */
 461: #define EM_QUIET    'q'     /* don't print messages (stat only) */
 462: 
 463: /* offset used to issure that the error messages for name server error
 464:  * codes are unique.
 465:  */
 466: #define MAX_ERRNO   100
 467: /*
 468: **  Global variables.
 469: */
 470: 
 471: EXTERN bool FromFlag;   /* if set, "From" person is explicit */
 472: EXTERN bool NoAlias;    /* if set, don't do any aliasing */
 473: EXTERN bool ForceMail;  /* if set, mail even if already got a copy */
 474: EXTERN bool MeToo;      /* send to the sender also */
 475: EXTERN bool IgnrDot;    /* don't let dot end messages */
 476: EXTERN bool SaveFrom;   /* save leading "From" lines */
 477: EXTERN bool Verbose;    /* set if blow-by-blow desired */
 478: EXTERN bool GrabTo;     /* if set, get recipients from msg */
 479: EXTERN bool NoReturn;   /* don't return letter to sender */
 480: EXTERN bool SuprErrs;   /* set if we are suppressing errors */
 481: EXTERN bool QueueRun;   /* currently running message from the queue */
 482: EXTERN bool HoldErrs;   /* only output errors to transcript */
 483: EXTERN bool NoConnect;  /* don't connect to non-local mailers */
 484: EXTERN bool SuperSafe;  /* be extra careful, even if expensive */
 485: EXTERN bool ForkQueueRuns;  /* fork for each job when running the queue */
 486: EXTERN bool AutoRebuild;    /* auto-rebuild the alias database as needed */
 487: EXTERN bool CheckAliases;   /* parse addresses during newaliases */
 488: EXTERN int  SafeAlias;  /* minutes to wait until @:@ in alias file */
 489: EXTERN time_t   TimeOut;    /* time until timeout */
 490: EXTERN FILE *InChannel; /* input connection */
 491: EXTERN FILE *OutChannel;    /* output connection */
 492: EXTERN int  RealUid;    /* when Daemon, real uid of caller */
 493: EXTERN int  RealGid;    /* when Daemon, real gid of caller */
 494: EXTERN int  DefUid;     /* default uid to run as */
 495: EXTERN int  DefGid;     /* default gid to run as */
 496: EXTERN int  OldUmask;   /* umask when sendmail starts up */
 497: EXTERN int  Errors;     /* set if errors (local to single pass) */
 498: EXTERN int  ExitStat;   /* exit status code */
 499: EXTERN int  AliasLevel; /* depth of aliasing */
 500: EXTERN int  MotherPid;  /* proc id of parent process */
 501: EXTERN int  LineNumber; /* line number in current input */
 502: EXTERN time_t   ReadTimeout;    /* timeout on reads */
 503: EXTERN int  LogLevel;   /* level of logging to perform */
 504: EXTERN int  FileMode;   /* mode on files */
 505: EXTERN int  QueueLA;    /* load average starting forced queueing */
 506: EXTERN int  RefuseLA;   /* load average refusing connections are */
 507: EXTERN int  QueueFactor;    /* slope of queue function */
 508: EXTERN time_t   QueueIntvl; /* intervals between running the queue */
 509: EXTERN char *AliasFile; /* location of alias file */
 510: EXTERN char *HelpFile;  /* location of SMTP help file */
 511: EXTERN char *StatFile;  /* location of statistics summary */
 512: EXTERN char *QueueDir;  /* location of queue directory */
 513: EXTERN char *FileName;  /* name to print on error messages */
 514: EXTERN char *SmtpPhase; /* current phase in SMTP processing */
 515: EXTERN char *MyHostName;    /* name of this host for SMTP messages */
 516: EXTERN char *RealHostName;  /* name of host we are talking to */
 517: EXTERN char *CurHostName;   /* current host we are dealing with */
 518: EXTERN jmp_buf  TopFrame;   /* branch-to-top-of-loop-on-error frame */
 519: EXTERN bool QuickAbort; /*  .... but only if we want a quick abort */
 520: extern char *ConfFile;  /* location of configuration file [conf.c] */
 521: extern char *FreezeFile;    /* location of frozen memory image [conf.c] */
 522: extern char Arpa_Info[];    /* the reply code for Arpanet info [conf.c] */
 523: extern ADDRESS  NullAddress;    /* a null (template) address [main.c] */
 524: EXTERN char SpaceSub;   /* substitution for <lwsp> */
 525: EXTERN int  WkClassFact;    /* multiplier for message class -> priority */
 526: EXTERN int  WkRecipFact;    /* multiplier for # of recipients -> priority */
 527: EXTERN int  WkTimeFact; /* priority offset each time this job is run */
 528: EXTERN int  CheckPointLimit;    /* deliveries before checkpointing */
 529: EXTERN char *PostMasterCopy;    /* address to get errs cc's */
 530: EXTERN char *TrustedUsers[MAXTRUST+1];  /* list of trusted users */
 531: EXTERN char *UserEnviron[MAXUSERENVIRON+1]; /* saved user environment */
 532: /*
 533: **  Trace information
 534: */
 535: 
 536: /* trace vector and macros for debugging flags */
 537: EXTERN u_char   tTdvect[100];
 538: # define tTd(flag, level)   (tTdvect[flag] >= level)
 539: # define tTdlevel(flag)     (tTdvect[flag])
 540: /*
 541: **  Miscellaneous information.
 542: */
 543: 
 544: # include   <sysexits.h>
 545: 
 546: 
 547: /*
 548: **  Some in-line functions
 549: */
 550: 
 551: /* set exit status */
 552: #define setstat(s)  { \
 553:                 if (ExitStat == EX_OK || ExitStat == EX_TEMPFAIL) \
 554:                     ExitStat = s; \
 555:             }
 556: 
 557: /* make a copy of a string */
 558: #define newstr(s)   strcpy(xalloc(strlen(s) + 1), s)
 559: 
 560: #define STRUCTCOPY(s, d)    d = s
 561: 
 562: 
 563: /*
 564: **  Declarations of useful functions
 565: */
 566: 
 567: extern ADDRESS  *parseaddr();
 568: extern char *xalloc();
 569: extern bool sameaddr();
 570: extern FILE *dfopen();
 571: extern EVENT    *setevent();
 572: extern char *sfgets();
 573: extern char *queuename();
 574: extern time_t   curtime();

Defined variables

CheckPointLimit defined in line 528; used 1 times
CurEnv defined in line 247; used 222 times
EventQueue defined in line 413; used 11 times
RealGid defined in line 493; used 1 times
RealUid defined in line 492; used 1 times
SmailSccsId defined in line 22; never used

Defined struct's

address defined in line 81; used 8 times
envelope defined in line 206; used 6 times
event defined in line 402; used 4 times
hdrinfo defined in line 178; used 10 times
header defined in line 161; used 4 times
priority defined in line 272; used 2 times
  • in line 278(2)
rewrite defined in line 284; used 14 times
symtab defined in line 355; used 4 times

Defined typedef's

Defined macros

BITMAPBYTES defined in line 56; used 4 times
BYTEBITS defined in line 57; used 2 times
CONDELSE defined in line 317; used 1 times
CONDFI defined in line 318; used 1 times
CONDIF defined in line 316; used 1 times
EM_BERKNET defined in line 460; never used
EM_PRINT defined in line 457; never used
EM_QUIET defined in line 461; used 1 times
EM_WRITE defined in line 459; never used
EXTERN defined in line 25; used 69 times
HOF_VALID defined in line 347; never used
HOSTINFO defined in line 334; used 7 times
H_VALID defined in line 196; never used
MD_DELIVER defined in line 432; used 1 times
MD_FREEZE defined in line 440; used 1 times
MD_PRINT defined in line 439; used 1 times
MD_VERIFY defined in line 436; used 4 times
M_CANONICAL defined in line 133; used 1 times
M_ESCFROM defined in line 135; used 1 times
M_EXPENSIVE defined in line 134; used 1 times
M_FOPT defined in line 136; used 2 times
M_FROMPATH defined in line 143; used 1 times
M_HST_UPPER defined in line 137; used 1 times
M_INTERNAL defined in line 138; used 1 times
M_LIMITS defined in line 140; used 2 times
M_MUSER defined in line 141; used 1 times
M_NHDR defined in line 142; used 1 times
M_RESTR defined in line 147; used 1 times
M_ROPT defined in line 144; used 1 times
M_SECURE_PORT defined in line 145; never used
M_STRIPQ defined in line 146; used 1 times
M_UGLYUUCP defined in line 149; used 1 times
M_USR_UPPER defined in line 148; used 1 times
M_XDOT defined in line 150; used 2 times
QGOODUID defined in line 102; used 3 times
SM_FORK defined in line 447; used 2 times
SM_QUEUE defined in line 448; used 3 times
SM_QUICKD defined in line 446; never used
ST_ADDRESS defined in line 377; never used
ST_ALIAS defined in line 379; used 2 times
ST_HOST defined in line 380; used 2 times
ST_UNDEF defined in line 375; never used
_BITBIT defined in line 61; used 3 times
_BITWORD defined in line 60; used 3 times
clrbitmap defined in line 75; used 2 times
clrbitn defined in line 72; never used
s_address defined in line 383; never used
s_alias defined in line 385; used 2 times
s_host defined in line 386; used 5 times
tTdlevel defined in line 539; never used

Usage of this include

Last modified: 1986-01-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 4514
Valid CSS Valid XHTML 1.0 Strict