[comp.sources.unix] v10i015: The IDA Sendmail Kit, Part04/07

rs@uunet.UUCP (06/23/87)

Mod.sources: Volume 10, Number 15
Submitted by: Lennart Lovstrand <mcvax!ida.liu.se!lel>
Archive-name: ida/Part04


#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 4 (of 7)."
# Contents:  ida/lib/xaliases ida/patches/parseaddr.c.diff
# Wrapped by lenlo@prefix on Wed Jun 10 15:39:55 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f ida/lib/xaliases -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/xaliases\"
else
echo shar: Extracting \"ida/lib/xaliases\" \(16825 characters\)
sed "s/^X//" >ida/lib/xaliases <<'END_OF_ida/lib/xaliases'
X##########################################################################
X## Alias file for IDA.LiU.SE aka liuida.UUCP				##
X##########################################################################
X#  Aliases in this file will NOT be expanded in message headers.
X#
X#  Aliases are recognized in any mix of upper and lower case,
X#  since they are all converted to lower case.
X#
X#	>>>>>>>>>>	A consequence of the above line is that mail
X#	>> BUG! >>	can't be aliased to addresses with capital
X#	>>>>>>>>>>	letters (eg. files).
X#
X#	>>>>>>>>>>	The program "newaliases" may need to be run after
X#	>> NOTE >>	this file is updated for any changes to
X#	>>>>>>>>>>	show through to sendmail.
X#
X##
X
X# Following alias is required by the new mail protocol, RFC 822
X# Set it to the address of a HUMAN who deals with this system's mail problems.
XPostmaster@ida:		lel@ida
XPostmaster:		Postmaster@ida
X
X# Alias for mailer daemon; returned messages from our MAILER-DAEMON
X# should be routed to our local Postmaster.
XMAILER-DAEMON, MAILER-DAEMON@ida:	Postmaster@ida
X
X# Aliases to handle mail to programs or files, eg news
Xb-smtp, b-smtp@ida:	"|egrep '^#' | sed 's/^#//' | /usr/lib/sendmail -bs"
Xdecode, decode@ida:	"|/usr/bin/uudecode"
Xnamelist, namelist@ida:	"|/usr/lib/uucp/reclist"
Xnobody, nobody@ida:	/dev/null
Xrnews, rnews@ida:	"|/usr/lib/news/uurec"
X
Xxlp@ida, xlp-e-1tr@ida:	xlp-e-1tr-s@ida
Xxlp-e-bv@ida:		xlp-e-bv-s@ida
Xxlp-b-1tr@ida:		xlp-b-1tr-s@ida
X
Xxlp-e-1tr-e@ida:	"|/usr/lib/mail/mahafilter -Pxlp-e-1tr"
Xxlp-e-bv-e@ida:		"|/usr/lib/mail/mahafilter -Pxlp-e-bv"
Xxlp-b-1tr-e@ida:	"|/usr/lib/mail/mahafilter -Pxlp-b-1tr"
X
Xxlp-e-1tr-s@ida:	"|/usr/lib/mail/mahafilter -Pxlp-e-1tr -S"
Xxlp-e-bv-s@ida:		"|/usr/lib/mail/mahafilter -Pxlp-e-bv -S"
Xxlp-b-1tr-s@ida:	"|/usr/lib/mail/mahafilter -Pxlp-b-1tr -S"
X
Xalw, alw-e-1tr:		"|lpr -Palw"
X
X#########################################################################
X# Specific mail -> news entries					
	#
X#########################################################################
X
Xtest-news@ida:		"|/usr/lib/news/inews -h -n test"
X
Xida-mac@ida:		"|/usr/lib/news/altrecnews ida.mac"
X
Xowner-ida-mac@ida:	Postmaster@ida
X
X#########################################################################
X# Misc generic system users						#
X#########################################################################
X
Xnews, news@ida:		Postmaster@ida
Xusenet, usenet@ida:	Postmaster@ida
Xdaemon, daemon@ida:	Postmaster@ida
Xuucp, uucp@ida:		Postmaster@ida
X
X#########################################################################
X# Misc mail group links						
	#
