v08i055: Ease, a language for writing sendmail.cf files, Part03/04

sources-request at mirror.UUCP sources-request at mirror.UUCP
Thu Feb 12 06:32:24 AEST 1987


Submitted by: ksb at j.cc.purdue.edu
Mod.sources: Volume 8, Issue 55
Archive-name: ease/Part03

#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	config-files
mkdir config-files
chdir config-files
mkdir FINIS
chdir FINIS
cat << \SHAR_EOF > zerobase.cpp

/***********************************************************
 ***********************************************************
 ****
 ****	RULESET ZERO PREAMBLE
 ****
 ****	The beginning of ruleset zero is constant through all
 ****	configurations.
 ****
 ****	$Id: zerobase.cpp,v 1.4 86/04/04 14:31:36 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/

ruleset BASE_RW {

	/* first make canonical */

	if ( anypath < anypath > anypath )
		retry ( $1$2$3);			/* defocus */
	if ( path )
		next ( NAME_CANON ( $1 ) );		/* make canonical */

	/* handle special cases..... */

	if ( @ )
		resolve ( mailer (local),
			  user ("MAILER-DAEMON") );	/* handle <> form */
	if ( anypath < @[path] > anypath )
		resolve ( mailer (tcp),
			  host (hostnum ($2)),
			  user ("$1@[$2]$3") );		/* numeric internet spec */

	/* arrange for local names to be fully qualified */

	/***
	if ( anypath < anypath campushost > anypath )
		retry ( $1<$2$3".LOCAL">$4 );		/* user at campushost */
	/***
	if ( anypath < anypath berkhost > anypath )
		retry ( $1<$2$3".LOCAL">$4 );		/* user at berkhost */
	/***
	if ( anypath < path ".ARPA.LOCAL" > anypath )
		retry ( $1<$2".ARPA">$3 );		/* because ARPA is a host */

	/* delete local domain info -- this is a (temporary?) kludge */

	if ( anypath < anypath "." $localname > anypath )
		retry ( $1<$2>$3 );			/* strip local domain */
	if ( anypath < anypath "." localdomain > anypath )
		retry ( $1<$2>$4 );			/* strip local subdomains */

	/* now delete (more) local info */

	if ( anypath < anypath this_host "." topdomain_id > anypath )
		retry ( $1<$2>$5 );			/* this_host.LOCAL */
	if ( anypath < anypath this_host > anypath )
		retry ( $1<$2>$4 );			/* this_host */
	if ( anypath < anypath "." > anypath )
		retry ( $1<$2>$3 );			/* drop trailing dot */
	if ( < @ > : anypath )
		return ( BASE_RW ( $1 ) );		/* retry after route strip */
	if ( anypath < @ > )
		return ( BASE_RW ( $1 ) );		/* strip null trash and retry */


/********************************
 * End of ruleset zero preamble * 
 ********************************/
SHAR_EOF
if test 2139 -ne "`wc -c zerobase.cpp`"
then
echo shar: error transmitting zerobase.cpp '(should have been 2139 characters)'
fi
cat << \SHAR_EOF > version.cpp

/* $Id: version.cpp,v 1.3 85/05/04 17:01:03 acu Exp Locker: acu $ */

macro
	berkhosts = "4.41";
SHAR_EOF
if test 98 -ne "`wc -c version.cpp`"
then
echo shar: error transmitting version.cpp '(should have been 98 characters)'
fi
cat << \SHAR_EOF > pucc-h.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-H
 ****
 ****	$Id: pucc-h.mc,v 1.2 86/04/04 14:18:03 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/


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

macro
	m_sitename = "h.cc.purdue.edu";		/* internet hostname */
	berkname   = "h.cc.purdue.edu";		/* berknet hostname  */

class
	m_sitename = { "h.cc.purdue.edu", pucc-h, pucch, h };


#include "puccbase.cpp"


options
	/***
	o_slog = "1";		/* override logging level in base.cpp */


#include "zerobase.cpp"


/***********************************************
 **  Machine dependent part of ruleset zero   **
 ***********************************************/

	/* resolve berknet names */

	if ( < @berkhost > : path )
		resolve ( mailer ( berk ),
			  host ( $1 ),
			  user ( $2 ) );		/* @berkhost: ... */

	if ( usr < @berkhost > )
		resolve ( mailer ( berk ),
			  host ( $2 ),
			  user ( $1 ) );		/* user at berknethost */

	/* we don't do uucp */

	if ( anypath < @anypath ".UUCP" > anypath )
		resolve ( mailer ( error ),
			  user ( "Non-Local UUCP Mail Unavailable" ) );

	/* resolve campus names (actually, all non-local names) */

	if ( anypath < @anypath hostname > anypath )
		resolve ( mailer ( pcl ),
			  host ( $3 ),
			  user ( $1<@$2$3>$4 ) );	/* user at campushost */

	if ( path )
		resolve ( mailer ( local ),
			  user ( $1 ) );		/* everything else */


/**************************************
 **  Host dependent address cleanup  **
 **************************************/


ruleset HOSTDEP_RW {

	if ( anypath uucphost!usr at path )
		retry ( $3@$4 );			/* drop uucp forward */

	if ( anypath campushost ".ARPA" anypath )
		retry ( $1$2$3 );			/* drop ".ARPA" */

}

#include "pclm.cpp"
#include "berkm.cpp"
SHAR_EOF
if test 2042 -ne "`wc -c pucc-h.mc`"
then
echo shar: error transmitting pucc-h.mc '(should have been 2042 characters)'
fi
cat << \SHAR_EOF > phonenethosts.cpp
/*******************************************************
 *******************************************************
 ****
 ****	Phonenet Host List
 ****
 ****	Mail to these sites should be routed
 ****	through csnet-relay.
 ****
 ****	$Id: phonenethosts.cpp,v 1.3 85/07/10 22:37:28 acu Exp $
 ****
 *******************************************************
 *******************************************************/

