|
|
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();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.