X#########################################################################
X
XIDA, IDA@IDA, IDA@LiU.SE:	IDA@LISBET
XADB@ida:			ADB@LISBET
XAIELAB@ida, AILAB@ida:		AIELAB@LISBET
XASLAB@ida:			ASLAB@LISBET
XCADLAB@ida:			CADLAB@LISBET
XLIBLAB@ida:			LIBLAB@LISBET
XNLPLAB@ida:			NLPLAB@LISBET
XPELAB@ida:			PELAB@LISBET
XRKLLAB@ida, RKL@ida:		RKLLAB@LISBET
X
Xowner-IDA, owner-IDA@IDA, owner-IDA@LiU.SE:	Postmaster@ida
Xowner-ADB@ida:			Postmaster@ida
Xowner-AIELAB@ida:		Postmaster@ida
Xowner-ASLAB@ida:		Postmaster@ida
Xowner-CADLAB@ida:		Postmaster@ida
Xowner-LIBLAB@ida:		Postmaster@ida
Xowner-NLPLAB@ida:		Postmaster@ida
Xowner-PELAB@ida:		Postmaster@ida
X
X#########################################################################
X# Arpanet mail group links						#
X#########################################################################
X
Xakt@ida:			AKT@LISBET
XARPAnet-BBoards@ida:		ARPANET-BBOARDS@LISBET
XExPhi-Group@ida:		:include:/usr/lib/mail/groups/exphi-group
XHorse-List@ida:			HORSE-LIST@LISBET
XIDA-Info-1100@ida:		:include:/usr/lib/mail/groups/ida-info-1100
XIDA-Bug-1100@ida:		BUG-1100@LISBET
Xida-info-gnu@ida:		:include:/usr/lib/mail/groups/ida-info-gnu
XInfo-Postscript@ida:		INFO-POSTSCRIPT@LISBET
Xlll@ida:			LASER-LOVERS@LISBET, Leif.Finmo@IDA
XMusic-Research@ida:		MUSIC-RESEARCH@LISBET, JANNE@TOKER
XNL-KR@ida:			NL-KR@LISBET
XParsym@ida:			PARSYM@LISBET
XProlog-Digest@ida:		PROLOG-DIGEST@LISBET
XPsychNet@ida:			PsychNet@LISBET
XSMAuG@ida:			SMAuG@LISBET
Xsunflash@ida:			:include: /usr/lib/mail/groups/sunflash
XTekTCP@ida:			TEKTCP@LISBET
XTeXHAX@ida:			TEXHAX@LISBET, Arne.Faldt@IDA
Xtester@ida:			:include:/usr/lib/mail/groups/foo
XTOPS-20-Experts@ida:		lenlo@ida, arnfa@ida
XTransputer@ida:			Transputer@LISBET, "|/usr/lib/news/altr
ecnews -h -a daemon@ida.liu.se -n fa.transputer"
X
Xowner-akt@ida:			Postmaster@ida
Xowner-ARPAnet-BBoards@ida:	Postmaster@ida
Xowner-ExPhi-Group@ida:		Postmaster@ida
Xowner-Horse-List@ida:		Postmaster@ida
Xowner-IDA-Info-1100@ida:	Postmaster@ida
Xowner-IDA-Bug-1100@ida:		Postmaster@ida
Xowner-ida-info-gnu@ida:		Postmaster@ida
Xowner-Info-Postscript@ida:	Postmaster@ida
Xowner-lll@ida:			Postmaster@ida
Xowner-Music-Research@ida:	Postmaster@ida
Xowner-nl-kr@ida:		Postmaster@ida
Xowner-parsym@ida:		Postmaster@ida
Xowner-prolog-digest@ida:	Postmaster@ida
Xowner-psychnet@ida:		Postmaster@ida
Xowner-SMAuG@ida:		Postmaster@ida
Xowner-sunflash@ida:		Postmaster@ida
Xowner-TekTCP@ida:		Postmaster@ida
Xowner-TeXHAX@ida:		Postmaster@ida
Xowner-tester@ida:		lel@ida
Xowner-TOPS-20-Experts@ida:	Postmaster@ida
Xowner-Transputer@ida:		Postmaster@ida
X
X#########################################################################
X# Individual local aliases						#
X#########################################################################
X
Xlennart:		lenlo
Xlin-p:			linpa				(Lin Padgham)
X
Xbly@ida:		jbl@ida				(Bryan Lyles)
Xbud@ida:		hla@ida				(Harald Lawson)
Xes@ida:			ejs@ida				(Erik Sandewall
)
Xjac@ida:		lel@ida				(Jacek's mail sent to L
eL)
Xjanba@ida:		lel@ida				(Janell's mail sent to 
lel)
Xjim@ida:		jwg@ida				(James W Goodwin)
Xlpa@ida:		lin@ida				(Lin Padgham)
Xola@ida:		olast@ida
Xpeter-f@ida:		petfr@majestix			(Peter Fritzsons bror, 
suck)
Xralf@ida:		rni@ida				(Ralf Nilsson)
Xralf-n@ida:		rni@ida				(Ralf Nilsson)
Xralf_n@ida:		rni@ida				(Ralf Nilsson)
Xrolf-k@ida:		rolka@ida			(Rolf Karlsson)
Xsandewal@ida:		ejs@ida				(Erik Sandewall)
Xsandewall@ida:		ejs@ida				(Erik Sandewall)
X
XvaxTest@ida:		lennart@hazel			(testing, testing...)
X
X# Temporary due to enea/seismo lossage
Xj-maluszynski@ida:	J-MALUSZYNSKI@LISBET
Xl-lovstrand@ida:	L-LOVSTRAND@LISBET
Xw-drabent@ida:		W-DRABENT@LISBET
X
X
X#########################################################################
X# Signature aliases							#
X#									#
X# The format here is:							#
X#	signature, altsign, full.name: alias-list			#
X# where alias-list is a comma and/or newline-separated list of user	#
X# names.  Each user name may be headed by a '<' and/or '>' with the	#
X# following meaning:							#
X#	 > user -- mail to this sign/full.name is delivered to the user	#
X#	<  user -- mail from this user is rewritten with the signature	#
X#		   as new sender					#
X#	<> user -- the combination of the above				#
X#	   user -- same as '> user'					#
X#									#
X# BE AWARE!  This special '<>' syntax is quite in antagony with RFC822	#
X#	     and was adapted only for its simplicity.  Any suggestions	#
X#	     for an alternative syntax are warmly welcomed.		#
X#########################################################################
X
Xaha@ida, andha@ida, Anders.Haraldsson@ida:	<> A-HARALDSSON@LISBET
Xajl@ida, andli@ida, Andrzej.Lingas@ida, lingas@ida: <> A-LINGAS@LISBET
Xaka@ida, andka@ida, Andreas.Kagedal@ida:	<> A-KAGEDAL@LISBET
Xalu@ida, andlu@ida, Anders.Lundberg@ida:	<> A-LUNDBERG@LISBET
Xamj@ida, annja@ida, Anne-Marie.Jacobsson@ida:	<> AM-JACOBSON@LISBET
Xany@ida, andny@ida, Anders.Nyberg@ida:		<> A-NYBERG@LISBET, < andny
Xaoa@ida, andal@ida, Anders.Aleryd@ida:		<> A-ALERYD@LISBET, < andal
Xara@ida, andra@ida, Anders.Rantila@ida:		<> A-RANTILA@LISBET, < 
ara
Xarf@ida, arnfa@ida, Arne.Faldt@ida:		<> A-FAELDT@LISBET, <> arnfa
Xarj@ida, arnjo@ida, Arne.Jonsson@ida:		<> ARNE-J@LISBET, < arnjo
Xaro@ida, annro@ida, Annie.Rostlinger@ida:	<> A-ROSTLINGER@LISBET
X#-- saknar userid!
Xast@ida, arnst@ida, Arne.Stahre@ida:		<> A-STAHRE@LISBET, < arnst
Xato@ida, andto@ida, Anders.Torne@ida:		<> A-TORNE@LISBET
Xava@ida, arjva@ida, Arja.Vainio-Larsson@ida: 	<> A-VAINIO@LISBET
Xban@ida, bjoni@ida, Bjorn.Nilsson@ida:		<> B-NILSSON@LISBET, < bjoni
Xbaw@ida, andwi@ida, Andreas.Wickberg@ida:	<> A-WICKBERG@LISBET, < andwi
Xbda@ida, birda@ida, Birgitta.Dahlgren@ida: 	<> B-DAHLGREN@LISBET
Xbek@ida, barek@ida, Barbara.Ekman@ida:		<> BARBARA@LISBET
Xbfa@ida, bjofj@ida, Bjorn.Fjellborg@ida, bfj@ida: <> B-FJELLBORG@LISBET
Xbkn@ida, berni@ida, Bernt.Nilsson@ida:		<> BERNT-N@LISBET, < berni
Xbln@ida, benle@ida, Bengt.Lennartsson@ida:	< BENGT@LISBET, <> bln
Xbma@ida, briah@ida, Britt-Marie.Ahlenback@ida:	<> BM-AHLENBECK@LISBET
Xbmk@ida, bodma@ida, Bodil.Mattson-Kihlstrom@ida: <> B-KIHLSTROM@LISBET
Xbod@ida, benod@ida, Benny.Odenteg@ida:		<> B-ODENTEG@LISBET
Xbol@ida, birol@ida, Birgitta.Olander@ida, bio@ida: <> B-OLANDER@LISBET, < biro
l
Xbro@ida, borro@ida, Borje.Rosenberg@ida:	<> B-ROSENBERG@LISBET
Xbsu@ida, bosu@ida, Bo.Sundgren@ida:		<> B-SUNDGREN@LISBET
Xcba@ida, chrba@ida, Christer.Backstrom@ida:	<> C-BACKSTROM@LISBET
Xccg@ida, chrgn@ida, Christian.Gnosspelius@ida:	<> C-GNOSSPELIUS@LISBET, < chrg
n
Xcha@ida, chrha@ida, Christer.Hansson@ida:	<> C-HANSSON@LISBET, < chrha
Xchl@ida, chrle@ida, Christos.Levcopoulos@ida:	<> CHRISTOS@LISBET, < chrle
Xcib@ida, carbj@ida, Carina.Bjorkman@ida:	<> CARINA@LISBET
Xcil@ida, clail@ida, Claes.Illergard@ida:	<> C-ILLERGARD@LISBET, < clail
Xckr@ida, chrkr@ida, Christian.Krysander@ida:	<> CHRISTIAN@LISBET, < chrkr
Xdbu@ida, doubu@ida, Douglas.Busch@ida:		<> D-BUSCH@LISBET
Xddr@ida, dimdr@ida, Dimiter.Driankov@ida:	<> D-DRIANKOV@LISBET, < dimdr
Xdif@ida, dimfo@ida, Dimitrios.Fotiades@ida:	<> DIMITRIOS@LISBET, < dimfo
Xeat@ida, erite@ida, Erik.Tengvald@ida:		<> E-TENGVALD@LISBET, < erite
Xecs@ida, evasv@ida, Eva-Chris.Svensson@ida:	<> EVA-CHRIS@LISBET
Xejs@ida, erisa@ida, Erik.Sandewall@ida:		<> E-SANDEWALL@LISBET, 
< erisa
Xeno@ida, erlno@ida, Erling.Nordmark@ida:	<> E-NORDMARK@LISBET
Xfli@ida, freli@ida, Fredrik.Lindstrom@ida:	<> F-LINDSTROM@LISBET
Xggo@ida, gorgo@ida, Goran.Goldkuhl@ida:		<> G-GOLDKUHL@LISBET
Xgka@ida, gorka@ida, Goran.Karlsson@ida:		<> G-KARLSON@LISBET
Xglt@ida, gunli@ida, Gunilla.Lingenhult@ida:	<> G-LINGENHULT@LISBET
Xgni@ida, gosni@ida, Gosta.Nilsson@ida:		<> G-NILSSON@LISBET
Xher@ida, hener@ida, Henrik.Eriksson@ida:	<> H-ERIKSSON@LISBET, < her
Xhbl@ida, hanbl@ida, Hans.Block@ida:		<> H-BLOCK@LISBET
Xheh@ida, hanho@ida, Hans.Holmgren@ida:		<> H-HOLMGREN@LISBET, < hanho
Xhjk@ida, janko@ida, Jan.Komorowski@ida:		<> J-KOMOROWSKI@LISBET
Xhla@ida, harla@ida, Harold.Lawson@ida, budla@ida, Bud.Lawson@ida: <> BUD@LISBE
T, < harla
Xhno@ida, henno@ida, Henrik.Nordin@ida:		<> H-NORDIN@LISBET, < henno
Xhst@ida, hakst@ida, Hakan.Straaf@ida:		<> H-STRAAF@LISBET
Xime@ida, ingem@ida, Inger.Emanuelson@ida:	<> INGER@LISBET, < ingem
Xira@ida, ivara@ida, Ivan.Rankin@ida:		<> I-RANKIN@LISBET, < ivara
Xjas@ida, johan@ida, Johan.Andersson@ida:	<> JOHAN@LISBET, < johan
Xjbl@ida, bryly@ida, Bryan.Lyles@ida:		> Lyles.wbst@Xerox.COM
X#-- tills vidare
Xjfa@ida, johfa@ida, Johan.Fagerstrom@ida:	<> J-FAGERSTROM@LISBET, < johfa
Xjhu@ida, johhu@ida, Johan.Hultman@ida:		<> J-HULTMAN@LISBET, < johhu
Xjlo@ida, jonlo@ida, Jonas.Lowgren@ida:		<> J-LOWGREN@LISBET, < jlo
Xjma@ida, jalma@ida, Jalal.Maleki@ida:		<> JALAL@LISBET, < jalma
Xjmz@ida, janma@ida, Jan.Maluszynski@ida:	<> J-MALUSZYNSKI@LISBET, < janm
a
Xjwc@ida, jonwa@ida, Jonas.Wallgren@ida:		<> J-WALLGREN@LISBET
Xjwg@ida, jamgo@ida, James.Goodwin@ida, James.W.Goodwin@ida, jimgo@ida, Jim.Goo
dwin@ida: <> JIM@LISBET, < jimgo
Xkku@ida, krzku@ida, Krzysztof.Kuchcinski@ida, krk@ida: <> K-KUCHCINSKI@LISBET,
 < krzku
