/******************************************************/
/* This ease file generated by cfc from a sendmail.cf */
/* file. It must be edited by hand before being fed   */
/* to ease!                                           */
/******************************************************/

#define eval(x)"$&"x	/* for RUTGERS $& */


bind
	/* RULESET BINDINGS GO HERE (cfc) */

/* WARNING: This file belongs only on MIT-CHARON */
/* ############################################################ */

/* SENDMAIL CONFIGURATION FILE */

/* Cleaned up from ancient stuff by srz 10/12/86. */
/* It's been a long time since charon was put on the arpanet */
/* so things like MC forwarding can be punted. */
/* Feel free to make critical changes to this file, provided */
/* you know what you're doing.  Even so, please send mail */
/* to srz about them (hopefully local mail still works afterwards). */
/* This file has long suffered from changes that broke other */
/* things. */
/*  */
/* Added Cw line for SIPB-VAX and other aliases. */
/* srz 09/13/87 */

/* @(#)athena.mc	2.0		4/19/84 */

/* ############################################################ */


/* ############################################################ */
/* ###	local info */
/* ############################################################ */

/* domain */
macro
	D = "MIT.EDU";
class
	D = { MIT.EDU };

/* official hostname */
macro
	m_oname = "${m_sitename}.${D}";

/* Athena hosts */
class
	S = readclass ("/usr/lib/localhosts");

/* List of chaosnet hosts */
class
	C = readclass ("/etc/chaoshosts");

/* Names that I am also known as */
class
	w = { CHARON, SIPB-VAX, MIT-CHARON, SIPBVAX, SIPB };

/* forwarding host */
macro
	R = "athena";

/* List of local users */
class
	L = readclass ("/usr/lib/localusers");

/* UUCP forwarding host */
macro
	P = "eddie";

/* Magic ENET pathway */
macro
	E = "decvax!decwrl!rhea";

/* UUCP name */
macro
	U = "${m_sitename}";

/* ############################################################ */

/* General configuration information */

/* This information is basically just "boiler-plate"; it must be */
/* there, but is essentially constant. */

/* Information in this file should be independent of location -- */
/* i.e., although there are some policy decisions made, they are */
/* not specific to Berkeley per se. */

/* @(#)base.m4	4.3		8/30/83 */

/* ############################################################ */

/* @(#)version.m4	4.7		8/31/83 */

macro
	V = "4.7";


/* ########################## */
/* ###   Special macros   ### */
/* ########################## */

/* my name */
macro
	m_daemon = "MAILER-DAEMON";
/* UNIX header format */
macro
	m_ufrom = "From ${m_sreladdr}  ${m_udate}";
/* delimiter (operator) characters */
macro
	m_addrops = ".:%@!^=/[]";
/* format of a total name */
/* #Dq$g$?x ($x)$. */
macro
	m_defaddr = "ifset (m_sname, ${m_sname} )<${m_sreladdr}>";
/* SMTP login message */
macro
	m_smtp = "${m_oname} Sendmail ${m_version}/${V} ready at ${m_adate}";

/* forwarding host -- redefine this if you can't talk to the relay directly */
macro
	F = "${R}";

/* ################### */
/* ###   Options   ### */
/* ################### */

/* location of alias file */
options
	o_alias = "/usr/lib/aliases";
/* default delivery mode (deliver in background) */
options
	o_delivery = d_background;
/* (don't) connect to "expensive" mailers */
/* #Oc */
/* temporary file mode */
options
	o_tmode = "0600";
/* to and cc expansions which include sender should send to sender: */
options
	o_rsend = "";
/* default GID */
options
	o_gid = "1";
/* location of help file */
options
	o_fsmtp = "/usr/lib/sendmail.hf";
/* log level */
options
	o_slog = "9";
/* default messages to old style */
options
	o_hformat = "";
/* queue directory */
options
	o_qdir = "/usr/spool/mqueue";
/* read timeout -- violates protocols */
options
	o_tread = "2h";
/* status file */
options
	o_flog = "/usr/lib/sendmail.st";
/* queue up everything before starting transmission */
options
	o_safe = "";
/* default timeout interval */
options
	o_qtimeout = "3d";
/* time zone names (V6 only) */
options
	o_timezone = "EST,EDT";
/* default UID */
options
	o_dmuid = "1";
/* wizard's password */
options
	o_wizpass = "*";

