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

Defined variables

CurEnv defined in line 221; used 203 times
EventQueue defined in line 350; used 11 times
RealGid defined in line 423; used 1 times
RealUid defined in line 422; used 1 times
SmailSccsId defined in line 10; never used

Defined struct's

address defined in line 59; used 8 times
envelope defined in line 181; used 6 times
event defined in line 339; used 4 times
hdrinfo defined in line 154; used 10 times
header defined in line 137; used 4 times
priority defined in line 243; used 2 times
  • in line 249(2)
rewrite defined in line 258; used 14 times
symtab defined in line 297; used 4 times

Defined typedef's

EVENT defined in line 348; used 11 times
HDR defined in line 146; used 15 times

Defined macros

BITMAPBYTES defined in line 34; used 4 times
BYTEBITS defined in line 35; used 2 times
CONDELSE defined in line 291; used 1 times
CONDFI defined in line 292; used 1 times
CONDIF defined in line 290; used 1 times
EF_CLRQUEUE defined in line 214; used 1 times
EF_RESPONSE defined in line 218; used 2 times
EM_BERKNET defined in line 397; used 1 times
EM_PRINT defined in line 394; never used
EM_QUIET defined in line 398; used 1 times
EM_WRITE defined in line 396; used 2 times
EXTERN defined in line 13; used 54 times
H_FORCE defined in line 169; used 4 times
H_TRACE defined in line 170; used 4 times
MD_DELIVER defined in line 369; used 1 times
MD_FREEZE defined in line 377; used 1 times
MD_INITALIAS defined in line 375; used 4 times
MD_PRINT defined in line 376; used 2 times
MD_VERIFY defined in line 373; used 3 times
M_CANONICAL defined in line 118; used 1 times
M_EXPENSIVE defined in line 122; used 1 times
M_FOPT defined in line 111; used 2 times
M_FROMPATH defined in line 125; used 1 times
M_HST_UPPER defined in line 120; used 1 times
M_INTERNAL defined in line 124; used 1 times
M_LIMITS defined in line 123; used 2 times
M_MUSER defined in line 117; used 1 times
M_NHDR defined in line 114; used 1 times
M_ROPT defined in line 112; used 1 times
M_STRIPQ defined in line 116; used 1 times
M_UGLYUUCP defined in line 121; used 1 times
M_USR_UPPER defined in line 119; used 1 times
M_XDOT defined in line 126; used 2 times
QGOODUID defined in line 80; used 3 times
QPRIMARY defined in line 81; used 3 times
SM_FORK defined in line 384; used 2 times
SM_QUEUE defined in line 385; used 3 times
SM_QUICKD defined in line 383; never used
ST_ADDRESS defined in line 316; never used
ST_ALIAS defined in line 318; used 2 times
ST_UNDEF defined in line 314; never used
WKPRIFACT defined in line 252; used 1 times
WKTIMEFACT defined in line 253; used 1 times
_BITBIT defined in line 39; used 3 times
_BITWORD defined in line 38; used 3 times
bitintersect defined in line 497; used 2 times
buildaddr defined in line 498; used 2 times
checkcompat defined in line 500; used 2 times
clearenvelope defined in line 502; used 1 times
clrbitmap defined in line 53; used 2 times
clrbitn defined in line 50; used 1 times
s_address defined in line 321; never used
s_alias defined in line 323; used 2 times
sendtoargv defined in line 508; used 1 times
tTdlevel defined in line 456; never used

Usage of this include

Last modified: 1983-12-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3667
Valid CSS Valid XHTML 1.0 Strict