Xkol@ida, kerol@ida, Kerstin.Olsson@ida:		<> K-OLSSON@LISBET, < k
erol
Xkre@ida, krier@ida, Kristina.Ernstsson@ida:	<> KRISTINA@LISBET, < krier
Xkrs@ida, krisa@ida, Kristian.Sandahl@ida:	<> K-SANDAHL@LISBET, < krisa
Xkry@ida, kevry@ida, Kevin.Ryan@ida:		<> K-RYAN@LISBET, < kevry
Xksd@ida, katsu@ida, Katarina.Sunnerud@ida:	<> KATARINA@LISBET, < katsu
Xlah@ida, larah@ida, Lars.Ahrenberg@ida:		<> L-AHRENBERG@LISBET
Xlbe@ida, larbe@ida, Lars.Bengtsson@ida:		<> L-BENGTSSON@LISBET, 
< larbe
Xlbf@ida, leifi@ida, Leif.Finmo@ida:		<> LEIF@LISBET, < leifi
Xlbj@ida, lisbj@ida, Lisbet.Bjorklund@ida:	<> L-BJORKLUND@LISBET
Xlel@ida, lenlo@ida, Lennart.Lovstrand@ida:	<> L-LOVSTRAND@LISBET,
X	< lel@obelix, < LENNART@HAZEL, <> lenlo
Xlew@ida, lilwa@ida, Lillemor.Wallgren@ida:	<> LILLEMOR@LISBET
Xlin@ida, linpa@ida, Lin.Padgham@ida:		< L-PADGHAM@LISBET, <> linpa
Xlli@ida, lisli@ida, Lisbeth.Linge@ida:		<> LISBETH@LISBET
Xlra@ida, lisra@ida, Lise-Lotte.Raunio@ida:	<> L-RAUNIO@LISBET
Xlro@ida, lenro@ida, Lennart.Rohlin@ida:		<> L-ROHLIN@LISBET
Xlst@ida, larst@ida, Lars.Stromberg@ida:		<> L-STROMBERG@LISBET, 
< larst
Xlwi@ida, larwi@ida, Lars.Wikstrand@ida:		<> L-WIKSTRAND@LISBET
Xmak@ida, marka@ida, Mariam.Kamkar@ida:		<> MARIAM@LISBET, < marka
Xmgw@ida, matwi@ida, Mats.Wiren@ida:		<> M-WIREN@LISBET, < matwi
Xmij@ida, maljo@ida, Malin.Johansson@ida:	<> MALIN@LISBET
Xmip@ida, mikpa@ida, Mikael.Patel@ida:		<> MIKAEL@LISBET, < mikpa
Xmja@ida, manja@ida, Manny.Jagerfeld@ida:	<> M-JAGERFELD@LISBET
Xmme@ida, magme@ida, Magnus.Merkel@ida:		<> M-MERKEL@LISBET
Xmre@ida, micre@ida, Michael.Reinfrank@ida:	<> M-REINFRANK@LISBET
X# reinfra@ztivax.UUCP
Xmru@ida, matru@ida, Mats.Rundquist@ida:		<> M-RUNDQUIST@LISBET, 
< mru
Xmsa@ida, matan@ida, Mats.S.Andersson@ida, masan@ida, Mats.Andersson@ida: <> MA
TS@LISBET, < msa
Xmsv@ida, miksv@ida, Mikael.Svensson@ida:	<> M-SVENSSON@LISBET, < miksv
Xnda@ida, nilda@ida, Nils.Dahlback@ida:		<> N-DAHLBACK@LISBET
Xnka@ida, naika@ida, Nail.Kavak@ida:		<> N-KAVAK@LISBET, < naika
Xnos@ida, nossh@ida, Nosrat.Shahsavar@ida:	<> N-SHAHSAVAR@LISBET, < nos
Xnsh@ida, nahsh@ida, Nahid.Shahmehri@ida:	<> NAHID@LISBET, < nahsh
Xoha@ida, oveha@ida, Ove.Hanebring@ida:		<> O-HANEBRING@LISBET
Xope@ida, olape@ida, Ola.Petersson@ida:		<> O-PETERSSON@LISBET
Xowl@ida, ollwi@ida, Olle.Willen@ida:		<> OLLE-W@LISBET, < ollwi
Xpab@ida, petab@ida, Peter.Aberg@ida:		<> P-ABERG@LISBET, < pab
Xpaf@ida, petfr@ida, Peter.Fritzson@ida:		< P-FRITZSON@LISBET, <>
 petfr