/* ############################### */
/* ###   Message precedences   ### */
/* ############################### */

precedence
	first-class = 0;
precedence
	special-delivery = 100;
precedence
	junk = -100;

/* ######################### */
/* ###   Trusted users   ### */
/* ######################### */

trusted
	{ root };
trusted
	{ daemon };
trusted
	{ uucp };
trusted
	{ network };

/* ############################# */
/* ###   Format of headers   ### */
/* ############################# */

header
	for (f_return) {
		define ("Return-Path:", " <${m_sreladdr}>");
	};
header
	define ("Received:", " ifset (m_shostname, from ${m_shostname} )by ${m_oname} (${m_version}/${V})\
id ${m_qid}; ${m_adate}");
header
	for (f_date) {
		define ("Resent-Date:", " ${m_odate}");
	};
header
	for (f_date) {
		define ("Date:", " ${m_odate}");
	};
header
	for (f_from) {
		define ("Resent-From:", " ${m_defaddr}");
	};
header
	for (f_from) {
		define ("From:", " ${m_defaddr}");
	};
header
	for (f_full) {
		define ("Full-Name:", " ${m_sname}");
	};
header
	define ("Subject:", "");
/* HPosted-Date: $a */
/* H?l?Received-Date: $b */
header
	for (f_mesg) {
		define ("Resent-Message-Id:", " <${m_ctime}.${m_qid}@${m_oname}>");
	};
header
	for (f_mesg) {
		define ("Message-Id:", " <${m_ctime}.${m_qid}@${m_oname}>");
	};

/* ########################### */
/* ###   Rewriting rules   ### */
/* ########################### */


/* ################################ */
/* #  Sender Field Pre-rewriting  # */
/* ################################ */

/* These are sample field definitons (cfc) */

field
	zero_or_more : match (0*);
	one_or_more : match (1*);
	exactly_one : match (1);
	any_in_? : match (1) in ?;
	any_not_in_? : match (0) in ?;

ruleset
	RULESET_1 {
/* #R$*<$*>$*		$1$2$3				defocus */

/* ################################### */
/* #  Recipient Field Pre-rewriting  # */
/* ################################### */
	}
ruleset
	RULESET_2 {
/* #R$*<$*>$*		$1$2$3				defocus */

/* ################################# */
/* #  Final Output Post-rewriting  # */
/* ################################# */
	}
ruleset
	RULESET_4 {

	if (@)	/* handle <> error addr */
		return ();

/* externalize local domain info */
	if ( zero_or_more < one_or_more > zero_or_more )	/* defocus */
		retry ($1$2$3);
	if (@ one_or_more : one_or_more : one_or_more )	/* <route-addr> canonical */
		return (@$1,$2:$3);

/* UUCP must always be presented in old form */
	if ( one_or_more @ exactly_one ."UUCP")	/* u@h.UUCP => h!u */
		retry ($2!$1);

/* delete duplicate local names -- mostly for arpaproto.mc */
	if ( one_or_more % any_in_w @ any_in_w )	/* u%UCB@UCB => u@UCB */
		retry ($1@$3);
	if ( one_or_more % any_in_w @ any_in_w ."ARPA")	/* u%UCB@UCB => u@UCB */
		retry ($1@$3."ARPA");

/* ########################### */
/* #  Name Canonicalization  # */
/* ########################### */
	}