class
	phonehosts = { albany, alcoa-atc, alcoa-sei, arizona, asu, bostonu,
		       boulder, brandeis, brown, brown-cogsci, btl, buffalo,
		       canisius, carleton, case, clemson, colgate, colostate,
		       ct, dartmouth, depaul, digital, duke, emory, france,
		       gatech, georgetown, germany, gmr, gte-labs, houston,
		       hplabs, ibm-sj, icase, indiana, iowa-state, israel, jhu,
		       kaist, kansas-state, kent, lsu, mcnc, mtu, ncar, nmsu,
		       nmt, northeastern, nsf-cs, nwu, ohio-state, okstate,
		       oregon-grad, oregon-state, penn-state, pitt, portland,
		       princeton, rit, rpi, scarolina, smu, src, suny-bing,
		       suny-sb, syr, tamu, tektronix, ti-csl, ti-eg, toronto,
		       tufts, tulane, uab, ubc, ucd, ucf, uchicago, uconn, 
		       ucsb, ucsc, udenver, ufl, uhcl, uiowa, ukans, ulowell,
		       umass, umass-boston, umich, umiss, umn-cs, unc, unh,
		       unl, unlv, uno, uoregon, upenn, usc-cse, usl, utd,
		       utenn, uvm, uwm, vanderbilt, virginia, vpi, wang-inst,
		       waterloo, williams, wfu, wright, wsu };
SHAR_EOF
if test 1481 -ne "`wc -c phonenethosts.cpp`"
then
echo shar: error transmitting phonenethosts.cpp '(should have been 1481 characters)'
fi
cat << \SHAR_EOF > Makefile
######################################################################
#
#	Makefile for Sendmail PUCC configuration files
#
#	$Id: Makefile,v 1.4 86/04/04 14:16:17 kcs Exp $
#
######################################################################


PUCCSRCS=pucc-h.mc \
	pucc-i.mc \
	pucc-j.mc \
	pucc-k.mc \
	stat-l.mc \
	pucc-n.mc \
	pucc-s.mc

GENSRCS=base.cpp \
	berkhosts.cpp \
	berkm.cpp \
	compat.cpp \
	localhosts.cpp \
	localm.cpp \
	pclm.cpp \
	puccbase.cpp \
	tcpm.cpp \
	version.cpp \
	zerobase.cpp

SRCS=	$(GENSRCS) $(PUCCSRCS)

PUCCALL=pucc-h.cf \
	pucc-i.cf \
	pucc-j.cf \
	pucc-k.cf \
	stat-l.cf \
	pucc-n.cf \
	pucc-s.cf

ALL=	$(PUCCALL)


.SUFFIXES: .mc .cf

.mc.cf:
	/lib/cpp $*.mc > $*.cf

all: $(ALL)

############################
#   special dependencies   #
############################

# pessimize -- basic dependencies
$(ALL): base.cpp berkhosts.cpp localm.cpp localhosts.cpp pclm.cpp puccbase.cpp \
	version.cpp zerobase.cpp

# hosts on berknet
pucc-h.cf: berkm.cpp

# hosts on the arpanet
pucc-j.cf: tcpm.cpp

# hosts on csnet
pucc-j.cf: phonenethosts.cpp

# mailers requiring backwards compatibility
berkm.cpp tcpm.cpp: compat.cpp

#####################
#   administrivia   #
#####################

sources: $(SRCS)

clean:
	rm -f $(ALL) a.out core errs
SHAR_EOF
if test 1283 -ne "`wc -c Makefile`"
then
echo shar: error transmitting Makefile '(should have been 1283 characters)'
fi
cat << \SHAR_EOF > base.cpp
/***********************************************************
 ***********************************************************
 ****
 ****	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.
 ****
 ****	$Id: base.cpp,v 1.3 85/05/04 17:00:43 acu Exp Locker: acu $
 ****
 ***********************************************************
 ***********************************************************/


#include "version.cpp"


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

macro
	m_daemon = "MAILER-DAEMON";
		/* my name */

	m_ufrom = "From ${m_sreladdr}  ${m_udate}";
		/* UNIX header format */

	m_addrops = ".:%@!^=/[]";
		/* delimiter (operator) characters */

	m_defaddr = concat ( 
			ifset (m_sname, "${m_sname} "),
			"<${m_sreladdr}>"
	    	    );
		/* format of a total name */

	m_smtp = "${m_oname} Sendmail ${m_version}/${berkhosts} ready at ${m_adate}";
		/* SMTP login message */


/***************
 **   Class   **
 ***************/

class
	uucphosts = {};

/*****************
 **   Options   **
 *****************/

options
	o_alias = "/usr/lib/aliases";
		/* location of alias file */

	o_ewait	= "10";
		/* wait up to ten minutes for alias file rebuild */

	o_bsub  = ".";
		/* substitution for space (blank) characters */

	o_delivery = d_background;
		/* default delivery mode (deliver in background) */

	/***
	o_qwait = "";
		/* (don't) connect to "expensive" mailers */

	o_tmode = "0600";
		/* temporary file mode */

	o_gid = "3";
		/* default GID (network) */

	o_fsmtp = "/usr/lib/sendmail.hf";
		/* location of help file */

	o_slog = "9";
		/* log level */

	/***
	o_dnet = "ARPA";
 		/* default network name */

	o_hformat = "";
 		/* default messages to old style */

	o_qdir = "/usr/spool/mqueue";
		/* queue directory */

	o_tread = "2h";
		/* read timeout -- violates protocols */

	o_flog = "/usr/lib/sendmail.st";
	 	/* status file */

	o_safe = "";
 		/* queue everything before transmission */

	o_qtimeout = "3d";
		/* default timeout interval */

	o_timezone = "EST";
 		/* time zone names (V6 only) */

	o_dmuid = "5";
 		/* default UID (network) */

	o_wizpass = "XXXXXXXXXXXXX";
	 	/* wizard's password */

	o_loadq = "999";
 		/* load average at which we just queue messages */

	o_loadnc = "999";
 		/* load average at which we refuse connections */


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

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


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

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


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