Xpdy@ida, patdo@ida, Patrick.Doherty@ida, pdo@ida: <> P-DOHERTY@LISBET, < patdo
X#pem@ida, parem@ida, Par.Emanuelson@ida:	<> PAER@LISBET
Xpha@ida, petha@ida, Peter.Haneklou@ida:		<> P-HANEKLO@LISBET, < 
petha
Xphj@ida, hakja@ida, Hakan.Jakobsson@ida:	<> H-JAKOBSSON@LISBET, < hakja
Xpjn@ida, pejni@ida, Peter.J.Nilsson@ida:	<> PJ-NILSSON@LISBET, <> pjn, <
 PJN@HAZEL
Xplo@ida, petlo@ida, Peter.Loborg@ida:		<> P-LOBORG@LISBET
Xpkw@ida, kriwa@ida, Kristian.Wallin@ida:	<> K-WALLIN@LISBET
Xplv@ida, pablo@ida, Pablo.Lozan-Villegas@ida:	<> P-LOZAN-VILLEGAS@LISBET
Xpsn@ida, pesni@ida, Peter.S.Nilsson@ida, pni@ida: <> P-NILSSON@LISBET, < pesni
X# vilken g{ller?  'psn' torde vara b{ttre (med tanke p} 'pjn')
Xpso@ida, palso@ida, Pal.Sorgaard@ida:		<> P-SORGAARD@LISBET
Xpuo@ida, perov@ida, Per.Overnas@ida:		<> PER@LISBET, < perov
Xrhj@ida, rolhj@ida, Roland.Hjerppe@ida:		<> R-HJERPPE@LISBET, < 
rolhj
Xrka@ida, rolka@ida, Rolf.Karlsson@ida:		<> R-KARLSSON@LISBET, < rolka
Xrni@ida, ralni@ida, Ralf.Nilsson@ida:		<> ralni, < RALF-N@LISBET
X#-- slutat
Xrob@ida, robbi@ida, Rober.Bilos@ida:		<> ROBER@LISBET, < robbi
Xron@ida, rolni@ida, Rolf.Nilsson@ida:		<> R-NILSSON@LISBET
Xrre@ida, rolre@ida, Roland.Rehmnert@ida:	<> R-REHMNERT@LISBET, < rolre
Xsbo@ida, stabo@ida, Staffan.Bonnier@ida:	<> S-BONNIER@LISBET, < stabo
Xrrq@ida, ralro@ida, Ralph.Ronnquist@ida:	<> RALPH-RONNQUIST@LISBET, < ra
lro
Xrzo@ida, rogzo@ida, Roger.Zollner@ida:		<> R-ZOLLNER@LISBET
Xsha@ida, steha@ida, Stefan.Hammar@ida:		<> S-HAMMAR@LISBET
Xsic@ida, shach@ida, Shamsul.Chowdhury@ida:	<> SHAMSUL@LISBET, < shach
Xsmn@ida, svemo@ida, Sven.Moen@ida:		< S-MOEN@LISBET, <> svemo
Xsnt@ida, simna@ida, Simin.Nadjm-Tehrani@ida:	<> S-NADJM-TEHRANI@LISBET, < sn
t
Xsos@ida, olast@ida, Ola.Stromfors@ida:		< OLA@LISBET, <> ola
Xsso@ida, sivso@ida, Siv.Soderlund@ida:		<> S-SODERLUND@LISBET
Xsth@ida, stuha@ida, Sture.Hagglund@ida:		<> STURE@LISBET, < stuh
a
Xswr@ida, stewr@ida, Stefan.Wrammerfors@ida:	<> stewr
Xtao@ida, tomol@ida, Tommy.Olsson@ida:		<> TOMMY@LISBET, < tao
Xtha@ida, timha@ida, Tim.Hansen@ida:		<> T-HANSEN@LISBET
Xtla@ida, tonla@ida, Tony.Larsson@ida:		<> T-LARSSON@LISBET, < tonla
Xton@ida, torna@ida, Torbjorn.Naslund@ida, tna@ida: < T-NASLUND@LISBET, <> torn
a
Xtoh@ida, tomoh@ida, Tommy.Ohlsson@ida:		<> T-OHLSSON@LISBET
Xtor@ida, totna@ida, Torbjorn.Naslund.ADB@ida:	<> TORBJORN-NASLUND-ADB@LISBET
Xtps@ida, tomso@ida, Tomas.Sokolnicki@ida:	<> T-SOKOLNICKI@LISBET
Xtri@ida, tomri@ida, Tom.Rindborg@ida:		<> T-RINDBORG@LISBET, < tomri
Xtti@ida, tooti@ida, Toomas.Timpka@ida:		<> T-TIMPKA@LISBET
Xuda@ida, ulfda@ida, Ulf.Dahlen@ida:		<> U-DAHLEN@LISBET, < uda
Xurn@ida, ulfni@ida, Ulf.Nilsson@ida:		<> U-NILSSON@LISBET, < ulfni
Xwdr@ida, wlodr@ida, Wlodek.Drabent@ida, Wlodzimierz.Drabent@ida: <> W-DRABENT@
LISBET, < wlodr
Xyla@ida, yngla@ida, Yngve.Larsson@ida:		<  Y-LARSSON@LISBET, <> yngla
Xzpe@ida, zebpe@ida, Zebo.Peng@ida:		<> ZEBO@LISBET, < zebpe
END_OF_ida/lib/xaliases
if test 16825 -ne `wc -c <ida/lib/xaliases`; then
    echo shar: \"ida/lib/xaliases\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/parseaddr.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/parseaddr.c.diff\"