ruleset
	RULESET_3 {

/* handle "from:<>" special case */
	if (<>)	/* turn into magic token */
		return (@);

/* basic textual canonicalization */
	if ( zero_or_more < one_or_more > zero_or_more )	/* basic RFC821/822 parsing */
		retry ($2);
	if ( one_or_more " at " one_or_more )	/* "at" -> "@" for RFC 822 */
		retry ($1@$2);
	if ( zero_or_more < zero_or_more > zero_or_more )	/* in case recursive */
		retry ($1$2$3);

/* make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone later */
	if (@ one_or_more , one_or_more )	/* change all "," to ":" */
		retry (@$1:$2);

/* localize and dispose of domain-based addresses */
	if (@ one_or_more : one_or_more )	/* handle <route-addr> */
		return (RULESET_6 (<@$1>:$2));

/* more miscellaneous cleanup */
	if ( one_or_more )	/* host dependent cleanup */
		next (RULESET_8 ($1));
	if ( one_or_more : zero_or_more ;@ one_or_more )	/* list syntax */
		return ($1:$2;@$3);
	if ( one_or_more @ one_or_more )	/* focus on domain */
		next ($1<@$2>);
	if ( one_or_more < one_or_more @ one_or_more >)	/* move gaze right */
		retry ($1$2<@$3>);
	if ( one_or_more <@ one_or_more >)	/* already canonical */
		return (RULESET_6 ($1<@$2>));

/* convert old-style addresses to a domain-based address */
	if ( one_or_more % exactly_one )	/* user%hosta%hostb */
		return (RULESET_6 ($1<@$2>));
	if ( one_or_more % one_or_more )	/* user%host */
		return (RULESET_6 ($1<@$2>));
	if ( exactly_one : one_or_more )	/* host:user */
		return (RULESET_6 ($2<@$1>));
	if ( exactly_one . one_or_more )	/* host.user */
		return (RULESET_6 ($2<@$1>));
	if ( one_or_more ^ one_or_more )	/* convert ^ to ! */
		retry ($1!$2);
	if ( exactly_one ! one_or_more )	/* resolve uucp names */
		return (RULESET_6 ($2<@$1."UUCP">));
	if ( exactly_one = one_or_more )	/* resolve bitnet names */
		return (RULESET_6 ($2<@$1."BITNET">));

/* ############################################################ */
/* ############################################################ */
/* ##### */
/* #####		RULESET ZERO PREAMBLE */
/* ##### */
/* #####	The beginning of ruleset zero is constant through all */
/* #####	configurations. */
/* ##### */
/* #####	It has, however, been modified to work with Athena, since */
/* #####	It removes the domain from thishost.LOCAL.  We need to catch */
/* #####	that special case.  -Henry Holtzman [6/29/85] */
/* ##### */
/* #####		@(#)zerobase.m4	4.1		7/25/83 */
/* ##### */
/* ############################################################ */
/* ############################################################ */

	}
