Annotation of coherent/a/tmp/smail/utils/defs.h, revision 1.1

1.1     ! root        1: /*
        !             2: **
        !             3: **  Defs.h:  header file for rmail/smail.
        !             4: **
        !             5: **  Configuration options for rmail/smail.
        !             6: **     default configuration is:
        !             7: **     full domain name is 'hostname.uucp' (get registered!)
        !             8: **     path file is /usr/lib/uucp/paths.
        !             9: **     no log, no record, use sendmail.
        !            10: ** 
        !            11: **  You can change these in the next few blocks.
        !            12: **
        !            13: */
        !            14: 
        !            15: /*
        !            16: **     @(#)defs.h      2.5 (smail) 9/15/87
        !            17: */
        !            18: 
        !            19: #ifndef VERSION
        !            20: #define        VERSION "smail2.5-coherent"
        !            21: #endif
        !            22: 
        !            23: /* COHERENT is compiler a defined symbol.  */
        !            24: #ifdef COHERENT
        !            25: #define off_t  long
        !            26: #define GETHOSTNAME
        !            27: #define GETDOMAIN
        !            28: #endif
        !            29: 
        !            30: /* #define BSD                         /* if system is a Berkeley system */
        !            31: 
        !            32: /* #define SENDMAIL "/usr/lib/sendmail"        /* Turn off to use /bin/(l)mail only */
        !            33: 
        !            34: #ifdef BSD
        !            35: #define GETHOSTNAME                    /* use gethostname() */
        !            36: #endif
        !            37: 
        !            38: #ifndef GETHOSTNAME
        !            39: #define UNAME                          /* use uname() */
        !            40: #endif
        !            41: 
        !            42: /* if defined, HOSTNAME overrides UNAME and GETHOSTNAME */
        !            43: /* #define HOSTNAME    "tsqali"                /* literal name */
        !            44: 
        !            45: /* #define HOSTDOMAIN  "tsqali.mwc.com"  /* overrides default HOSTNAME.MYDOM */
        !            46: 
        !            47: /*
        !            48:  * .UUCP here is just for testing, GET REGISTERED in COM, EDU, US, etc.
        !            49:  * See INFO.REGISTRY for details.
        !            50:  */
        !            51: 
        !            52: /* #define MYDOM               "mwc.com"               /* literal domain suffix */
        !            53: 
        !            54: /*
        !            55:  * WARNING: DOMGATE is only for qualified gateways - use caution.
        !            56:  * If you don't fully understand it - don't use it!
        !            57:  * If you are not completely sure you need it - don't use it!
        !            58:  * If you are not prepared to handle all addresses to MYDOM - don't use it!
        !            59:  *
        !            60:  * if defined, DOMGATE (DOMain GATEway) will cause addresses of the form
        !            61:  *
        !            62:  *     user@MYDOM or MYDOM!user
        !            63:  *
        !            64:  * (with and without the leading '.' on MYDOM)
        !            65:  * to be seen treated simply 'user' - a purely local address.
        !            66:  * Then, it is left to the aliasing code to map it back to a
        !            67:  * non-local address if necessary.
        !            68:  */
        !            69: 
        !            70: /* #define DOMGATE             /* Act as Domain Gateway */
        !            71: 
        !            72: /*
        !            73:  * HIDDENHOSTS allows hosts that serve as domain gateways to hide
        !            74:  * the subdomains beneath them.  Mail that originates at any of
        !            75:  * the hosts in the subdomain will appear to come from the gateway host.
        !            76:  * Hence, mail from
        !            77:  *
        !            78:  *             anything.hostdomain!user
        !            79:  *
        !            80:  * will appear to come from 
        !            81:  *
        !            82:  *             hostdomain!user
        !            83:  *
        !            84:  * A consequence is that return mail to hostdomain!user would need to
        !            85:  * be forwarded to the proper subdomain via aliases or other forwarding
        !            86:  * facilities.
        !            87:  *
        !            88:  * If you're using sendmail, then if defined here,
        !            89:  * it should be used in ruleset 4 of the sendmail.cf, too.
        !            90:  */
        !            91: 
        !            92: /*#define HIDDENHOSTS                  /* hide subdomains of hostdomain */
        !            93: 
        !            94: /*
        !            95:  * Mail that would otherwise be undeliverable will be passed to the
        !            96:  * aliased SMARTHOST for potential delivery.
        !            97:  *
        !            98:  * Be sure that the host you specify in your pathalias input knows that you're
        !            99:  * using it as a relay, or you might upset somebody when they find out some
        !           100:  * other way.  If you're using 'foovax' as your relay, and below you have
        !           101:  * #define SMARTHOST "smart-host", then the pathalias alias would be:
        !           102:  *
        !           103:  *     smart-host = foovax
        !           104:  */
        !           105: 
        !           106: #define SMARTHOST  "smart-host"        /* pathalias alias for relay host */
        !           107: 
        !           108: /*
        !           109: **  ALIAS and CASEALIAS are used only if SENDMAIL is NOT defined.
        !           110: **  Sites using sendmail have to let sendmail do the aliasing.
        !           111: **  LOWERLOGNAME maps all local login names into lower case.  This
        !           112: **  helps sites who have only upper case send mail to mixed case sites.
        !           113: */
        !           114: 
        !           115: #define ALIAS  "/usr/lib/mail/aliases" /* location of mail aliases       */
        !           116: /*#define CASEALIAS                    /* make aliases case sensitive    */
        !           117: /*#define LOWERLOGNAME                 /* map local logins to lower case */
        !           118: 
        !           119: /*
        !           120:  * define HOMEALIASES if you want each user to be able to specify
        !           121:  * aliases.  It must begin with a "/" because this string will be
        !           122:  * appended to the value of $HOME.
        !           123:  * Added for MWC by La Monte Yarroll, [email protected].
        !           124:  */
        !           125: 
        !           126: #define HOMEALIASES    "/.aliases"
        !           127: 
        !           128: /*
        !           129:  * defining FULLNAME means that Full Name resolution
        !           130:  * will be attempted when necessary.
        !           131:  *
        !           132:  * the Full Name information will be taken from a
        !           133:  * list of {Full Name, address} pairs.
        !           134:  * The names in the list must be sorted
        !           135:  * without regard to upper/lower case.
        !           136:  *
        !           137:  * defining DOT_REQD says that the user name must contain a '.' for
        !           138:  * the Full Name search to be done.
        !           139:  *
        !           140:  * All full name searches are case insensitive.
        !           141:  *
        !           142:  */
        !           143: 
        !           144: #define FULLNAME       "/usr/lib/mail/fullnames"
        !           145:                                        /* list of Full Name, address pairs */
        !           146: 
        !           147: /*#define DOT_REQD                     /* Must be [email protected]
        !           148:                                        ** not just  [email protected]
        !           149:                                        */
        !           150: 
        !           151: /*
        !           152: **     PATHS is name of pathalias file.  This is mandatory.
        !           153: **     Define LOG if you want a log of mail.  This can be handy for
        !           154: **     debugging and traffic analysis.
        !           155: **     Define RECORD for a copy of all mail.  This uses much time and
        !           156: **     space and is only used for extreme debugging cases.
        !           157: */
        !           158: 
        !           159: #ifndef PATHS
        !           160: #define PATHS  "/usr/lib/mail/paths"   /* location of the path database */
        !           161: #endif
        !           162: 
        !           163: #define LOG    "/usr/spool/uucp/.Log/mail/mail"        /* log of uucp mail */
        !           164: /*#define RECORD       "/tmp/mail.log"         /* record of uucp mail */
        !           165: 
        !           166: /*
        !           167: **  Mailer options:
        !           168: **     RMAIL is the command to invoke rmail on machine sys.
        !           169: **     RARG is how to insulate metacharacters from RMAIL. 
        !           170: **     LMAIL is the command to invoke the local mail transfer agent.
        !           171: **     LARG is how to insulate metacharacters from LMAIL. 
        !           172: **     RLARG is LARG with host! on the front - to pass a uux addr to sendmail.
        !           173: **     SENDMAIL selects one of two sets of defines below for either
        !           174: **     using sendmail or /bin/lmail.
        !           175: */     
        !           176: 
        !           177: #ifndef UUX
        !           178: #define UUX            "exec /usr/bin/uux"     /* location of uux command   */
        !           179: #endif
        !           180: 
        !           181: #ifndef SMAIL
        !           182: #define SMAIL          "exec /bin/smail"       /* location of smail command */
        !           183: #endif
        !           184: 
        !           185: /*
        !           186: ** command used to retry failed mail, flag is used to set the routing level.
        !           187: */
        !           188: #define VFLAG          ((debug == VERBOSE)?"-v":"")
        !           189: #define RETRY(flag)    "%s %s %s -f %s ", SMAIL, VFLAG, flag, spoolfile
        !           190: 
        !           191: /*
        !           192: ** use the -a if you have it.  This sometimes helps failed mail and warning
        !           193: ** messages get back to where the mail originated.
        !           194: **
        !           195: ** some versions of uux can't do '-a' - pick one of the next two definitions
        !           196: */
        !           197: 
        !           198: #define RMAIL(flags,from,sys) "%s -a%s %s - %s!rmail",UUX,from,flags,sys /* */
        !           199: /*#define RMAIL(flags,from,sys) "%s %s - %s!rmail",UUX,flags,sys /* */
        !           200: 
        !           201: #define RARG(user)             " '(%s)'",user
        !           202: #define RFROM(frm,now,host)    "From %s  %.24s remote from %s\n",frm,now,host
        !           203: 
        !           204: #ifdef SENDMAIL
        !           205: 
        !           206: #define HANDLE JUSTUUCP        /* see HANDLE definition below */
        !           207: #define ROUTING JUSTDOMAIN     /* see ROUTING definition below */
        !           208: 
        !           209: #define LMAIL(frm,sys)         "%s -em -f%s",SENDMAIL,frm
        !           210: #define LARG(user)             " '%s'",postmaster(user)
        !           211: #define RLARG(sys,frm)         " '%s!%s'",sys,frm
        !           212: #define LFROM(frm,now,host)    "From %s %.24s\n",frm,now
        !           213: 
        !           214: #else
        !           215: 
        !           216: #define HANDLE ALL
        !           217: #define ROUTING ALWAYS
        !           218: 
        !           219: #ifdef BSD
        !           220: #define LMAIL(frm,sys)         "/bin/mail"     /* BSD local delivery agent */
        !           221: #else
        !           222: #define LMAIL(frm,sys)         "exec /bin/lmail"       /* SV  local delivery agent */
        !           223: #endif
        !           224: 
        !           225: #define LARG(user)             " '%s'",postmaster(user)
        !           226: #define RLARG(sys,frm)         " '%s!%s'",sys,frm
        !           227: #define LFROM(frm,now,host)    "From %s %.24s\n",frm,now
        !           228: 
        !           229: #endif
        !           230: 
        !           231: /*
        !           232: **     The following definitions affect the queueing algorithm for uux.
        !           233: **
        !           234: **     DEFQUEUE        if defined the default is to queue uux mail
        !           235: **
        !           236: **     QUEUECOST       remote mail with a cost of less than QUEUECOST
        !           237: **                     will be handed to uux for immediate delivery.
        !           238: **
        !           239: **     MAXNOQUEUE      don't allow more than 'n' immediate delivery
        !           240: **                     jobs to be started on a single invocation of smail.
        !           241: **     
        !           242: **     GETCOST         if defined, the paths file will be searched for
        !           243: **                     each address to discover the cost of the route.
        !           244: **                     this allows informed decisions about whether to
        !           245: **                     use the queue flags when calling uux.  The price
        !           246: **                     is in the overhead of a paths file search for
        !           247: **                     addresses that are not going to be routed.
        !           248: */
        !           249: 
        !           250: #define DEFQUEUE                       /* default is to queue uux jobs */
        !           251: 
        !           252: #define QUEUECOST              100     /* deliver immediately if the cost
        !           253:                                        /* is DEDICATED+LOW or better */
        !           254: 
        !           255: #define MAXNOQUEUE             1       /* max UUX_NOQUEUE jobs         */
        !           256: 
        !           257: #define GETCOST                                /* search for cost              */
        !           258: 
        !           259: #define UUX_QUEUE              "-r"    /* uux flag for queueing        */
        !           260: #define UUX_NOQUEUE            ""      /* uux with immediate delivery  */
        !           261: 
        !           262: /*
        !           263: ** Normally, all mail destined for the local host is delivered with a single
        !           264: ** call to the local mailer, and all remote mail is delivered with one call
        !           265: ** to the remote mailer for each remote host.  This kind of 'batching' saves
        !           266: ** on the cpu overhead.
        !           267: **
        !           268: ** MAXCLEN is used to limit the length of commands that are exec'd by smail.
        !           269: ** This is done to keep other program's buffers from overflowing, or to
        !           270: ** allow for less intelligent commands which can take only one argument
        !           271: ** at a time (e.g., 4.1 /bin/mail).  To disable the batching, set MAXCLEN
        !           272: ** a small value (like 0).
        !           273: */
        !           274: 
        !           275: #define MAXCLEN                        512     /* longest command allowed (approx.)
        !           276:                                        /* this is to keep other's buffers
        !           277:                                        ** from overflowing
        !           278:                                        */
        !           279: 
        !           280: /* GATEWAY_NAME should only be used on gateway machines into the .ATT.COM
        !           281: ** domain. Since mail will appear to come from att.ATT.COM, there is no
        !           282: ** way of knowing WHICH gateway it came from. deliver.c was changed
        !           283: ** such that the GATEWAY_NAME was placed in the headers in a non-dangerous
        !           284: ** place so that it could be determined which gateway was used.
        !           285: ** If smail is not being run on a gateway, don't use this definition,
        !           286: **
        !           287: **  T. G. Thompson              Thu Apr  7 13:47:36 EDT 1988
        !           288: */
        !           289: /* #define GATEWAY_NAME "att-ih"       /* gateway name other than "att" */
        !           290: 
        !           291: 
        !           292: 
        !           293: /*
        !           294: ** PLEASE DON'T TOUCH THE REST
        !           295: */
        !           296: 
        !           297: #define SMLBUF 512     /* small buffer (handle one item) */
        !           298: #define BIGBUF 4096    /* handle lots of items */
        !           299:  
        !           300: #define MAXPATH        32      /* number of elements in ! path */
        !           301: #define MAXDOMS        16      /* number of subdomains in . domain */
        !           302: #define MAXARGS        500     /* number of arguments */
        !           303: #ifndef NULL
        !           304: #define NULL   0
        !           305: #endif
        !           306: 
        !           307: #define DEBUG          if (debug==YES) (void) printf
        !           308: #define ADVISE                 if (debug!=NO) (void) printf
        !           309: #define error(stat,msg,a)      { (void) fprintf(stderr, msg, a); exit(stat); }
        !           310: #define lower(c)               ( isupper(c) ? c-'A'+'a' : c )
        !           311: 
        !           312: 
        !           313: enum eform {   /* format of addresses */
        !           314:        ERROR,          /* bad or invalidated format */
        !           315:        LOCAL,          /* just a local name */
        !           316:        DOMAIN,         /* user@domain or domain!user */
        !           317:        UUCP,           /* host!address */
        !           318:        ROUTE,          /* intermediate form - to be routed */
        !           319:        SENT            /* sent to a mailer on a previous pass */
        !           320: };
        !           321: 
        !           322: enum ehandle {         /* what addresses can we handle? (don't kick to LMAIL) */
        !           323:        ALL,            /* UUCP and DOMAIN addresses */
        !           324:        JUSTUUCP,       /* UUCP only; set by -l  */
        !           325:        NONE            /* all mail is LOCAL; set by -L */
        !           326: };
        !           327: 
        !           328: enum erouting {        /* when to route A!B!C!D */
        !           329:        JUSTDOMAIN,     /* route A if A is a domain */
        !           330:        ALWAYS,         /* route A always; set by -r */
        !           331:        REROUTE         /* route C, B, or A (whichever works); set by -R */
        !           332: };
        !           333: 
        !           334: enum edebug {  /* debug modes */
        !           335:        NO,             /* normal deliver */
        !           336:        VERBOSE,        /* talk alot */
        !           337:        YES             /* talk and don't deliver */
        !           338: };
        !           339: 
        !           340: #ifdef BSD
        !           341: 
        !           342: #include <strings.h>
        !           343: #include <sysexits.h>
        !           344: 
        !           345: #else
        !           346: 
        !           347: #include <string.h>
        !           348: #include "sysexits.h"
        !           349: #define        index   strchr
        !           350: #define        rindex  strrchr
        !           351: 
        !           352: #endif
        !           353: extern void exit(), perror();
        !           354: extern unsigned sleep();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.