else
echo shar: Extracting \"ida/patches/parseaddr.c.diff\" \(17702 characters\)
sed "s/^X//" >ida/patches/parseaddr.c.diff <<'END_OF_ida/patches/parseaddr.c.di
ff'
X*** parseaddr.c.orig	Fri Mar 13 18:51:07 1987
X--- parseaddr.c	Mon May 25 15:51:35 1987
X***************
X*** 508,518 ****
X  	struct match mlist[MAXMATCH];	/* stores match on LHS */
X  	char *npvp[MAXATOM+1];		/* temporary space for rebuild */
X  	extern bool sameword();
X  
X  	if (OpMode == MD_TEST || tTd(21, 2))
X  	{
X  		printf("rewrite: ruleset %2d   input:", ruleset);
X! 		printav(pvp);
X  	}
X  	if (pvp == NULL)
X  		return;
X--- 508,519 ----
X  	struct match mlist[MAXMATCH];	/* stores match on LHS */
X  	char *npvp[MAXATOM+1];		/* temporary space for rebuild */
X  	extern bool sameword();
X+ 	char tokbuf[MAXNAME+1];		/* for concatenated class tokens */
X  
X  	if (OpMode == MD_TEST || tTd(21, 2))
X  	{
X  		printf("rewrite: ruleset %2d   input:", ruleset);
X! 		printcav(pvp);
X  	}
X  	if (pvp == NULL)
X  		return;
X***************
X*** 528,534 ****
X  		if (tTd(21, 12))
X  		{
X  			printf("-----trying rule:");
X! 			printav(rwr->r_lhs);
X  		}
X  # endif DEBUG
X  
X--- 529,535 ----
X  		if (tTd(21, 12))
X  		{
X  			printf("-----trying rule:");
X! 			printcav(rwr->r_lhs);
X  		}
X  # endif DEBUG
X  
X***************
X*** 563,583 ****
X  			switch (*rp)
X  			{
X  				register STAB *s;
X  
X- 			  case MATCHCLASS:
X  			  case MATCHNCLASS:
X! 				/* match any token in (not in) a class */
X  				s = stab(ap, ST_CLASS, ST_FIND);
X! 				if (s == NULL || !bitnset(rp[1], s->s_class))
X! 				{
X! 					if (*rp == MATCHCLASS)
X! 						goto backup;
X! 				}
X! 				else if (*rp == MATCHNCLASS)
X  					goto backup;
X  
X! 				/* explicit fall-through */
X  
X  			  case MATCHONE:
X  			  case MATCHANY:
X  				/* match exactly one token */
X--- 564,604 ----
X  			switch (*rp)
X  			{
X  				register STAB *s;
X+ 				char **oldavp;
X  
X  			  case MATCHNCLASS:
X! 				/* match any single token not in a class */
X  				s = stab(ap, ST_CLASS, ST_FIND);
X! 				if (s != NULL && bitnset(rp[1], s->s_class))
X  					goto backup;
X  
X! 				/* match exactly one token */
X! 				mlp->first = avp;
X! 				mlp->last = avp++;
X! 				mlp++;
X! 				break;
X  
X+ 			  case MATCHCLASS:
X+ 				/* match any token in a class */
X+ 				/* slow, concat version by lel@ida.liu.se */
X+ 				/* handles multi-token class matches, though */
X+ 				oldavp = avp;
X+ 				*tokbuf = NULL;
X+ 				do {
X+ 				  if (*avp == NULL) {
X+ 				    avp = oldavp;
X+ 				    goto backup;
X+ 				  }
X+ 				  strcat(tokbuf, *avp++);
X+ 				  s = stab(tokbuf, ST_CLASS, ST_FIND);
X+ 				} while (s == NULL ||
X+ 					 !bitnset(rp[1], s->s_class));
X+ 
X+ 				mlp->first = oldavp;
X+ 				mlp->last = avp-1;
X+ 				mlp++;
X+ 				break;
X+ 
X  			  case MATCHONE:
X  			  case MATCHANY:
X  				/* match exactly one token */
X***************
X*** 610,615 ****
X--- 631,667 ----
X  			while (--rvp >= rwr->r_lhs)
X  			{
X  				rp = *rvp;
X+ 				if (*rp == MATCHCLASS) {
X+ 				  register STAB *s;
X+ 				  char **oldavp;
X+ 
X+ 				  /* attempt to extend binding */
X+ 				  /* slow, concat version by lel@ida.liu.se */
X+ 
X+ 				  oldavp = avp;
X+ 				  *tokbuf = NULL;
X+ 				  for (avp = mlp[-1].first;
X+ 				       avp <= mlp[-1].last; avp++)
X+ 				    strcat(tokbuf, *avp);
X+ 
X+ 				  do {
X+ 				    if (*avp == NULL) {
X+ 				      /* back out binding */
X+ 				      avp = oldavp;
X+ 				      mlp--;
X+ 				      goto cantextend;
X+ 				    }
X+ 				    strcat(tokbuf, *avp++);
X+ 				    s = stab(tokbuf, ST_CLASS, ST_FIND);
X+ 				  } while (s == NULL ||
X+ 					   !bitnset(rp[1], s->s_class));
X+ 
X+ 				  /* found an extension */
X+ 				  mlp[-1].last = avp-1;
X+ 				  rvp++;
X+ 				  break;
X+ 				}
X+ 			      cantextend:
X  				if (*rp == MATCHANY || *rp == MATCHZANY)
X  				{
X  					/* extend binding and continue */
X***************
X*** 619,626 ****
X  					break;
X  				}
X  				avp--;
X! 				if (*rp == MATCHONE || *rp == MATCHCLASS ||
X! 				    *rp == MATCHNCLASS)
X  				{
X  					/* back out binding */
X  					mlp--;
X--- 671,677 ----
X  					break;
X  				}
X  				avp--;
X! 				if (*rp == MATCHONE || *rp == MATCHNCLASS)
X  				{
X  					/* back out binding */
X  					mlp--;
X***************
X*** 653,659 ****
X  		if (tTd(21, 12))
X  		{
X  			printf("-----rule matches:");
X! 			printav(rvp);
X  		}
X  # endif DEBUG
X  
X--- 704,710 ----
X  		if (tTd(21, 12))
X  		{
X  			printf("-----rule matches:");
X! 			printcav(rvp);
X  		}
X  # endif DEBUG
X  
X***************
X*** 732,821 ****
X  
X  		for (rvp = npvp; *rvp != NULL; rvp++)
X  		{
X! 			char **hbrvp;
X  			char **xpvp;
X  			int trsize;
X  			char *olddelimchar;
X! 			char buf[MAXNAME + 1];
X  			char *pvpb1[MAXATOM + 1];
X  			char pvpbuf[PSBUFSIZE];
X  			extern char *DelimChar;
X  
X! 			if (**rvp != HOSTBEGIN)
X  				continue;
X  
X  			/*
X! 			**  Got a hostname lookup.
X  			**
X  			**	This could be optimized fairly easily.
X  			*/
X  
X  			hbrvp = rvp;
X  
X  			/* extract the match part */
X! 			while (*++rvp != NULL && **rvp != HOSTEND)
X  				continue;
X  			if (*rvp != NULL)
X  				*rvp++ = NULL;
X  
X! 			/* save the remainder of the input string */
X  			trsize = (int) (avp - rvp + 1) * sizeof *rvp;
X  			bcopy((char *) rvp, (char *) pvpb1, trsize);
X  
X! 			/* look it up */
X! 			cataddr(++hbrvp, buf, sizeof buf);
X! 			maphostname(buf, sizeof buf);
X! 
X! 			/* scan the new host name */
X! 			olddelimchar = DelimChar;
X! 			xpvp = prescan(buf, '\0', pvpbuf);
X! 			DelimChar = olddelimchar;
X! 			if (xpvp == NULL)
X! 			{
X! 				syserr("rewrite: cannot prescan canonical hostn
ame: %s", buf);
X! 				return;
X  			}
X  
X! 			/* append it to the token list */
X! 			for (avp = --hbrvp; *xpvp != NULL; xpvp++)
X! 			{
X! 				*avp++ = newstr(*xpvp);
X! 				if (avp >= &npvp[MAXATOM])
X! 					goto toolong;
X! 			}
X  
X  			/* restore the old trailing information */
X! 			for (xpvp = pvpb1; (*avp++ = *xpvp++) != NULL; )
X! 				if (avp >= &npvp[MAXATOM])
X! 					goto toolong;
X  
X! 			break;
X  		}
X  
X  		/*
X  		**  Check for subroutine calls.
X  		*/
X  
X! 		if (*npvp != NULL && **npvp == CALLSUBR)
X! 		{
X! 			bcopy((char *) &npvp[2], (char *) pvp,
X! 				(int) (avp - npvp - 2) * sizeof *avp);
X  # ifdef DEBUG
X- 			if (tTd(21, 3))
X- 				printf("-----callsubr %s\n", npvp[1]);
X- # endif DEBUG
X- 			rewrite(pvp, atoi(npvp[1]));
X- 		}
X- 		else
X- 		{
X- 			bcopy((char *) npvp, (char *) pvp,
X- 				(int) (avp - npvp) * sizeof *avp);
X- 		}
X- # ifdef DEBUG
X  		if (tTd(21, 4))
X  		{
X  			printf("rewritten as:");
X! 			printav(pvp);
X  		}
X  # endif DEBUG
X  	}
X--- 783,907 ----
X  
X  		for (rvp = npvp; *rvp != NULL; rvp++)
X  		{
X! 			char **hbrvp, **ubrvp;
X  			char **xpvp;
X  			int trsize;
X  			char *olddelimchar;
X! 			char hbuf[MAXNAME + 1], ubuf[MAXNAME + 1];
X  			char *pvpb1[MAXATOM + 1];
X  			char pvpbuf[PSBUFSIZE];
X+ 			bool match, defaultpart;
X  			extern char *DelimChar;
X+ 			char begintype, db;
X  
X! 			if (**rvp != HOSTBEGIN && **rvp != KEYBEGIN)
X  				continue;
X  
X  			/*
X! 			**  Got a hostname or database lookup.
X  			**
X  			**	This could be optimized fairly easily.
X  			*/
X  
X+ 			begintype = **rvp;
X  			hbrvp = rvp;
X+ 			ubrvp = NULL;
X  
X+ 			/* read database name if that's what we're up for */
X+ 			if (begintype == KEYBEGIN) {
X+ 				if (*++rvp != NULL)
X+ 					db = **rvp;
X+ 			}
X+ 
X  			/* extract the match part */
X! 			while (*++rvp != NULL &&
X! 			       (begintype == HOSTBEGIN ?
X! 				**rvp != HOSTEND :
X! 				**rvp != KEYEND && **rvp != CANONHOST) &&
X! 			       **rvp != CANONUSER)
X  				continue;
X+ 			if (**rvp == CANONHOST) {
X+ 				*rvp = NULL;
X+ 				ubrvp = rvp+1;
X+ 				while (*++rvp != NULL && **rvp != KEYEND &&
X+ 				       **rvp != CANONUSER)
X+ 					continue;
X+ 			}
X+ 			defaultpart = **rvp == CANONUSER;
X  			if (*rvp != NULL)
X  				*rvp++ = NULL;
X  
X! 			/* Save the remainder of the input string */
X  			trsize = (int) (avp - rvp + 1) * sizeof *rvp;
X  			bcopy((char *) rvp, (char *) pvpb1, trsize);
X  
X! 			/* Look it up (lowercase version) */
X! 			cataddr(hbrvp + (begintype == HOSTBEGIN ? 1 : 2),
X! 				hbuf, sizeof hbuf);
X! 			if (begintype == HOSTBEGIN)
X! 				match = maphostname(hbuf, sizeof hbuf);
X! 			else {
X! 				cataddr(ubrvp, ubuf, sizeof ubuf);
X! 				match = mapkey(db, hbuf, sizeof hbuf, ubuf);
X  			}
X+ 			if (match || !defaultpart) {
X+ 				/* scan the new route/host name */
X+ 				olddelimchar = DelimChar;
X+ 				xpvp = prescan(hbuf, '\0', pvpbuf);
X+ 				DelimChar = olddelimchar;
X+ 				if (xpvp == NULL) {
X+ 					syserr("rewrite: cannot prescan %s: %s"
, 
X+ 					       begintype == HOSTBEGIN ?
X+ 					       "new hostname" :
X+ 					       "dbm lookup result",
X+ 					       hbuf);
X+ 					return;
X+ 				}
X  
X! 				/* append it to the token list */
X! 				for (avp = hbrvp; *xpvp != NULL; xpvp++) {
X! 					*avp++ = newstr(*xpvp);
X! 					if (avp >= &npvp[MAXATOM])
X! 						goto toolong;
X! 				}
X! 			} else
X! 				avp = hbrvp;
X  
X  			/* restore the old trailing information */
X! 			rvp = avp - 1;
X! 			for (xpvp = pvpb1; *xpvp != NULL; xpvp++) {
X! 			    if (defaultpart && (begintype == HOSTBEGIN ?
X! 						**xpvp == HOSTEND :
X! 						**xpvp == KEYEND)) {
X! 				defaultpart = FALSE;
X! 				rvp = avp - 1;
X! 			    } else if (!defaultpart || !match)
X! 				*avp++ = *xpvp;
X! 			    if (avp >= &npvp[MAXATOM])
X! 			  	goto toolong;
X! 			}
X! 			*avp++ = NULL;
X  
X! 			/*break;*/
X  		}
X  
X  		/*
X  		**  Check for subroutine calls.
X+ 		**  Then copy vector back into original space.
X  		*/
X  
X! 		callsubr(npvp);
X! 
X! 		for (avp = npvp; *avp++ != NULL;);
X! 		bcopy((char *) npvp, (char *) pvp,
X! 		      (int) (avp - npvp) * sizeof *avp);
X! 
X! 
X  # ifdef DEBUG
X  		if (tTd(21, 4))
X  		{
X  			printf("rewritten as:");
X! 			printcav(pvp);
X  		}
X  # endif DEBUG
X  	}
X***************
X*** 823,832 ****
X  	if (OpMode == MD_TEST || tTd(21, 2))
X  	{
X  		printf("rewrite: ruleset %2d returns:", ruleset);
X! 		printav(pvp);
X  	}
X  }
X  /*
X  **  BUILDADDR -- build address from token vector.
X  **
X  **	Parameters:
X--- 909,967 ----
X  	if (OpMode == MD_TEST || tTd(21, 2))
X  	{
X  		printf("rewrite: ruleset %2d returns:", ruleset);
X! 		printcav(pvp);
X  	}
X  }
X  /*
X+ **  CALLSUBR -- call subroutines in rewrite vector
X+ **
X+ **	Parameters:
X+ **		pvp -- pointer to token vector.
X+ **
X+ **	Returns:
X+ **		none.
X+ **
X+ **	Side Effects:
X+ **		pvp is modified.
X+ */
X+ 
X+ callsubr(pvp)
X+     char **pvp;
X+ {
X+     char **rvp;
X+     int subr;
X+ 
X+     for (; *pvp != NULL; pvp++)
X+ 	if (**pvp == CALLSUBR) {
X+ 
X+ 	    subr = atoi(pvp[1]);
X+ 
X+ # ifdef DEBUG
X+ 	    if (tTd(21, 3))
X+ 		printf("-----callsubr %d\n", subr);
X+ # endif DEBUG
X+ 
X+ 	    /*
X+ 	    **  Take care of possible inner calls.
X+ 	    */
X+ 	    callsubr(pvp+2);
X+ 
X+ 	    /*
X+ 	    **  Move vector up over calling opcode.
X+ 	    */
X+ 	    for (rvp = pvp+2; *rvp != NULL; rvp++)
X+ 		rvp[-2] = rvp[0];
X+ 	    rvp[-2] = NULL;
X+ 
X+ 	    /*
X+ 	    **  Call inferior ruleset.
X+ 	    */
X+ 	    rewrite(pvp, subr);
X+ 
X+ 	    break;
X+ 	}
X+ }
X+ /*
X  **  BUILDADDR -- build address from token vector.
X  **
X  **	Parameters:
X***************
X*** 907,915 ****
X  		while (*tv != NULL && **tv != CANONUSER)
X  			(void) strcat(buf, *tv++);
X  		a->q_host = newstr(buf);
X! 	}
X! 	else
X  		a->q_host = NULL;
X  
X  	/* figure out the user */
X  	if (**tv != CANONUSER)
X--- 1042,1053 ----
X  		while (*tv != NULL && **tv != CANONUSER)
X  			(void) strcat(buf, *tv++);
X  		a->q_host = newstr(buf);
X! 	} else {
X! 		if (**tv == CANONHOST)
X! 			while (*tv != NULL && **tv != CANONUSER)
X! 				*tv++;
X  		a->q_host = NULL;
X+ 	}
X  
X  	/* figure out the user */
X  	if (**tv != CANONUSER)
X***************
X*** 920,927 ****
X  
X  	/* rewrite according recipient mailer rewriting rules */
X  	rewrite(++tv, 2);
X! 	if (m->m_r_rwset > 0)
X! 		rewrite(tv, m->m_r_rwset);
X  	rewrite(tv, 4);
X  
X  	/* save the result for the command line/RCPT argument */
X--- 1058,1065 ----
X  
X  	/* rewrite according recipient mailer rewriting rules */
X  	rewrite(++tv, 2);
X! 	if (m->m_re_rwset > 0)
X! 		rewrite(tv, m->m_re_rwset);
X  	rewrite(tv, 4);
X  
X  	/* save the result for the command line/RCPT argument */
X***************
X*** 1002,1008 ****
X  		return (FALSE);
X  
X  	/* if the user isn't the same, we can drop out */
X! 	if (strcmp(a->q_user, b->q_user) != 0)
X  		return (FALSE);
X  
X  	/* if the mailer ignores hosts, we have succeeded! */
X--- 1140,1146 ----
X  		return (FALSE);
X  
X  	/* if the user isn't the same, we can drop out */
X! 	if (!sameword(a->q_user, b->q_user))
X  		return (FALSE);
X  
X  	/* if the mailer ignores hosts, we have succeeded! */
X***************
X*** 1012,1018 ****
X  	/* otherwise compare hosts (but be careful for NULL ptrs) */
X  	if (a->q_host == NULL || b->q_host == NULL)
X  		return (FALSE);
X! 	if (strcmp(a->q_host, b->q_host) != 0)
X  		return (FALSE);
X  
X  	return (TRUE);
X--- 1150,1156 ----
X  	/* otherwise compare hosts (but be careful for NULL ptrs) */
X  	if (a->q_host == NULL || b->q_host == NULL)
X  		return (FALSE);
X! 	if (!sameword(a->q_host, b->q_host))
X  		return (FALSE);
X  
X  	return (TRUE);
X***************
X*** 1072,1077 ****
X--- 1210,1217 ----
X  **			rather than the recipient rewriting rules.
X  **		canonical -- if set, strip out any comment information,
X  **			etc.
X+ **		headeraddress -- if set, use header specific rewriting
X+ **			rulesets and uurelativize if M_RELATIVIZE is set.
X  **
X  **	Returns:
X  **		the text string representing this address relative to
X***************
X*** 1086,1096 ****
X  */
X  
X  char *
X! remotename(name, m, senderaddress, canonical)
X  	char *name;
X  	struct mailer *m;
X  	bool senderaddress;
X  	bool canonical;
X  {
X  	register char **pvp;
X  	char *fancy;
X--- 1226,1237 ----
X  */
X  
X  char *
X! remotename(name, m, senderaddress, canonical, headeraddress)
X  	char *name;
X  	struct mailer *m;
X  	bool senderaddress;
X  	bool canonical;
X+ 	bool headeraddress;
X  {
X  	register char **pvp;
X  	char *fancy;
X***************
X*** 1108,1114 ****
X  # endif DEBUG
X  
X  	/* don't do anything if we are tagging it as special */
X! 	if ((senderaddress ? m->m_s_rwset : m->m_r_rwset) < 0)
X  		return (name);
X  
X  	/*
X--- 1249,1257 ----
X  # endif DEBUG
X  
X  	/* don't do anything if we are tagging it as special */
X! 	if ((senderaddress ?
X! 	     (headeraddress ? m->m_sh_rwset : m->m_se_rwset) :
X! 	     (headeraddress ? m->m_rh_rwset : m->m_re_rwset)) < 0)
X  		return (name);
X  
X  	/*
X***************
X*** 1154,1176 ****
X  
X  	/*
X  	**  Do more specific rewriting.
X! 	**	Rewrite using ruleset 1 or 2 depending on whether this is
X! 	**		a sender address or not.
X  	**	Then run it through any receiving-mailer-specific rulesets.
X  	*/
X  
X! 	if (senderaddress)
X! 	{
X! 		rewrite(pvp, 1);
X! 		if (m->m_s_rwset > 0)
X! 			rewrite(pvp, m->m_s_rwset);
X  	}
X- 	else
X- 	{
X- 		rewrite(pvp, 2);
X- 		if (m->m_r_rwset > 0)
X- 			rewrite(pvp, m->m_r_rwset);
X- 	}
X  
X  	/*
X  	**  Do any final sanitation the address may require.
X--- 1297,1329 ----
X  
X  	/*
X  	**  Do more specific rewriting.
X! 	**	Rewrite using ruleset 1 or 2 for envelope addresses and
X! 	**	5 or 6 for header addresses depending on whether this
X! 	**	is a sender address or not.
X  	**	Then run it through any receiving-mailer-specific rulesets.
X  	*/
X  
X! 	if (senderaddress) {
X! 		if (headeraddress) {
X! 			rewrite(pvp, SplitRewriting ? 5 : 1);
X! 			if (m->m_sh_rwset > 0)
X! 				rewrite(pvp, m->m_sh_rwset);
X! 		} else {
X! 			rewrite(pvp, 1);
X! 			if (m->m_se_rwset > 0)
X! 				rewrite(pvp, m->m_se_rwset);
X! 		}
X! 	} else {
X! 		if (headeraddress) {
X! 			rewrite(pvp, SplitRewriting ? 6 : 2);
X! 			if (m->m_rh_rwset > 0)
X! 				rewrite(pvp, m->m_rh_rwset);
X! 		} else {
X! 			rewrite(pvp, 2);
X! 			if (m->m_re_rwset > 0)
X! 				rewrite(pvp, m->m_re_rwset);
X! 		}
X  	}
X  
X  	/*
X  	**  Do any final sanitation the address may require.
X***************
X*** 1182,1187 ****
X--- 1335,1348 ----
X  	rewrite(pvp, 4);
X  
X  	/*
X+ 	**  Check if we're supposed to do make the address
X+ 	**  UUCP !-relative to the rcpt host vs ourselves.
X+ 	*/
X+ 
X+ 	if (headeraddress && bitnset(M_RELATIVIZE, m->m_flags))
X+ 		uurelativize("\001k", "\001h", pvp);
X+ 
X+ 	/*
X  	**  Now restore the comment information we had at the beginning.
X  	*/
X  
X***************
X*** 1195,1198 ****
X--- 1356,1421 ----
X  		printf("remotename => `%s'\n", buf);
X  # endif DEBUG
X  	return (buf);
X+ }
X+ /*
X+ **  UURELATIVIZE -- Make an address !-relative to recipient/sender nodes
X+ **
X+ **	Parameters:
X+ **		from -- the sending node (usually "$k" or "$w")
X+ **		to -- the receiving node (usually "$h")
X+ **		pvp -- address vector
X+ **
X+ **	Returns:
X+ **		none.
X+ **
X+ **	Side Effects:
X+ **		The pvp is rewritten to be relative the "to" node
X+ **		wrt the "from" node.  In other words, if the pvp
X+ **		is headed by "to!" that part is stripped; otherwise
X+ **		"from!" is prepended.  Exception: "to!user" addresses
X+ **		with no '!'s in the user part are sent as is.
X+ **
X+ **	Bugs:
X+ **		The pvp may overflow, but we don't catch it.
X+ */
X+ 
X+ uurelativize(from, to, pvp)
X+ 	char *from, *to;
X+ 	char **pvp;
X+ {
X+ 	register char **pxp = pvp;
X+ 	char expfrom[MAXNAME], expto[MAXNAME];
X+ 
X+ 	expand(from, expfrom, &expfrom[sizeof expfrom - 1], CurEnv);
X+ 	expand(to, expto, &expto[sizeof expto - 1], CurEnv);
X+ 
X+ 	/*
X+ 	 * supposing that we've got something, should
X+ 	 * we add "from!" or remove "to!"?
X+ 	 */
X+ 	if (pvp[0] != NULL)
X+ 	    if (pvp[1] == NULL || strcmp(pvp[1], "!") != 0 ||
X+ 		    /*sameword?*/ strcmp(pvp[0], expto) != 0) {
X+ 		/* either local name, no UUCP address, or not to "to!"	*/
X+ 		/* ==> prepend address with "from!"			*/
X+ 
X+ 		/* already there? */
X+ 		if (pvp[1] == NULL || strcmp(pvp[1], "!") != 0 ||
X+ 			/*sameword?*/ strcmp(pvp[0], expfrom) != 0) {
X+ 		    /* no, put it there */
X+ 		    while (*pxp != NULL)
X+ 			pxp++;
X+ 		    do
X+ 			pxp[2] = *pxp;
X+ 		    while (pxp-- != pvp);
X+ 		    pvp[0] = newstr(expfrom);
X+ 		    pvp[1] = "!";
X+ 		}
X+ 	    } else {
X+ 		/* address is to "to!" -- remove if not "to!user" */
X+ 		for (pxp = &pvp[2]; *pxp != NULL && strcmp(*pxp, "!") != 0; pxp
++);
X+ 		if (*pxp != NULL)
X+ 		    for (pxp = pvp; *pxp != NULL; pxp++)
X+ 			*pxp = pxp[2];
X+ 	    }
X  }
END_OF_ida/patches/parseaddr.c.diff
if test 17702 -ne `wc -c <ida/patches/parseaddr.c.diff`; then
    echo shar: \"ida/patches/parseaddr.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 4 \(of 7\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 7 archives.
    echo "See ida/README and ida/INSTALL for further instructions."
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0