ruleset
	RULESET_0 {

/* first make canonical */
	if ( zero_or_more < zero_or_more > zero_or_more )	/* defocus */
		retry ($1$2$3);
	if ( one_or_more )	/* make canonical */
		next (RULESET_3 ($1));

/* handle special cases..... */
	if (@)	/* handle <> form */
		resolve (mailer (local),
				user (MAILER-DAEMON));
	if ( zero_or_more <@[ one_or_more ]> zero_or_more )	/* numeric internet spec */
		resolve (mailer (tcp),
				host ([$2]),
				user ($1@[$2]$3));

/* Special mod to work with athena local name routing */
/* Deliver to thishost.local */
	if ( zero_or_more < zero_or_more  any_in_w ."LOCAL"> zero_or_more )	/* Local mail here */
		resolve (mailer (local),
				user ($1));

/* arrange for local names to be fully qualified */
	if ( zero_or_more < zero_or_more  any_in_S > zero_or_more )	/* user@athenahost */
		retry ($1<$2$3.$D>$4);

/* now delete the local info */
/* #R$*<$*$=w.LOCAL>$*	$1<$2>$4			thishost.LOCAL (handled above) */
	if ( zero_or_more < zero_or_more  any_in_w ."ARPA"> zero_or_more )	/* thishost.ARPA */
		retry ($1<$2>$4);
	if ( zero_or_more < zero_or_more  any_in_w ."MIT"."EDU"> zero_or_more )	/* thishost.MIT.EDU */
		retry ($1<$2>$4);
	if ( zero_or_more < zero_or_more  any_in_w ."UUCP"> zero_or_more )	/* thishost.UUCP */
		retry ($1<$2>$4);
	if ( zero_or_more < zero_or_more  any_in_w > zero_or_more )	/* thishost */
		retry ($1<$2>$4);
	if ( zero_or_more < zero_or_more .> zero_or_more )	/* drop trailing dot */
		retry ($1<$2>$3);
	if (<@>: zero_or_more )	/* retry after route strip */
		return (RULESET_0 ($1));
	if ( zero_or_more <@>)	/* strip null trash & retry */
		return (RULESET_0 ($1));

/* forward around hosts with communication problems */
	if ( zero_or_more <@ any_in_F ."LOCAL"> zero_or_more )	/* reroute message */
		resolve (mailer (ether),
				host ($F),
				user ($1<@$2.LOCAL>$3));

/* ################################## */
/* #  End of ruleset zero preamble  # */
/* ################################## */


/* ############################################### */
/* ###  Machine dependent part of rulset zero  ### */
/* ############################################### */

/* resolve names that can go via the ethernet; */
/* the following line was replaced because all athena client machines will */
/* forward mail to mit-athena, so why not skip the hop?  Hop and skip? */
	if ( zero_or_more <@ zero_or_more  any_in_S ."LOCAL"> zero_or_more )	/* user@athenahost */
		resolve (mailer (ether),
				host ($3),
				user ($1<@$2$3.LOCAL>$4));
	if ( zero_or_more <@ zero_or_more  any_in_S .$D> zero_or_more )	/* user@athenahost */
		resolve (mailer (ether),
				host (mit-athena),
				user ($1<@$2$3.$D>$4));

/* resolve names that go to the chaosnet */
/* Following lines commented in 10/04/86 by srz because Chaos is fixed. */
/* also added in hard knowledge about chaos domains since classes don't */
/* work with . notation....  sigh. */
/* #R$*<@$=C.ARPA>$*	$1<@$2>				chuck .ARPA for chaos */
/* #R$+<@$=C>		$#chaos$@$2$:$1			send via chaosnet */
/* #R$+<@$=C.LCS.MIT.EDU>	$#chaos$@$2$:$1			send via chaosnet */
/* #R$+<@$=C.AI.MIT.EDU>	$#chaos$@$2$:$1			send via chaosnet */
/* #R$+<@$=C.MIT.EDU>	$#chaos$@$2$:$1			send via chaosnet */
/* #R$*<@$=C>		$#tcp$@EDDIE.MIT.EDU$:$1%$2<@EDDIE.MIT.EDU> */

/* resolve names that go into the DEC ENET */
	if ( zero_or_more <@ one_or_more ."ENET">)	/* forward .enet */
		retry ($E!$2!$1);
	if ( zero_or_more <@ one_or_more ."DEC"> zero_or_more )	/* forward .dec */
		resolve (mailer (tcp),
				host (DECWRL.ARPA),
				user ($1<@$2.DEC>$3));
/* resolve names we can handle locally */
	if (<@ one_or_more ."UUCP">: one_or_more )	/* to old format */
		retry ($1!$2);
	if ( one_or_more <@ one_or_more ."UUCP">)	/* to old format */
		retry ($2!$1);
	if ( exactly_one ! one_or_more )
		next ($1!$2<@$P>);
	if ( exactly_one ! one_or_more <@ any_in_w >)
		resolve (mailer (uucp),
				host ($1),
				user ($2));
	if ( exactly_one ! one_or_more <@ any_not_in_w >)
		resolve (mailer (tcp),
				host ($3),
				user ($1!$2));

/* Forward stuff for the bitnet domain. First to MITVMA. */
	if ( zero_or_more <@ exactly_one ."BITNET"> zero_or_more )
		resolve (mailer (tcp),
				host (MITVMA),
				user ($1<@$2.BITNET>$3));

/* with a default to a tcp style connection. */
	if ( zero_or_more <@ one_or_more > zero_or_more )
		resolve (mailer (tcp),
				host ($2),
				user ($1<@$2>$3));

/* The following line was the last rule, it was removed and replaced to */
/* impliment athena local host mail delivery. -Henry Holtzman [6/29/85] */
/* #R$+			$#local$:$1			local names */

/* New final rules: */

/* everything else must be a local name */
/* which needs to be forwarded to mit-athena. */
	if ( any_in_L  zero_or_more )	/* Unless in local class */
		resolve (mailer (local),
				user ($1));
	if ( exactly_one )
		resolve (mailer (ether),
				host (MIT-ATHENA),
				user ($1<@MIT-ATHENA>));
/* unless they are more than one token (like pipes) in which case do local. */
	if ( one_or_more )	/* Still around?->deliver */
		resolve (mailer (local),
				user ($1));

/* ############################################################ */
/* ############################################################ */
/* ##### */
/* #####		Local and Program Mailer specification */
/* ##### */
/* #####		@(#)localm.m4	4.1		7/25/83 */
/* ##### */
/* ############################################################ */
/* ############################################################ */

	}
mailer
	local {
		Path = "/bin/mail",
		Flags = { f_rfrom, f_locm, f_strip, f_date, f_from, f_mesg, f_mult, f_noufrom },
		Sender = RULESET_10,
		Recipient = RULESET_20,
		Argv = "mail -d ${m_ruser}"
	};
