/* ** ** Defs.h: header file for rmail/smail. ** ** Configuration options for rmail/smail. ** default configuration is: ** full domain name is 'hostname.uucp' (get registered!) ** path file is /usr/lib/uucp/paths. ** no log, no record, use sendmail. ** ** You can change these in the next few blocks. ** */ /* ** @(#)defs.h 2.5 (smail) 9/15/87 */ /* ** Patched for MS-DOS compatibility by Stephen Trier March, April and ** May, 1990. This file is in the public domain. ** ** Throughout the smail sources, all or almost all MS-DOS changes are ** #ifdef'ed to the symbol "MSDOS". These files were compiled under ** the Turbo C 2.0 standalone compiler using Borland make on an AT&T ** 6386 WGS under AT&T MS-DOS 3.3. Your mileage may vary. */ #ifndef VERSION #define VERSION "smail2.5/PC/1.0b3" #endif #ifdef __TURBOC__ /* Autodetect MS-DOS from Turbo C */ #define MSDOS /* Add clauses for other compilers here */ #endif #ifdef MSDOS typedef long int off_t; extern char *ms_hostname, *ms_hostdomain, *ms_smarthost, *ms_alias, *ms_fullnames, *ms_paths, *ms_username, *ms_logfile, *ms_lmail, *ms_tmpdir; #endif #ifndef MSDOS #define BSD /* if system is a Berkeley system */ #endif #ifdef MSDOS #undef SENDMAIL #else #define SENDMAIL "/usr/lib/sendmail" /* Turn off to use /bin/(l)mail only */ #endif #ifndef MSDOS # ifdef BSD # define GETHOSTNAME /* use gethostname() */ # else # define UNAME /* use uname() */ # endif /* if defined, HOSTNAME overrides UNAME and GETHOSTNAME */ /*#define HOSTNAME "host" /* literal name */ /*#define HOSTDOMAIN "host.dom" /* overrides default HOSTNAME.MYDOM */ #else /* !MSDOS */ #define HOSTNAME ms_hostname #define HOSTDOMAIN ms_hostdomain /* * .UUCP here is just for testing, GET REGISTERED in COM, EDU, etc. * See INFO.REGISTRY for details. */ #endif #define MYDOM ".UUCP" /* literal domain suffix */ /* * WARNING: DOMGATE is only for qualified gateways - use caution. * If you don't fully understand it - don't use it! * If you are not completely sure you need it - don't use it! * If you are not prepared to handle all addresses to MYDOM - don't use it! * * if defined, DOMGATE (DOMain GATEway) will cause addresses of the form * * user@MYDOM or MYDOM!user * * (with and without the leading '.' on MYDOM) * to be seen treated simply 'user' - a purely local address. * Then, it is left to the aliasing code to map it back to a * non-local address if necessary. */ /*#define DOMGATE /* Act as Domain Gateway */ /* * HIDDENHOSTS allows hosts that serve as domain gateways to hide * the subdomains beneath them. Mail that originates at any of * the hosts in the subdomain will appear to come from the gateway host. * Hence, mail from * * anything.hostdomain!user * * will appear to come from * * hostdomain!user * * A consequence is that return mail to hostdomain!user would need to * be forwarded to the proper subdomain via aliases or other forwarding * facilities. * * If you're using sendmail, then if defined here, * it should be used in ruleset 4 of the sendmail.cf, too. */ /*#define HIDDENHOSTS /* hide subdomains of hostdomain */ /* * Mail that would otherwise be undeliverable will be passed to the * aliased SMARTHOST for potential delivery. * * Be sure that the host you specify in your pathalias input knows that you're * using it as a relay, or you might upset somebody when they find out some * other way. If you're using 'foovax' as your relay, and below you have * #define SMARTHOST "smart-host", then the pathalias alias would be: * * smart-host = foovax */ #ifndef MSDOS # define SMARTHOST "smart-host" /* pathalias alias for relay host */ #else # define SMARTHOST ms_smarthost #endif /* ** ALIAS and CASEALIAS are used only if SENDMAIL is NOT defined. ** Sites using sendmail have to let sendmail do the aliasing. ** LOWERLOGNAME maps all local login names into lower case. This ** helps sites who have only upper case send mail to mixed case sites. */ #ifndef MSDOS # define ALIAS "/usr/lib/aliases" /* location of mail aliases */ #else # define ALIAS ms_alias #endif /*#define CASEALIAS /* make aliases case sensitive */ /*#define LOWERLOGNAME /* map local logins to lower case */ /* * defining FULLNAME means that Full Name resolution * will be attempted when necessary. * * the Full Name information will be taken from a * list of {Full Name, address} pairs. * The names in the list must be sorted * without regard to upper/lower case. * * defining DOT_REQD says that the user name must contain a '.' for * the Full Name search to be done. * * All full name searches are case insensitive. * */ #ifndef MS_DOS /* list of Full Name, address pairs */ # define FULLNAME "/usr/lib/fullnames" #else # define FULLNAME ms_fullnames #endif /*#define DOT_REQD /* Must be George.P.Burdell@gatech.EDU ** not just Burdell@gatech.EDU */ /* ** PATHS is name of pathalias file. This is mandatory. ** Define LOG if you want a log of mail. This can be handy for ** debugging and traffic analysis. ** Define RECORD for a copy of all mail. This uses much time and ** space and is only used for extreme debugging cases. */ #ifndef PATHS # ifndef MSDOS # define PATHS "/usr/lib/uucp/paths" /* location of the path database */ # else # define PATHS ms_paths # endif /* MSDOS */ #endif /* PATHS */ #ifndef MSDOS # define LOG "/usr/spool/uucp/mail.log" /* log of uucp mail */ /*#define RECORD "/tmp/mail.log" /* record of uucp mail */ #else # define LOG ms_logfile #endif /* ** Mailer options: ** RMAIL is the command to invoke rmail on machine sys. ** RARG is how to insulate metacharacters from RMAIL. ** LMAIL is the command to invoke the local mail transfer agent. ** LARG is how to insulate metacharacters from LMAIL. ** RLARG is LARG with host! on the front - to pass a uux addr to sendmail. ** SENDMAIL selects one of two sets of defines below for either ** using sendmail or /bin/lmail. */ #ifndef MSDOS #ifndef UUX #define UUX "/usr/bin/uux" /* location of uux command */ #endif #ifndef SMAIL #define SMAIL "/bin/smail" /* location of smail command */ #endif #else /* MSDOS */ #define UUX "uux" #define SMAIL "smail" #endif /* !MSDOS */ /* ** command used to retry failed mail, flag is used to set the routing level. */ #define VFLAG ((debug == VERBOSE)?"-v":"") #define RETRY(flag) "%s %s %s -f %s ", SMAIL, VFLAG, flag, spoolfile /* ** use the -a if you have it. This sometimes helps failed mail and warning ** messages get back to where the mail originated. ** ** some versions of uux can't do '-a' - pick one of the next two definitions */ /*#define RMAIL(flags,from,sys) "%s -a%s %s - %s!rmail",UUX,from,flags,sys /* */ #define RMAIL(flags,from,sys) "%s %s - %s!rmail",UUX,flags,sys /* */ #define RARG(user) " '(%s)'",user #define RFROM(frm,now,host) "From %s %.24s remote from %s\n",frm,now,host #ifdef SENDMAIL #define HANDLE JUSTUUCP /* see HANDLE definition below */ #define ROUTING JUSTDOMAIN /* see ROUTING definition below */ #define LMAIL(frm,sys) "%s -em -f%s",SENDMAIL,frm #define LARG(user) " '%s'",postmaster(user) #define RLARG(sys,frm) " '%s!%s'",sys,frm #define LFROM(frm,now,host) "From %s %.24s\n",frm,now #else /* !SENDMAIL */ #ifndef MSDOS #define HANDLE ALL #define ROUTING JUSTDOMAIN #ifdef BSD #define LMAIL(frm,sys) "/bin/mail" /* BSD local delivery agent */ #else #define LMAIL(frm,sys) "/bin/lmail" /* SV local delivery agent */ #endif #define LARG(user) " '%s'",postmaster(user) #define RLARG(sys,frm) " '%s!%s'",sys,frm #define LFROM(frm,now,host) "From %s %.24s\n",frm,now #else /* MSDOS */ #define HANDLE ALL #define ROUTING JUSTDOMAIN #define LMAIL(frm,sys) "%s",ms_lmail /* MS-DOS local delivery agent */ #define LARG(user) " %s",postmaster(user) #define RLARG(sys,frm) " %s!%s",sys,frm #define LFROM(frm,now,host) "From %s %.24s\n",frm,now #endif /* MSDOS */ #endif /* SENDMAIL */ /* ** The following definitions affect the queueing algorithm for uux. ** ** DEFQUEUE if defined the default is to queue uux mail ** ** QUEUECOST remote mail with a cost of less than QUEUECOST ** will be handed to uux for immediate delivery. ** ** MAXNOQUEUE don't allow more than 'n' immediate delivery ** jobs to be started on a single invocation of smail. ** ** GETCOST if defined, the paths file will be searched for ** each address to discover the cost of the route. ** this allows informed decisions about whether to ** use the queue flags when calling uux. The price ** is in the overhead of a paths file search for ** addresses that are not going to be routed. */ #define DEFQUEUE /* default is to queue uux jobs */ #define QUEUECOST 100 /* deliver immediately if the cost /* is DEDICATED+LOW or better */ #define MAXNOQUEUE 2 /* max UUX_NOQUEUE jobs */ #define GETCOST /* search for cost */ #define UUX_QUEUE "-r" /* uux flag for queueing */ #define UUX_NOQUEUE "" /* uux with immediate delivery */ /* ** Normally, all mail destined for the local host is delivered with a single ** call to the local mailer, and all remote mail is delivered with one call ** to the remote mailer for each remote host. This kind of 'batching' saves ** on the cpu overhead. ** ** MAXCLEN is used to limit the length of commands that are exec'd by smail. ** This is done to keep other program's buffers from overflowing, or to ** allow for less intelligent commands which can take only one argument ** at a time (e.g., 4.1 /bin/mail). To disable the batching, set MAXCLEN ** a small value (like 0). */ #define MAXCLEN 128 /* longest command allowed (approx.) /* this is to keep other's buffers ** from overflowing */ /* ** PLEASE DON'T TOUCH THE REST */ #define SMLBUF 512 /* small buffer (handle one item) */ #define BIGBUF 4096 /* handle lots of items */ #define MAXPATH 32 /* number of elements in ! path */ #define MAXDOMS 16 /* number of subdomains in . domain */ #ifndef MSDOS # define MAXARGS 500 /* number of arguments */ #else /* MSDOS */ # define MAXARGS 127 /* number of arguments */ #endif #ifndef NULL #define NULL 0 #endif #define DEBUG if (debug==YES) (void) printf #define ADVISE if (debug!=NO) (void) printf #define error(stat,msg,a) { (void) fprintf(stderr, msg, a); exit(stat); } #define lower(c) ( isupper(c) ? c-'A'+'a' : c ) enum eform { /* format of addresses */ ERROR, /* bad or invalidated format */ LOCAL, /* just a local name */ DOMAIN, /* user@domain or domain!user */ UUCP, /* host!address */ ROUTE, /* intermediate form - to be routed */ SENT /* sent to a mailer on a previous pass */ }; enum ehandle { /* what addresses can we handle? (don't kick to LMAIL) */ ALL, /* UUCP and DOMAIN addresses */ JUSTUUCP, /* UUCP only; set by -l */ NONE /* all mail is LOCAL; set by -L */ }; enum erouting { /* when to route A!B!C!D */ JUSTDOMAIN, /* route A if A is a domain */ ALWAYS, /* route A always; set by -r */ REROUTE /* route C, B, or A (whichever works); set by -R */ }; enum edebug { /* debug modes */ NO, /* normal deliver */ VERBOSE, /* talk alot */ YES /* talk and don't deliver */ }; #ifdef BSD #include #include #else #include #include "sysexits.h" #define index strchr #define rindex strrchr #endif extern void exit(), perror(); extern unsigned sleep();