header
	define ("Received:", concat (ifset (m_shostname, "from ${m_shostname} "),
		"by ${m_oname}; ${m_adate}"));
	define ("Subject:", "");

	/*** 
	define ("Posted-Date:", "${m_odate}");
	 ***/

	for (f_return)
		define ("Return-Path:", "<${m_sreladdr}>");

	for (f_date) {
		define ("Resent-Date:", "${m_odate}");
		define ("Date:", 	"${m_odate}");
	};

	for (f_from) {
		define ("Resent-From:", "${m_defaddr}");
		define ("From:", 	"${m_defaddr}");
	};

	for (f_full)
		define ("Full-Name:", "${m_sname}");

	/***
	for (f_locm)
		define ("Received-Date:", "${m_adate}");
	 ***/

	for (f_mesg) {
		define ("Resent-Message-Id:", "<${m_ctime}.${m_qid}@${m_oname}>");
		define ("Message-Id:", 	      "<${m_ctime}.${m_qid}@${m_oname}>");
	};


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

/*************************
 **  Field definitions  **
 *************************/

field
	anypath			: match (0*);
	path, usr, hostpath,
	domain			: match (1*);
	this_host		: match (1) in m_sitename;
	hostname		: match (1);
	campushost		: match (1) in campushosts;
	localdomain		: match (1) in localname;
	topdomain_id		: match (1) in topdomain;
	uucphost		: match (1) in uucphosts;
	phonehost		: match (1) in phonehosts;

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

ruleset SEND_PRW {

/***
	if ( anypath < anypath > anypath )
		retry ( $1$2$3 );			/* defocus */

}

/***********************************
 *  Recipient Field Pre-rewriting  *
 ***********************************/

ruleset RECP_PRW {

/***
	if ( anypath < anypath > anypath )
		retry ( $1$2$3 );			/* defocus */

}


/*********************************
 *  Final Output Post-rewriting  *
 *********************************/

ruleset FINAL_RW {

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

	/* externalize local domain info */

	/***
	if ( anypath < anypath "LOCAL" > anypath )
		retry ( $1 < $2 $localname > $3 );	/* change local info */
	
	/***
	if ( anypath < anypath "LOCAL.ARPA" > anypath )
		retry ( $1 < $2 $localname > $3 );	/* change local info */

	if ( anypath < path > anypath )
		retry ( $1$2$3 );			/* defocus */
		
	if ( @path: @path: usr )
		retry ( @$1,@$2:$3);			/* <route-addr> canonical */

	/* UUCP must always be presented in old form */

	if ( usr @ hostname ".UUCP" )
		retry ( $2!$1);				/* u at h.UUCP => h!u */

	/* delete duplicate local names -- mostly for arpaproto.mc */

	if ( usr % this_host @ this_host )
		retry ( $1@$3 );			/* u%UCB at UCB => u at UCB */

	if ( usr % this_host @ this_host ".ARPA" )
		retry ( $1@$3 ".ARPA" );		/* u%UCB at UCB => u at UCB */

}


/***************************
 *  Name Canonicalization  *
 ***************************/