mailer
	prog {
		Path = "/bin/sh",
		Flags = { f_locm, f_strip, f_date, f_from, f_mesg, f_expensive },
		Sender = RULESET_10,
		Recipient = RULESET_20,
		Argv = "sh -c ${m_ruser}"
	};
mailer
	tty {
		Path = "/site/sipb/lib/to",
		Flags = { f_rfrom, f_locm, f_strip, f_noufrom },
		Sender = RULESET_10,
		Recipient = RULESET_20,
		Argv = "to ${m_ruser}",
		Maxsize = "5000"
	};

ruleset
	RULESET_10 {
	if (@)	/* errors to mailer-daemon */
		retry ("MAILER"-"DAEMON");
	if ( any_in_L %"charon"."LOCAL"<@"athena".$D>)	/* That's us.  Don't display. */
		retry ($1);
	}
ruleset
	RULESET_20 {
	if ( any_in_L %"charon"."LOCAL"<@"athena".$D>)	/* That's us.  Don't display. */
		retry ($1);

/* ############################################################ */
/* ############################################################ */
/* ##### */
/* #####		UUCP Mailer specification */
/* ##### */
/* #####		@(#)uucpm.m4	4.2		8/30/83 */
/* ##### */
/* ############################################################ */
/* ############################################################ */


	}
mailer
	uucp {
		Path = "/usr/bin/uux",
		Flags = { f_strip, f_date, f_from, f_mesg, f_upperh, f_upperu, f_ufrom },
		Sender = RULESET_13,
		Recipient = RULESET_23,
		Maxsize = "100000",
				Argv = "uux - ${m_rhost}!rmail (${m_ruser})"
	};

ruleset
	RULESET_13 {
	if ( one_or_more )	/* convert to old style */
		next (RULESET_5 ($1));
	if ( any_in_w ! one_or_more )	/* strip local name */
		retry ($U!$2);
	if ( zero_or_more <@ any_in_S > zero_or_more )	/* resolve abbreviations */
		retry ($1<@$2."ARPA">$3);
	if ( zero_or_more <@ exactly_one > zero_or_more )	/* resolve abbreviations */
		retry ($1<@$2."UUCP">$3);
/* #R$*<@$-.$->$*		$2!$1<.$3>$4 */
/* #R$+			$:$U!$1				stick on our host name */
/* #R$*<@$-.$->$*		$1@$2<.$3>$4 */

/* #R$*<@$+.$+>$*		$U!$2!$1$4 */
/* #R$=w!$=w!$*		$1!$3 */

	}
ruleset
	RULESET_23 {
	if ( one_or_more )	/* convert to old style */
		next (RULESET_5 ($1));
	if ( zero_or_more <@ any_in_S > zero_or_more )	/* resolve abbreviations */
		retry ($1<@$2."ARPA">$3);
	if ( zero_or_more <@ exactly_one > zero_or_more )	/* resolve abbreviations */
		retry ($1<@$2."UUCP">$3);

/* ############################################################ */
/* ############################################################ */
/* ##### */
/* #####		Ethernet Mailer specification */
/* ##### */
/* #####		@(#)etherm.m4	4.1		7/25/83 */
/* ##### */
/* ############################################################ */
/* ############################################################ */

	}
mailer
	ether {
		Path = "[IPC]",
		Flags = { f_mult, f_strip, f_date, f_from, f_mesg, f_upperu, f_expensive, f_addrw, f_dot },
		Sender = RULESET_11,
		Recipient = RULESET_21,
		Argv = "IPC ${m_rhost}"
	};
ruleset
	RULESET_11 {
	if ( zero_or_more <@ any_in_w . one_or_more > zero_or_more )	/* No matter what we are in our domain */
		next ($1<@$m_sitename.$D>$4);
	if ( zero_or_more <@ any_in_S > zero_or_more )	/* Tak on Athena domain if non-qualified */
		retry ($1<@$2.$D>$3);
	if ( zero_or_more <@ one_or_more ."CHAOS"> zero_or_more )	/* We will forward to Chaos machines */
		return ($1%$2<@$m_sitename.$D>$3);
	if ( zero_or_more <@ one_or_more ."UUCP"> zero_or_more )	/* Make UUCP addresses resonable */
		return ($2!$1<@$m_sitename.$D>$3);
	if ( exactly_one )	/* tag machine name on from local users */
		retry ($1<@$m_sitename.$D>);
	if ( any_in_L <@ any_in_w .$D> zero_or_more )	/* Make a replyable address */
		return ($1<%"charon"."LOCAL"@"athena".$D>$3);
	if ( any_not_in_L <@ any_in_w .$D> zero_or_more )	/* Send non-local users from @athena */
		return ($1<@"athena".$D>$3);
	if ( one_or_more )	/* Make sure we send it! */
		return ($1);

	}
