|
|
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.