ruleset NAME_CANON {

	/* handle "from:<>" special case */

	if ( <>	)
		return ( @ );				/* turn into magic token */

	/* basic textual canonicalization -- note RFC733 heuristic here */

	if ( anypath < anypath < anypath < path > anypath > anypath > anypath )
		retry ( $4 );				/* 3-level <> nesting */

	if ( anypath < anypath < path > anypath > anypath )
		retry ( $3 );				/* 2-level <> nesting */

	if ( anypath < path > anypath )
		retry ( $2 );				/* basic RFC821/822 parsing */

	if ( usr " at " path )
		retry ( $1@$2 );			/* "at" -> "@" for RFC 822 */

	/* make sure <@a, at b, at c:user at d> syntax is easy to parse -- undone later */

	if ( @path, usr )
		retry ( @$1:$2 );			/* change all "," to ":" */

	/* localize and dispose of route-based addresses */

	if ( @path: usr )
		return ( LOCAL_RW ( <@$1>:$2 ) );	/* handle <route-addr> */

	/* more miscellaneous cleanup */

	if ( path )
		next ( HOSTDEP_RW ( $1 ) );		/* host dependent cleanup */

	if ( path: anypath; @domain )
		return ( $1:$2;@$3 );			/* list syntax */

	if ( usr @ domain )
		next ( $1<@$2> );			/* focus on domain */

	if ( path < path @ domain > )
		retry ( $1$2<@$3> );			/* move gaze right */

	if ( path < @domain > )
		return ( LOCAL_RW ( $1<@$2> ) );	/* already canonical */

	/* convert old-style addresses to a domain-based address */

	if ( usr % hostpath )
		return ( LOCAL_RW ( $1<@$2> ) );	/* user%host */

	if ( hostname:usr )
		return ( LOCAL_RW ( $2<@$1> ) );	/* host:user */	

	if ( hostname.usr )
		return ( LOCAL_RW ( $2<@$1> ) );	/* host.user */

	if ( hostname^usr )
		retry ( $1!$2);				/* convert ^ to ! */

	if ( hostname!usr )
		return ( LOCAL_RW ( $2<@$1".UUCP"> ) );	   /* resolve uucp names */

	if ( hostname=usr )
		return ( LOCAL_RW ( $2<@$1".BITNET"> ) );  /* resolve bitnet names */
SHAR_EOF
if test 7566 -ne "`wc -c base.cpp`"
then
echo shar: error transmitting base.cpp '(should have been 7566 characters)'
fi
cat << \SHAR_EOF > berkhosts.cpp
/***********************************************************
 ***********************************************************
 ****
 ****	Berknet Host List
 ****
 ****	$Id: berkhosts.cpp,v 1.4 85/07/21 22:15:14 acu Exp Locker: acu $
 ****
 ***********************************************************
 ***********************************************************/

class
	berkhosts = { C, pucc-c, puccc, 
		      D, pucc-d, puccd,
		      E, pucc-e, pucce,
		      X, asterix, library, libr,
		      W, physics, pur-phy, phy-a, 
		      physics-galileo, purdue-galileo, galileo };

SHAR_EOF
if test 576 -ne "`wc -c berkhosts.cpp`"
then
echo shar: error transmitting berkhosts.cpp '(should have been 576 characters)'
fi
cat << \SHAR_EOF > berkm.cpp
/***********************************************************
 ***********************************************************
 ****
 ****	Berknet Mailer specification
 ****
 ****	$Id: berkm.cpp,v 1.4 85/07/10 22:32:07 acu Exp $
 ****
 ***********************************************************
 ***********************************************************/

#ifdef cppCOMPAT
#include "compat.cpp"
#endif

mailer
	berk {
		Path	= "/usr/net/bin/sendberkmail",
		Flags	= { f_ffrom, f_strip, f_date, f_from, f_mesg, f_addrw };
		Sender  = BERKSEND_RW;
		Recipient = BERKREC_RW;
		Argv	= "sendberkmail -m ${m_rhost} -h ${m_hops} -t ${m_ruser}";
		Maxsize	= "25000"
	};

ruleset BERKSEND_RW {

	if ( path )
		next ( OLDSTYLE_RW ( $1 ) );		/* convert to old style */
	if ( hostname:usr )
		return ( $1:$2);			/* old berknet as is */

	if ( path < @path > )
		return ( $1<@$2> );			/* don't modify arpanet */

	if ( hostname!usr )
		return ( $1!$2 );			/* don't modify uucp */

	if ( < @path > )
		return ( <@$1> );			/* don't modify <routeaddr> */

	if ( path )
		return ( $m_shostname:$1 );		/* make others relative */

}


ruleset BERKREC_RW {

	if ( path )
		next ( OLDSTYLE_RW ( $1 ) );		/* convert to old style */

}
SHAR_EOF
if test 1211 -ne "`wc -c berkm.cpp`"
then
echo shar: error transmitting berkm.cpp '(should have been 1211 characters)'
fi
cat << \SHAR_EOF > compat.cpp
/***********************************************************
 ***********************************************************
 ****
 ****	Provide Backward Compatibility
 ****
 ****	$Id: compat.cpp,v 1.4 85/11/24 22:46:32 acu Exp $
 ****
 ***********************************************************
 ***********************************************************/

#define cppCOMPAT 4.2

field
	berkhost: match (1) in berkhosts;

/***************************************************
 * General code to convert back to old style names *
 ***************************************************/

ruleset OLDSTYLE_RW {

	if ( usr < @berkhost > )
		return ( $2:$1 );			/* u at bhost => h:u */

	if ( usr < @hostname ".UUCP" > )
		retry ( $2!$1 );			/* u at host.UUCP => host!u */

	if ( usr @ hostpath ".ARPA" )
		retry ( $1@$2 );			/* u at host.ARPA => u at host */

}
SHAR_EOF
if test 843 -ne "`wc -c compat.cpp`"
then
echo shar: error transmitting compat.cpp '(should have been 843 characters)'
fi
cat << \SHAR_EOF > localhosts.cpp
/***********************************************************
 ***********************************************************
 **** 
 ****	Campus Host List
 ****
 ****	$Id: localhosts.cpp,v 1.3 85/06/26 16:10:15 acu Exp $
 ****
 ***********************************************************
 ***********************************************************/

class
	campushosts = { pucc-c, c, puccc,
			pucc-d, d, puccd,
			pucc-e, e, pucce,
			pucc-h, h, pucch,
			pucc-i, i, pucci,
			pucc-j, j, puccj, pucc,
			pucc-k, k, pucck,
			pucc-n, n, puccn,
			stat-l, l, statl, stat,
			purdue-arthur, arthur, purdue, purdue-cs,
			purdue-merlin, merlin,
			purdue-mordred, mordred, cs,
			purdue-bmec, purdue-ecn-bmec, ecn-bmec, bmec,
			purdue-chem, purchem, chemistry, purdue-chemistry,
			purdue-dipl, ecn-dipl, dipl,
			purdue-ecn-ca, ecn-ca, ca, ca-en,
			purdue-ecn-cb, ecn-cb, cb, cb-en,
			purdue-ecn-ec, ecn-ec, ec, ec-en,
			purdue-ecn-ed, ecn-ed, ed, ed-en,
			purdue-ecn-ee, ecn-ee, ee, ee-en, pur-ee, ecn, purdue-ecn,
			purdue-ecn-ef, ecn-ef, ef, ef-en,
			purdue-ecn-ef, ecn-ef, ef, ef-rsch,
			purdue-ecn-eg, ecn-eg, eg, eg-en,
			purdue-ecn-eh, ecn-eh, eh, eh-en, ecn-test,
			purdue-ecn-ei, ecn-ei, ei, ei-en,
			purdue-ecn-ej, ecn-ej, ej, ej-en,
			purdue-ecn-ek, ecn-ek, ek, ek-en,
			purdue-ecn-ga, ecn-ga, ga, ga-en,
			purdue-ecn-gb, ecn-gb, gb, gb-en,
			purdue-ecn-ma, ecn-ma, ma, ma-en,
			purdue-ecn-mb, ecn-mb, mb, mb-en,
			purdue-ecn-md, ecn-md, md, md-en,
			purdue-ecn-pb, ecn-pb, pb, pb-en, cidmac,
			purdue-ecn-pc, ecn-pc, pc, pc-en,
			purdue-galileo, galileo, physics-galileo,
			purdue-malcolm, ecn-malcolm, malcolm,
			purdue-newton, newton, physics-newton,
			purdue-trillian, ecn-trillian, trillian,
			purdue-vlsi, puvlsi, vlsi,
			purdue-zaphod, ecn-zaphod, zaphod };

	/* non-standard names for CS hosts (translated to CS) */

	othercs = { cs-arthur, cs-mordred, cs-merlin };
SHAR_EOF
if test 1906 -ne "`wc -c localhosts.cpp`"
then
echo shar: error transmitting localhosts.cpp '(should have been 1906 characters)'
fi
cat << \SHAR_EOF > pclm.cpp
/****************************************************************************
 ****************************************************************************
 ****
 ****	PCL11 Mailer specification
 ****
 ****	Messages processed by this configuration are assumed to remain
 ****	in the same domain.  Hence, they may not necessarily correspond
 ****	to RFC822 in all details.
 ****
 ****	$Id: pclm.cpp,v 1.4 85/06/26 15:10:46 acu Exp $
 ****
 ****************************************************************************
 ****************************************************************************/

mailer
	pcl {
		Path	= "[IPC]",
		Flags	= { f_mult, f_date, f_from, f_mesg, f_upperu, 
			    f_addrw, f_dot, f_smtp },
		Sender	= HOSTNAME_RW,
		Recipient = HOSTNAME_RW,
		Argv	= "IPC ${m_rhost}",
		Maxsize = "100000"
	};

ruleset HOSTNAME_RW {

	if ( anypath < @path > anypath )
		return ( $1<@$2>$3 );			/* already ok */

	if ( path )
		return ( $1<@$m_sitename );		/* tack on our hostname */

}
SHAR_EOF
if test 995 -ne "`wc -c pclm.cpp`"
then
echo shar: error transmitting pclm.cpp '(should have been 995 characters)'
fi
cat << \SHAR_EOF > localm.cpp
/***********************************************************
 ***********************************************************
 ****
 ****	Local and Program Mailer specification
 ****
 ****	$Id: localm.cpp,v 1.4 85/07/10 22:38:09 acu Exp $
 ****
 ***********************************************************
 ***********************************************************/

mailer
	local {
		Path 	= "/bin/mail",
		Flags	= { f_rfrom, f_locm, f_strip, f_date, f_from,
			    f_mesg, f_mult, f_noufrom },
		Sender	= MAGIC_RW,
		Recipient = UNIMPLEMENTED,
		Argv	= "mail -d ${m_ruser}",
		Maxsize	= "200000"
	};

	prog {
		Path	= "/bin/sh",
		Flags	= { f_locm, f_strip, f_date, f_from, f_mesg, f_upperu },
		Sender	= MAGIC_RW,
		Recipient = UNIMPLEMENTED,
		Argv	= "sh -c ${m_ruser}",
		Maxsize	= "200000"
	};


ruleset MAGIC_RW {

	if ( @ )
		return ( "MAILER-DAEMON" );	/* errors to mailer-daemon */

}
SHAR_EOF
if test 893 -ne "`wc -c localm.cpp`"
then
echo shar: error transmitting localm.cpp '(should have been 893 characters)'
fi
cat << \SHAR_EOF > pucc-j.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-J
 ****
 ****	$Id: pucc-j.mc,v 1.2 86/04/04 14:20:57 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/



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

macro
	m_sitename = "j.cc.purdue.edu"; 	/* internet hostname */
	arpa_name  = "asc";			/* our arpanet name */

class
	m_sitename = { "j.cc.purdue.edu", pucc-j, puccj, j, pucc, purdue-asc, 
		        purdue-205-gw, purdue-asc-tn, asc, "asc.purdue.edu", 
		       "asc.cc.purdue.edu", 205-gw, asc-tn };

	arpa_name = { "asc.purdue.edu", "asc.cc.purdue.edu", asc, purdue-asc,
		       purdue-205-gw };

#include "phonenethosts.cpp"

#include "puccbase.cpp"

#include "zerobase.cpp"

/**********************************************
 **  Machine dependent part of ruleset zero  **
 **********************************************/

	/* send berknet names through relay */

	if ( < @berkhost > : path )
		resolve ( mailer ( pcl ),
			  host ( $relay_host ),
			  user ( $2<@$1> ) );		/* @berkhost: ... */

	if ( anypath < @anypath berkhost > anypath )
		resolve ( mailer ( pcl ),
			  host ( $relay_host ),
			  user ( $1<@$2$3>$4 ) );	/* user at berknethost */

	/* resolve campus names */

	if ( anypath < @anypath campushost > anypath )
		resolve ( mailer ( pcl ),
			  host ( $3 ),
			  user ( $1<@$2$3>$4 ) );	/* user at campushost */

	/* send csnet names through relay */

	if ( anypath < @phonehost > anypath )
		resolve ( mailer ( tcp ),
			  host ( "CSNet-Relay" ),
			  user ( $1%$2<@"CSNet-Relay">$3 ) );

	if ( anypath < @phonehost ".ARPA" > anypath )
		resolve ( mailer ( tcp ),
			  host ( "CSNet-Relay" ),
			  user ( $1%$2<@"CSNet-Relay">$3 ) );

	if ( anypath < @path ".CSNET" > anypath )
		resolve ( mailer ( tcp ),
			  host ( "CSNet-Relay" ),
			  user ( $1%$2<@"CSNet-Relay">$3 ) );

	/* we don't do uucp */

	if ( anypath < @anypath ".UUCP" > anypath )
		resolve ( mailer ( error ),
			  user ( "Non-Local UUCP Mail Unavailable" ) );

	/* we don't do bitnet (yet) */

	if ( anypath < @anypath ".BITNET" > anypath )
			resolve ( mailer ( error ),
				  user ( "Bitnet Mail Unavailable At This Time" ) );

	/* other non-local names to the arpanet */

	if ( anypath < @anypath > anypath )
		resolve ( mailer ( tcp ),
			  host ( $2 ),
			  user ( $1<@$2>$3 ) );		/* user at arpahost */

	/* remaining names must be local */

	if ( path )
		resolve ( mailer ( local ),
			  user ( $1 ) );		/* everything else */

/**************************************
 **  Host dependent address cleanup  **
 **************************************/

ruleset HOSTDEP_RW {

	if ( anypath uucphost!usr at hostpath )
		retry ( $3@$4 );			/* drop uucp forward */

}

#include "pclm.cpp"
#include "tcpm.cpp"
SHAR_EOF
if test 3004 -ne "`wc -c pucc-j.mc`"
then
echo shar: error transmitting pucc-j.mc '(should have been 3004 characters)'
fi
cat << \SHAR_EOF > pucc-i.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-I
 ****
 ****	$Id: pucc-i.mc,v 1.2 86/04/04 14:19:21 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/



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

macro
	m_sitename = "i.cc.purdue.edu"; 	/* internet hostname */

class
	m_sitename = { "i.cc.purdue.edu", pucc-i, pucci, i };

#include "puccbase.cpp"

options
	/***
	o_slog = "1"; 		/* override logging level in base.cpp */

#include "zerobase.cpp"

/**********************************************
 **  Machine dependent part of ruleset zero  **
 **********************************************/

	/* send berknet names through relay */

	if ( < @berkhost > : path )
		resolve ( mailer ( pcl ),
		  	  host ( $relay-host ),
		  	  user ( $2<@$1> ) );		/* @berkhost: ... */

	if ( anypath < @anypath berkhost > anypath )
		resolve ( mailer ( pcl ),
			  host ( $relay-host ),
			  user ( $1<@$2$3>$4 ) );	/* user at berknethost */

	/* we don't do uucp */

	if ( anypath < @anypath ".UUCP" > anypath )
		resolve ( mailer ( error ),
			  user ( "Non-Local UUCP Mail Unavailable" ) );

	/* resolve campus names (actually, all non-local names) */

	if ( anypath < @anypath hostname > anypath )
		resolve ( mailer ( pcl ),
			  host ( $3 ),
			  user ( $1<@$2$3>$4 ) );	/* user at campushost */

	/* remaining names must be local */

	if ( path )
		resolve ( mailer ( local ),
			  user ( $1 ) );		/* everything else */


/**************************************
 **  Host dependent address cleanup  **
 **************************************/

ruleset HOSTDEP_RW {

	if ( anypath uucphost!usr at path )
		retry ( $3@$4 );			/* drop uucp forward */

	if ( anypath campushost ".ARPA" anypath )
		retry ( $1$2$3 );			/* drop ".ARPA" */

}

#include "pclm.cpp"
SHAR_EOF
if test 2059 -ne "`wc -c pucc-i.mc`"
then
echo shar: error transmitting pucc-i.mc '(should have been 2059 characters)'
fi
cat << \SHAR_EOF > puccbase.cpp

/************************************************
 ************************************************
 ****
 ****	General configuration information
 ****
 ****	$Id: puccbase.cpp,v 1.4 86/04/04 14:25:46 kcs Exp $
 ****
 ************************************************
 ************************************************/

/********************
 *  General Macros  *
 ********************/

macro
	localname = "PURDUE.EDU"; 		/* local domain names */
	relay_host = "pucc-h";			/* berknet relay host */
	m_oname = "${m_sitename}";		/* my official hostname (sort of */

class
	localname = { "PURDUE.EDU", PURDUE, CC, Purdue-CS, CS, ECN };
	topdomain = { LOCAL, ARPA, UUCP, BITNET, CSNET };	/* known top-level domains */

#include "localhosts.cpp"
#include "berkhosts.cpp"
#include "base.cpp"

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

/*** special local conversions ***/
S6
# R$*<@$*$=D>$*		$1<@$2LOCAL>$4			convert local domain
# R$*<@$*$=D.ARPA>$*	$1<@$2LOCAL>$4
R$*<@$+.$=T.$=T>$*	$1<@$2.$3>$5			delete dup top level
R$*<@$*$=S.UUCP>$*	$1<@$2$3>$4			local UUCP direct
R$*<@$*$=Z.UUCP>$*	$1<@$2$3>$4			local UUCP direct
R$*<@$=Y$*>$*		$1<@cs$3>$4			cs-host => cs kludge


#include "localm.cpp"
SHAR_EOF
if test 1219 -ne "`wc -c puccbase.cpp`"
then
echo shar: error transmitting puccbase.cpp '(should have been 1219 characters)'
fi
chdir ..
cat << \SHAR_EOF > KEY
		USES FOR MACROS AND CLASSES

	MACROS				CLASSES
	======				=======

A	arpanet name			arpanet names
B
C	comp ctr gateway (ucbvax only)	comp ctr hosts (ucbvax & jade only)
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
D	full local domain name		(bottom) local domain names  $locdomain
E
F	forwarding host, $R default	hosts that we cannot talk directly to
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
G
H	internet name			all names this host is known by
I
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
J
K
L
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
M
N	ncp gateway			list of ncp-only hosts
O
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
P
Q
R	relay host (e.g., ucbvax)
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
S					known internet hostnames
T					top level domains
U	uucp name			uucp names
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
V	a machine with local uucp link	uucp sites on $V machine
W	a machine with local uucp link	uucp sites on $W machine
X	a machine with local uucp link	uucp sites on $X machine
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
Y
Z	config version code		known berknet hosts	$berkhosts
SHAR_EOF
if test 1377 -ne "`wc -c KEY`"
then
echo shar: error transmitting KEY '(should have been 1377 characters)'
fi
cat << \SHAR_EOF > README
Ironically enough, PUCC doesn't yet use ease for our configuration
files.  These are approximations to what will eventually become
our configuration files.  They are not entirely finished, but the ones
in "FINIS" are pretty much done, according to what Jim Schoner said
before he left.  Someday I'll finish them...

Jeff Smith
SHAR_EOF
if test 327 -ne "`wc -c README`"
then
echo shar: error transmitting README '(should have been 327 characters)'
fi
cat << \SHAR_EOF > pucc-k.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-K
 ****
 ****	$Id: pucc-k.mc,v 1.2 86/04/04 14:22:32 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/



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

/* internet hostname */
Dwk.cc.purdue.edu
Cwk.cc.purdue.edu pucc-k pucck k

#include "puccbase.cpp"

/* override logging level in base.cpp */
# OL1

#include "zerobase.cpp"

################################################
###  Machine dependent part of ruleset zero  ###
################################################

# send berknet names through relay
R<@$=Z>:$+		$#pcl$@$R$:$2<@$1>		@berkhost: ...
R$*<@$*$=Z>$*		$#pcl$@$R$:$1<@$2$3>$4		user at berknethost

# we don't do uucp 
R$*<@$*.UUCP>$*		$#error$:Non-Local UUCP Mail Unavailable

# resolve campus names (actually, all non-local names)
R$*<@$*$->$*		$#pcl$@$3$:$1<@$2$3>$4		user at campushost

# remaining names must be local
R$+			$#local$:$1			everything else

########################################
###  Host dependent address cleanup  ###
########################################

S8
R$*$=U!$+@$+		$3@$4				drop uucp forward
R$*$=S.ARPA$*		$1$2$3				drop ".ARPA"


include(pclm.cpp)
SHAR_EOF
if test 1462 -ne "`wc -c pucc-k.mc`"
then
echo shar: error transmitting pucc-k.mc '(should have been 1462 characters)'
fi
cat << \SHAR_EOF > pucc-n.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-N
 ****
 ****	$Id: pucc-n.mc,v 1.2 86/04/04 14:23:57 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/



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

/* internet hostname */
Dwn.cc.purdue.edu
Cwn.cc.purdue.edu pucc-n puccn n

#include "puccbase.cpp"

# override logging level in base.cpp
# OL1

include(zerobase.cpp)

################################################
###  Machine dependent part of ruleset zero  ###
################################################

# send berknet names through relay
R<@$=Z>:$+		$#pcl$@$R$:$2<@$1>		@berkhost: ...
R$*<@$*$=Z>$*		$#pcl$@$R$:$1<@$2$3>$4		user at berknethost

# we don't do uucp 
R$*<@$*.UUCP>$*		$#error$:Non-Local UUCP Mail Unavailable

# resolve campus names (actually, all non-local names)
R$*<@$*$->$*		$#pcl$@$3$:$1<@$2$3>$4		user at campushost

# remaining names must be local
R$+			$#local$:$1			everything else

########################################
###  Host dependent address cleanup  ###
########################################

S8
R$*$=U!$+@$+		$3@$4				drop uucp forward
R$*$=S.ARPA$*		$1$2$3				drop ".ARPA"


include(pclm.cpp)
SHAR_EOF
if test 1456 -ne "`wc -c pucc-n.mc`"
then
echo shar: error transmitting pucc-n.mc '(should have been 1456 characters)'
fi
cat << \SHAR_EOF > pucc-s.mc
/***********************************************************
 ***********************************************************
 ****
 ****	SENDMAIL CONFIGURATION FILE
 ****
 ****	For PUCC-S
 ****
 ****	$Id: pucc-s.mc,v 1.1 86/03/31 11:16:37 kcs Exp Locker: kcs $
 ****
 ***********************************************************
 ***********************************************************/



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

/* internet hostname */
Dws.cc.purdue.edu
Cws.cc.purdue.edu pucc-s puccs s

#include "puccbase.cpp"

/* override logging level in base.cpp */
# OL1

include(zerobase.cpp)

################################################
###  Machine dependent part of ruleset zero  ###
################################################

# send berknet names through relay
R<@$=Z>:$+		$#pcl$@$R$:$2<@$1>		@berkhost: ...
R$*<@$*$=Z>$*		$#pcl$@$R$:$1<@$2$3>$4		user at berknethost

# we don't do uucp 
R$*<@$*.UUCP>$*		$#error$:Non-Local UUCP Mail Unavailable

# resolve campus names (actually, all non-local names)
R$*<@$*$->$*		$#pcl$@$3$:$1<@$2$3>$4		user at campushost

# remaining names must be local
R$+			$#local$:$1			everything else

########################################
###  Host dependent address cleanup  ###
########################################

S8
R$*$=U!$+@$+		$3@$4				drop uucp forward
R$*$=S.ARPA$*		$1$2$3				drop ".ARPA"


include(pclm.cpp)
SHAR_EOF
if test 1472 -ne "`wc -c pucc-s.mc`"
then
echo shar: error transmitting pucc-s.mc '(should have been 1472 characters)'
fi
cat << \SHAR_EOF > puccbase.cpp

/************************************************
 ************************************************
 ****
 ****	General configuration information
 ****
 ****	$Id: puccbase.cpp,v 1.4 86/04/04 14:25:46 kcs Exp $
 ****
 ************************************************
 ************************************************/

/********************
 *  General Macros  *
 ********************/

macro
	localname = "PURDUE.EDU"; 		/* local domain names */
	relay_host = "pucc-h";			/* berknet relay host */
	m_oname = "${m_sitename}";		/* my official hostname (sort of */

class
	localname = { "PURDUE.EDU", PURDUE, CC, Purdue-CS, CS, ECN };
	topdomain = { LOCAL, ARPA, UUCP, BITNET, CSNET };	/* known top-level domains */

#include "localhosts.cpp"
#include "berkhosts.cpp"
#include "base.cpp"

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

/*** special local conversions ***/
S6
# R$*<@$*$=D>$*		$1<@$2LOCAL>$4			convert local domain
# R$*<@$*$=D.ARPA>$*	$1<@$2LOCAL>$4
R$*<@$+.$=T.$=T>$*	$1<@$2.$3>$5			delete dup top level
R$*<@$*$=S.UUCP>$*	$1<@$2$3>$4			local UUCP direct
R$*<@$*$=Z.UUCP>$*	$1<@$2$3>$4			local UUCP direct
R$*<@$=Y$*>$*		$1<@cs$3>$4			cs-host => cs kludge


#include "localm.cpp"
SHAR_EOF
if test 1219 -ne "`wc -c puccbase.cpp`"
then
echo shar: error transmitting puccbase.cpp '(should have been 1219 characters)'
fi
cat << \SHAR_EOF > stat-l.mc
############################################################
############################################################
#####
#####	SENDMAIL CONFIGURATION FILE
#####
#####	For STAT-L
#####
#####	$Id: stat-l.mc,v 1.2 86/04/04 14:27:47 kcs Exp $
#####
############################################################
############################################################



############################################################
###	local info
############################################################

# internet hostname
Dwstat-l
Cwstat-l statl l stat

include(puccbase.cpp)

include(zerobase.cpp)

################################################
###  Machine dependent part of ruleset zero  ###
################################################

# send berknet names through relay
R<@$=Z>:$+		$#pcl$@$R$:$2<@$1>		@berkhost: ...
R$*<@$*$=Z>$*		$#pcl$@$R$:$1<@$2$3>$4		user at berknethost

# we don't do uucp 
R$*<@$*.UUCP>$*		$#error$:Non-Local UUCP Mail Unavailable

# resolve campus names (actually, all non-local names)
R$*<@$*$->$*		$#pcl$@$3$:$1<@$2$3>$4		user at campushost

# remaining names must be local
R$+			$#local$:$1			everything else

########################################
###  Host dependent address cleanup  ###
########################################

S8
R$*$=U!$+@$+		$3@$4				drop uucp forward
R$*$=S.ARPA$*		$1$2$3				drop ".ARPA"


include(pclm.cpp)
SHAR_EOF
if test 1384 -ne "`wc -c stat-l.mc`"
then
echo shar: error transmitting stat-l.mc '(should have been 1384 characters)'
fi
cat << \SHAR_EOF > tcpm.cpp

/***********************************************************
 ***********************************************************
 ****
 ****	Arpanet TCP Mailer specification
 ****
 ****	Messages processed by this specification are assumed to leave
 ****	the local domain -- hence, they must be canonical according to
 ****	RFC822 etc.
 ****
 ****	$Id: tcpm.cpp,v 1.5 86/04/04 14:29:16 kcs Exp $
 ****
 ***********************************************************
 ***********************************************************/

#ifndef cppCOMPAT
#include "compat.cpp"
#endif

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


ruleset MAP_RW {

	/* pass <route-addr>'s through */

	/***
	if ( < @path > anypath )
		return ( <@canon($1)>$2 );		/* resolve <route-addr> */

	if ( < @path > anypath )
		return ( <@$1>$2 );			/* resolve <route-addr> */

	/* map colons to dots everywhere..... */

	if ( anypath : anypath )
		retry ( $1.$2 );			/* map colons to dots */

	/* handle the simple case.... */

	/***
	if ( path < @hostname ".ARPA" > )
		return ( $1<@canon($2".ARPA")> );	/* user at host.ARPA */

	if ( path < @hostname ".ARPA" > )
		return ( $1<@$2".ARPA"> );		/* user at host.ARPA */

	/***
	if ( path < @hostpath ".LOCAL" > )
# R$+<@$+.LOCAL>	$@$1%$2<@$A>			local hosts
# R$+<@$+.BITNET>	$@$1%$2.BITNET<@$A>		user at host.BITNET
# R$+<@$+.CSNET>	$@$1.$2<@CSNET-RELAY.ARPA>	user at host.CSNET

# handle other external cases
# R$+<@$->		$@$1<@$[$2$]>			no .ARPA on simple names
R$+<@$->		$@$1<@$2>			no .ARPA on simple names
R$+<@$+.$->		$@$1<@$2$3>			already ok (we think)
# R$+<@$+.$-.ARPA>	$@$1%$2<@$[$3.ARPA$]>		approximate something
R$+<@[$+]>		$@$1<@[$2]>			already ok

# convert remaining addresses to old format and externalize appropriately
R$+			$:$>5$1				=> old format
R$-:$+			$@$1.$2<@$A.$D>			convert berk hosts
R$*			$@$1<@$A.$D>			tack on our host name
SHAR_EOF
if test 2055 -ne "`wc -c tcpm.cpp`"
then
echo shar: error transmitting tcpm.cpp '(should have been 2055 characters)'
fi
chdir ..
#	End of shell archive
exit 0



More information about the Mod.sources mailing list