ruleset
	RULESET_21 {
	if ( exactly_one )	/* no naked mail! */
		retry ($1<@$m_sitename.$D>);
	if ( any_in_L <@ any_in_w .$D> zero_or_more )	/* Make Replies work. */
		return ($1<%"charon"."LOCAL"@"athena".$D>$3);
	if ( any_not_in_L <@ any_in_w .$D> zero_or_more )	/* if not localuser, go through athena */
		return ($1<@"athena".$D>$3);
	if ( one_or_more )	/* Noop rule */
		return ($1);

/* ############################################################ */
/* ############################################################ */
/* ## */
/* ##	Chaos Mailer specification. */
/* ## */
/* ##	     07/21/84 by Jis */
/* ## */
/* ############################################################ */
/* ############################################################ */

	}
mailer
	chaos {
		Path = "/usr/local/lib/chaosmail",
		Flags = { f_noufrom, f_strip, f_mult, f_from, f_date, f_upperu, f_upperh, f_addrw },
		Sender = RULESET_22,
		Recipient = RULESET_23,
		Argv = "chaosmail ${m_rhost} ${m_ruser}"
	};

ruleset
	RULESET_22 {
	if ( zero_or_more <@ one_or_more > zero_or_more )
		return ($1<@$2>$3);
	if ( one_or_more )
		return ($1<@"CHARON"-"CHAOS"."MIT"."EDU">);

	}
ruleset
	RULESET_23 {
	if ( zero_or_more <@ zero_or_more >)
		return ($1@$2);
	if ( one_or_more )
		return ($1);



/* ############################################################ */
/* ############################################################ */
/* ##### */
/* #####		Arpanet TCP Mailer specification */
/* ##### */
/* #####		@(#)tcpm.m4	4.1		7/25/83 */
/* ##### */
/* ############################################################ */
/* ############################################################ */

	}
mailer
	tcp {
		Path = "[IPC]",
		Flags = { f_mult, f_strip, f_date, f_from, f_mesg, f_upperu, f_expensive, f_dot, f_llimit },
		Sender = RULESET_27,
		Recipient = RULESET_28,
		Argv = "IPC ${m_rhost}",
		Eol = "\r\n"
	};

ruleset
	RULESET_27 {

	if ( zero_or_more <@ any_in_w . one_or_more > zero_or_more )	/* No matter what we are in our domain */
		next ($1<@$m_sitename.$D>$4);
	if ( zero_or_more <@ any_in_S > zero_or_more )	/* Tak on Athena domain if non-qualified */
		retry ($1<@$2.$D>$3);
	if ( zero_or_more <@ one_or_more ."CHAOS"> zero_or_more )	/* We will forward to Chaos machines */
		return ($1%$2<@$m_sitename.$D>$3);
	if ( zero_or_more <@ one_or_more ."UUCP"> zero_or_more )	/* Make UUCP addresses resonable */
		return ($2!$1<@$m_sitename.$D>$3);
	if ( exactly_one )	/* tag machine name on from local users */
		retry ($1<@$m_sitename.$D>);
	if ( any_in_L <@ any_in_w .$D> zero_or_more )	/* Send localusers from ourhost */
		return ($1<@$2.$D>$3);
	if ( any_not_in_L <@ any_in_w .$D> zero_or_more )	/* Send non-local users from @athena */
		return ($1<@"athena".$D>$3);
	if ( one_or_more )	/* Make sure we send it! */
		return ($1);

	}
ruleset
	RULESET_28 {
	if ( exactly_one )	/* no naked mail! */
		retry ($1<@$m_sitename.$D>);
	if ( any_not_in_L <@ any_in_w .$D> zero_or_more )	/* if not localuser, go through athena */
		return ($1<@"athena".$D>$3);
	if ( one_or_more )	/* Noop rule */
		return ($1);
	}
