[comp.sources.unix] v10i012: The IDA Sendmail Kit, Part01/07

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

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

[ After talking with a couple of people, I decided to mix backlogged sources
  with recent submissions in order to get stuff that people are currently
  interested in out in a reasonable amount of time.  Also, please remember
  that I am not able to provide mail-based retrieval service at this time;
  this is a guest account on UUNET that I am using.  --r$ ]

This is the first part of the IDA Sendmail Enhancement Kit. 

The Kit includes a set of source code modifications to the BSD 4.3
sendmail program (version 5.11).  The changes will enable sendmail to
have direct access to dbm(3) files, separate envelope/header rewriting
rulesets, and multi-token class matches among other things.

As a separate part of the Kit is the IDA Sendmail Master Configuration
file and a sample setup used at the CIS Dept, U of Linkoping.  The
configuration file together with the supplied data files and utility
programs, implement such nice features as pathalias based systems
routing within sendmail, fully !-/@-translating rulesets, and generic
local user addresses.

Finally, there is an accompanying paper on mail addressing issues in
general and hybrid addresses in particular.  Included in the paper is a
description of the changes to sendmail and the configuration setup.

Unpack the Kit by (preferably) cd'ing to the sendmail home directory and
sending the part after the "--cut--here--" line to /bin/sh or unshar.
This should create a new "ida" subdirectory with all the Kit's files.
Then see ida/README and ida/INSTALL for further instructions.

--cut--here--cut--here--cut--here--cut--here--cut--here--cut--here-->8--
#! /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 1 (of 7)."
# Contents:  ida ida/MANIFEST ida/Makefile ida/aux ida/aux/Makefile
#   ida/aux/header.c ida/aux/mkdomext.c ida/aux/scanf.c ida/cf
#   ida/cf/Makefile ida/cf/asterix.m4 ida/cf/client.m4
#   ida/cf/majestix.m4 ida/cf/newaliases.m4 ida/cf/obelix.m4 ida/doc
#   ida/doc/Makefile ida/doc/mkdomext.1 ida/doc/xalparse.8 ida/lib
#   ida/lib/Makefile ida/lib/decnet ida/lib/decnet/nodes
#   ida/lib/decnet/xtable ida/lib/mailertable ida/lib/restart_clients
#   ida/lib/sendmail.hf ida/lib/sendmail.st ida/lib/stop_clients
#   ida/lib/uucp ida/lib/uucp/relays ida/lib/uucp/xtable ida/patches
#   ida/patches/BSD29.edit ida/patches/BSD42.diff
#   ida/patches/MDBM.edit ida/patches/Makefile
#   ida/patches/Version.c.diff ida/patches/conf.c.diff
#   ida/patches/err.c.diff ida/patches/headers.c.diff
#   ida/patches/macro.c.diff ida/patches/mdbm_compat.h
#   ida/patches/queue.c.diff ida/patches/readcf.c.diff
#   ida/patches/savemail.c.diff ida/patches/usersmtp.c.diff
#   ida/patches/util.c.diff
# Wrapped by lenlo@prefix on Wed Jun 10 15:39:47 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test ! -d ida ; then
    echo shar: Creating directory \"ida\"
    mkdir ida
fi
if test -f ida/MANIFEST -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/MANIFEST\"
else
echo shar: Extracting \"ida/MANIFEST\" \(1726 characters\)
sed "s/^X//" >ida/MANIFEST <<'END_OF_ida/MANIFEST'
X File Name		Archive #
X----------------------------------
X ida				1
X ida/INSTALL			2
X ida/MANIFEST			1
X ida/Makefile			1
X ida/README			1
X ida/aux			1
X ida/aux/Makefile		1
X ida/aux/dbm.c			3
X ida/aux/header.c		1
X ida/aux/mkdomext.c		1
X ida/aux/rmail.c		3
X ida/aux/scanf.c		1
X ida/aux/xalparse.c		3
X ida/cf				1
X ida/cf/Makefile		1
X ida/cf/Sendmail.mc		5
X ida/cf/asterix.m4		1
X ida/cf/client.m4		1
X ida/cf/majestix.m4		1
X ida/cf/newaliases.m4		1
X ida/cf/obelix.m4		1
X ida/doc			1
X ida/doc/Makefile		1
X ida/doc/dbm.1			2
X ida/doc/mkdomext.1		1
X ida/doc/part1.ms		6
X ida/doc/part2.ms		7
X ida/doc/xalparse.8		1
X ida/lib			1
X ida/lib/Makefile		1
X ida/lib/decnet			1
X ida/lib/decnet/nodes		1
X ida/lib/decnet/xtable		1
X ida/lib/domaintable		2
X ida/lib/mailertable		1
X ida/lib/pathtable		2
X ida/lib/restart_clients	1
X ida/lib/sendmail.hf		1
X ida/lib/sendmail.st		1
X ida/lib/stop_clients		1
X ida/lib/uucp			1
X ida/lib/uucp/relays		1
X ida/lib/uucp/xtable		1
X ida/lib/xaliases		4
X ida/patches			1
X ida/patches/BSD29.diff		2
X ida/patches/BSD29.edit		1
X ida/patches/BSD42.diff		1
X ida/patches/MDBM.diff		2
X ida/patches/MDBM.edit		1
X ida/patches/Makefile		1
X ida/patches/Version.c.diff	1
X ida/patches/alias.c.diff	3
X ida/patches/conf.c.diff	1
X ida/patches/daemon.c.diff	2
X ida/patches/deliver.c.diff	2
X ida/patches/err.c.diff		1
X ida/patches/headers.c.diff	1
X ida/patches/macro.c.diff	1
X ida/patches/main.c.diff	2
X ida/patches/mdbm_compat.h	1
X ida/patches/op.me.diff		3
X ida/patches/parseaddr.c.diff	4
X ida/patches/queue.c.diff	1
X ida/patches/readcf.c.diff	1
X ida/patches/recipient.c.diff	2
X ida/patches/savemail.c.diff	1
X ida/patches/sendmail.h.diff	3
X ida/patches/srvrsmtp.c.diff	2
X ida/patches/usersmtp.c.diff	1
X ida/patches/util.c.diff	1
END_OF_ida/MANIFEST
if test 1726 -ne `wc -c <ida/MANIFEST`; then
    echo shar: \"ida/MANIFEST\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/Makefile\"
else
echo shar: Extracting \"ida/Makefile\" \(1378 characters\)
sed "s/^X//" >ida/Makefile <<'END_OF_ida/Makefile'
X#
X#  MAKEFILE -- The IDA Sendmail Enhancement Kit.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
X#  Global definitions; will be exported to all Makefiles
XMAN8DIR=	/usr/man/manl		# Place for the section 8 manuals
XMAN8EXT=	.l			# Extension for section 8 manuals
XMAN1DIR=	/usr/man/manl		# Place for the section 1 manuals
XMAN1EXT=	.l			# Extension for section 1 manuals
XBINDIR=		/usr/local/bin		# Where the binary aux files sh
ould go
XLIBDIR=		/usr/lib/mail		# Where the data files should b
e
XSRCDIR=		../../src		# The sendmail src subdirectory
XINCLUDEDIR=	../../include		# The sendmail include subdirectory
XDOCDIR=		../../doc		# The sendmail doc subdirctory
XMDBM=		#-DMDBM -I$(SRCDIR)	# Only defined if you want to use mdbm
XDBMLIB=		-ldbm			# Change to -lmdbm if you use m
dbm
XDBMEXT=		.dir			# Change to .map for mdbm
XTROFF=		pstroff			# The [nt]roff program of your choice
X
Xconfigure:	config.ed
X		@echo ">>> Propagating changes to subdirectories."
X		for M in */Makefile; do \
X			ed $$M <config.ed; \
X		done
X
Xconfig.ed:	Makefile
X		egrep '^[^#	].*=' Makefile | \
X		sed -e 's/[ 	]*#.*$$//' -e 's/#.*$$//' \
X			-e 's/^\(.*=\).*$$/g\/^\1\/c\\;&\\;./' | \
X		tr ';' '\012' >$@
X		echo w >>$@
X		echo q >>$@
X
Xclean:
X		-rm -f \#* *~ config.ed
X
Xspotless:	clean
X		for d in */.; do \
X			(cd $$d; make clean); \
X		done
END_OF_ida/Makefile
if test 1378 -ne `wc -c <ida/Makefile`; then
    echo shar: \"ida/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/aux ; then
    echo shar: Creating directory \"ida/aux\"
    mkdir ida/aux
fi
if test -f ida/aux/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/aux/Makefile\"
else
echo shar: Extracting \"ida/aux/Makefile\" \(877 characters\)
sed "s/^X//" >ida/aux/Makefile <<'END_OF_ida/aux/Makefile'
X#
X#  MAKEFILE -- Auxiliary Files.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
XBINS=		dbm mkdomext scanf xalparse
XCFLAGS=		-O -DVMUNIX -I$(INCLUDEDIR)
X
X#  The following definitions are inserted by ../Makefile
X#  Change them there--not here!
XBINDIR=		/usr/local/bin
XLIBDIR=		/usr/lib/mail
XSRCDIR=		../../src
XINCLUDEDIR=	../../include
XDBMLIB=		-ldbm
X
Xall:		$(BINS) rmail
X
Xdbm:		dbm.c
X		$(CC) $(CFLAGS) $(MDBM) -o dbm dbm.c $(DBMLIB)
X
Xrmail:		rmail.c
X		$(CC) $(CFLAGS) $(MDBM) -o rmail rmail.c $(DBMLIB)
X
Xinstall:	$(BINS)
X		cp $(BINS) $(BINDIR)
X		cd $(BINDIR); strip $(BINS)
X		@echo '>>> Do "make install-rmail" to explitly install rmail.'
X
Xinstall-rmail:	rmail
X		install -m 4755 -o root -s rmail /bin
X
Xclean:
X		-rm -f \#* *~ *.o $(BINS)
X
X.c.o:
X		$(CC) $(CFLAGS) -c $<
X
X.c:
X		$(CC) $(CFLAGS) -o $@ $<
END_OF_ida/aux/Makefile
if test 877 -ne `wc -c <ida/aux/Makefile`; then
    echo shar: \"ida/aux/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/aux/header.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/aux/header.c\"
else
echo shar: Extracting \"ida/aux/header.c\" \(1683 characters\)
sed "s/^X//" >ida/aux/header.c <<'END_OF_ida/aux/header.c'
X/*
X**  HEADER -- Header line parser.
X**  Copyright (c) 1985 Lennart Lovstrand
X**  CIS Dept, Univ of Linkoping, Sweden
X**
X**  Use it, abuse it, but don't sell it.
X**
X**  Version of 14-Apr-85.
X*/
X
X#include <stdio.h>
X#include <strings.h>
X#include <ctype.h>
X#include "useful.h"
X
X#define H_CC		"cc"
X#define H_FROM		"from"
X#define H_MESSAGE_ID	"message_id"
X#define H_RETURN_PATH	"return-path"
X#define H_TO		"to"
X#define H_VIA		"via"
X
X#define COMMA	','
X
X#define MAKELC(C)	(isupper(C) ? tolower(C) : C)
X
X/*
X *	iskey: checks if the line is prefixed by
X *	the supplied keyword (immediately followed by
X *	a colon)
X */
Xiskey(key, line)
Xchar *key, *line;
X{
X	for (; *key != NULL && *line != NULL; key++, line++)
X		if (MAKELC(*key) != MAKELC(*line))
X			break;
X
X	return *key == NULL && *line == ':';
X}
X
Xchar *eat(str, ch)
Xchar *str, ch;
X{
X	for(; *str == ch; str++);
X	return str;
X}
X
X/*
X *	extract_address:
X *	finds and extracts the machine address part of an address field
X */
X
Xchar *extract_address(field, address)
Xchar *field, *address;
X{
X	char *address_start = address;
X
X	while(*field && *field != COMMA && *field != '>')
X		switch (*field) {
X			case '<':
X				return extract_address(field, address_start);
X			case '(':
X				while (*field && *field != ')');
X					field++;
X				break;
X			case '"':
X				do
X					*address++ = *field++;
X				while (*field && *field != '"');
X				if (*field)
X					*address++ = *field++;
X				break;
X			case ' ':
X				*address++ = *field++;
X				field = eat(field, ' ');
X				break;
X			case '\\':
X				*address++ = *field++;
X				/* fall through */
X			default:
X				*address++ = *field++;
X		}
X	*address = NULL;
X	if (*field)
X		return index(field, COMMA)+1;
X	else
X		return field;
X}
X
X
END_OF_ida/aux/header.c
if test 1683 -ne `wc -c <ida/aux/header.c`; then
    echo shar: \"ida/aux/header.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/aux/mkdomext.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/aux/mkdomext.c\"
else
echo shar: Extracting \"ida/aux/mkdomext.c\" \(2248 characters\)
sed "s/^X//" >ida/aux/mkdomext.c <<'END_OF_ida/aux/mkdomext.c'
X/*
X**  MKDOMEXT -- Extend domain names
X**  Copyright (c) 1987 Lennart Lovstrand
X**  CIS Dept, Univ of Linkoping, Sweden
X**
X**  Use it, abuse it, but don't sell it.
X*/
X
X#include "useful.h"
X#include <stdio.h>
X#include <ctype.h>
X
X#ifndef lint
Xstatic char	SccsId[] = "@(#)mkdomext.c 1.5 (lel@ida.liu.se) 4/24/87";
X#endif !lint
X
Xvoid printf(), fprintf();
X
Xchar *Progname;
X
Xmain(argc, argv)
X     int argc;
X     char **argv;
X{
X    char buf[BUFSIZ];
X    char domains[BUFSIZ];
X    char *tab, *p, *index();
X
X    Progname = argv[0];
X
X    if (argc == 1) {
X	fprintf(stderr, "%s: no domains?\n", Progname);
X	exit(1);
X    }
X
X    /* collect the argument domain names */
X    domains[0] = '\0';
X    for (argc--, argv++; argc > 0; argc--, argv++) {
X	if (strlen(*argv) + 3 > sizeof(domains)) {
X	    fprintf(stderr, "%s: too many domain arguments--\n %s %s %s\n",
X		    Progname,
X		    "chain two instances of", Progname,
X		    "together or recompile with larger ``domains'' array");
X	    exit(1);
X	}
X	(void) strcat(domains, " .");
X	(void) strcat(domains, *argv);
X    }
X
X    while (gets(buf) != NULL) {
X	tab = index(buf, '\t');
X	if (tab != NULL)
X	    *tab = '\0';
X
X	for (p = index(buf, '.'); p != NULL; p = index(p + 1, '.')) {
X	    if (instring(domains, p)) {
X		for (; p != NULL; p = index(p + 1, '.')) {
X		    *p = '\0';
X		    if (tab != NULL)
X			printf("%s\t%s\n", buf, tab + 1);
X		    else
X			printf("%s\n", buf);
X		    *p = '.';
X		}
X		break;
X	    }
X	}
X	if (tab != NULL)
X	    *tab = '\t';
X	puts(buf);
X    }
X}
X
X/*
X**	INSTRING -- Returns TRUE if the source string ``s'' can be found
X**		as a substring in target string ``t''.
X*/
X
Xinstring(t, s)
X     char *t, *s;
X{
X    extern char *index();
X    register char *p;
X    register int len = strlen(s);
X
X    for (p = index(t, *s); p != NULL; p = index(p + 1, *s))
X	if (ispart(p, s, len))
X	    return TRUE;
X    return FALSE;
X}
X
X/*
X**	ISPART -- Compare at most the first n chars of two strings
X**		without respect to upper/lower case.
X*/
X
Xispart(s, t, n)
X     register char *s, *t;
X     register int n;
X{
X    for (; n > 0 && *s != '\0' && *t != '\0'; s++, t++, n--)
X	if ((isupper(*s) ? tolower(*s) : *s) !=
X	    (isupper(*t) ? tolower(*t) : *t))
X	    break;
X    return (n == 0 || *s == *t); /* really *s == 0 && *t == 0 */
X}
END_OF_ida/aux/mkdomext.c
if test 2248 -ne `wc -c <ida/aux/mkdomext.c`; then
    echo shar: \"ida/aux/mkdomext.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/aux/scanf.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/aux/scanf.c\"
else
echo shar: Extracting \"ida/aux/scanf.c\" \(1068 characters\)
sed "s/^X//" >ida/aux/scanf.c <<'END_OF_ida/aux/scanf.c'
X/*
X**  SCANF -- Program to scan & extract input lines.
X**  Copyright (c) 1987 Lennart Lovstrand
X**  CIS Dept, Univ of Linkoping, Sweden
X**
X**  Use it, abuse it, but don't sell it.
X**
X**  Very simple version 0.1 of Apr 19, 1987 1:18am
X*/
X
X#include "useful.h"
X#include <stdio.h>
X#include <ctype.h>
X
Xmain(argc, argv)
X    int argc;
X    char **argv;
X{
X    char buf[BUFSIZ], val[BUFSIZ];
X    FILE *input;
X    bool ignore_case = FALSE;
X
X    if (argc > 1 && strcmp(argv[1], "-i") == 0) {
X	ignore_case = TRUE;
X	argc--; argv++;
X    }
X
X    if (argc < 2 || argc > 3) {
X	fprintf(stderr, "usage: %s [-i] scanf_pattern [file]");
X	exit(1);
X    }
X
X    if (ignore_case)
X	lower(argv[1]);
X
X    if (argc == 2)
X	input = stdin;
X    else {
X	input = fopen(argv[2], "r");
X	if (input == NULL) {
X	    perror(argv[2]);
X	    exit(1);
X	}
X    }
X
X    while (fgets(buf, sizeof(buf), input) != NULL) {
X	if (ignore_case)
X	    lower(buf);
X	if (sscanf(buf, argv[1], val) == 1)
X	    puts(val);
X    }
X}
X
Xlower(p)
X    register char *p;
X{
X    for (; *p != '\0'; p++)
X	if (isupper(*p))
X	    *p = tolower(*p);
X}
END_OF_ida/aux/scanf.c
if test 1068 -ne `wc -c <ida/aux/scanf.c`; then
    echo shar: \"ida/aux/scanf.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/cf ; then
    echo shar: Creating directory \"ida/cf\"
    mkdir ida/cf
fi
if test -f ida/cf/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/Makefile\"
else
echo shar: Extracting \"ida/cf/Makefile\" \(1153 characters\)
sed "s/^X//" >ida/cf/Makefile <<'END_OF_ida/cf/Makefile'
X#
X#  MAKEFILE -- Configuration Files.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
X#  Linkoping specific defintions 
XCONFIGS=	asterix.cf client.cf majestix.cf newaliases.cf obelix.cf
X
XCLIENTS=	crabbofix lillefix miraculix portofix prefix senilix \
X		smidefix tragicomix
X
X#  The following definitions are inserted by ../Makefile
X#  Change them there--not here!
XLIBDIR=		/usr/lib/mail
X
Xall:		$(CONFIGS)
X
Xinstall:	$(CONFIGS)
X		cp majestix.cf client.cf newaliases.cf $(LIBDIR)
X		rcp asterix.cf asterix:/usr/lib/sendmail.cf
X		mail -s sendmail.cf real_lel@obelix <obelix.cf
X
Xclients:	$(CLIENTS)
X
X$(CLIENTS):
X		-rsh $@ rm /private$(LIBDIR)/sendmail.fc
X		-rcp client.cf $@:/private$(LIBDIR)/sendmail.cf
X
Xdiff:
X		-diff $(LIBDIR)/majestix.cf majestix.cf
X		-diff $(LIBDIR)/client.cf client.cf
X
Xclean:
X		-rm -f \#* *~ $(CONFIGS)
X
Xbackup:
X		cp *.m4 *.mc BACKUP
X
X$(CONFIGS):	Sendmail.mc
X
Xsendmail.cf	Sendmail.cf:
X		@echo 'Based on what host?  Do make <host>.cf instead.'
X
Xstop:
X		-skill sendmail
X
Xrestart:	stop
X		/usr/lib/sendmail -bd -q30m
X
X.SUFFIXES:	.cf .m4
X
X.m4.cf:
X		m4 $*.m4 >$*.cf
END_OF_ida/cf/Makefile
if test 1153 -ne `wc -c <ida/cf/Makefile`; then
    echo shar: \"ida/cf/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/cf/asterix.m4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/asterix.m4\"
else
echo shar: Extracting \"ida/cf/asterix.m4\" \(448 characters\)
sed "s/^X//" >ida/cf/asterix.m4 <<'END_OF_ida/cf/asterix.m4'
X# Sendmail configuration file for asterix.liu.se
Xdefine(ALIASES, LIBDIR/aliases)
Xdefine(DECNETXTABLE, LIBDIR/decnet/xtable)
Xdefine(DECNETNODES, LIBDIR/decnet/nodes)
Xdefine(DEFAULT_DOMAIN, liu.se)
Xdefine(DOMAINTABLE, LIBDIR/domaintable)
Xdefine(GENERICFROM, LIBDIR/generics)
Xdefine(MAILERTABLE, LIBDIR/mailertable)
Xdefine(PATHTABLE, LIBDIR/pathtable)
Xdefine(UUCPNODES, /usr/lib/uucp/L.sys)
Xdefine(UUCPXTABLE, LIBDIR/uucp/xtable)
Xinclude(Sendmail.mc)
END_OF_ida/cf/asterix.m4
if test 448 -ne `wc -c <ida/cf/asterix.m4`; then
    echo shar: \"ida/cf/asterix.m4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/cf/client.m4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/client.m4\"
else
echo shar: Extracting \"ida/cf/client.m4\" \(412 characters\)
sed "s/^X//" >ida/cf/client.m4 <<'END_OF_ida/cf/client.m4'
X# Sendmail configuration file for Sun-3 clients (*.liu.se)
Xdefine(ALIASES, LIBDIR/aliases)
Xdefine(DECNETXTABLE, LIBDIR/decnet/xtable)
Xdefine(DECNETNODES, LIBDIR/decnet/nodes)
Xdefine(DEFAULT_DOMAIN, liu.se)
Xdefine(DOMAINTABLE, LIBDIR/domaintable)
Xdefine(GENERICFROM, LIBDIR/generics)
Xdefine(PSEUDONYMS, all)
Xdefine(RELAY_HOST, majestix)
Xdefine(RELAY_MAILER, TCP)
Xdefine(RSH_SERVER, majestix)
Xinclude(Sendmail.mc)
END_OF_ida/cf/client.m4
if test 412 -ne `wc -c <ida/cf/client.m4`; then
    echo shar: \"ida/cf/client.m4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/cf/majestix.m4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/majestix.m4\"
else
echo shar: Extracting \"ida/cf/majestix.m4\" \(560 characters\)
sed "s/^X//" >ida/cf/majestix.m4 <<'END_OF_ida/cf/majestix.m4'
X# Sendmail configuration file for host majestix.liu.se
Xdefine(ALIASES, LIBDIR/aliases)
Xdefine(DECNETXTABLE, LIBDIR/decnet/xtable)
Xdefine(DECNETNODES, LIBDIR/decnet/nodes)
Xdefine(DEFAULT_DOMAIN, liu.se)
Xdefine(DOMAINTABLE, LIBDIR/domaintable)
Xdefine(GENERICFROM, LIBDIR/generics)
Xdefine(MAILERTABLE, LIBDIR/mailertable)
Xdefine(PATHTABLE, LIBDIR/pathtable)
Xdefine(PSEUDONYMS, ida.liu.se liuida all)
Xdefine(UUCPNAME, liuida)
Xdefine(UUCPNODES, /usr/lib/uucp/L.sys)
Xdefine(UUCPRELAYS, LIBDIR/uucp/relays)
Xdefine(UUCPXTABLE, LIBDIR/uucp/xtable)
Xinclude(Sendmail.mc)
END_OF_ida/cf/majestix.m4
if test 560 -ne `wc -c <ida/cf/majestix.m4`; then
    echo shar: \"ida/cf/majestix.m4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/cf/newaliases.m4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/newaliases.m4\"
else
echo shar: Extracting \"ida/cf/newaliases.m4\" \(199 characters\)
sed "s/^X//" >ida/cf/newaliases.m4 <<'END_OF_ida/cf/newaliases.m4'
X# Automatically generated config file for newaliases program
Xdefine(ALIASES, LIBDIR/aliases)
Xdefine(DEFAULT_HOST, all)
Xdefine(DOMAINTABLE, LIBDIR/domaintable)
Xdefine(NEWALIASES)
Xinclude(Sendmail.mc)
END_OF_ida/cf/newaliases.m4
if test 199 -ne `wc -c <ida/cf/newaliases.m4`; then
    echo shar: \"ida/cf/newaliases.m4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/cf/obelix.m4 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/cf/obelix.m4\"
else
echo shar: Extracting \"ida/cf/obelix.m4\" \(320 characters\)
sed "s/^X//" >ida/cf/obelix.m4 <<'END_OF_ida/cf/obelix.m4'
X# Sendmail configuration file for host obelix.UUCP
Xdefine(ALIASES, LIBDIR/aliases)
Xdefine(BSD29)
Xdefine(DEFAULT_DOMAIN, liu.se)
Xdefine(RELAY_HOST, asterix)
Xdefine(RELAY_MAILER, UUCP-B)
Xdefine(PSEUDONYMS, obelix.UUCP obelix.liu.se obelix.liu obelix.ida.liu.se)
Xdefine(UUCPNODES, /usr/lib/uucp/L.sys)
Xinclude(Sendmail.mc)
END_OF_ida/cf/obelix.m4
if test 320 -ne `wc -c <ida/cf/obelix.m4`; then
    echo shar: \"ida/cf/obelix.m4\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/doc ; then
    echo shar: Creating directory \"ida/doc\"
    mkdir ida/doc
fi
if test -f ida/doc/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/doc/Makefile\"
else
echo shar: Extracting \"ida/doc/Makefile\" \(996 characters\)
sed "s/^X//" >ida/doc/Makefile <<'END_OF_ida/doc/Makefile'
X#
X#  MAKEFILE -- The Documentation Files.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
XMAN1S=		dbm.1 mkdomext.1
XMAN8S=		xalparse.8
XMANS=		$(MAN1S) $(MAN8S)
XDOC=		paper.ms
XDOCS=		part1.ms part2.ms
X
X#  The following definitions are inserted by ../Makefile
X#  Change them there--not here!
XMAN8DIR=	/usr/man/manl
XMAN8EXT=	.l
XMAN1DIR=	/usr/man/manl
XMAN1EXT=	.l
XTROFF=		pstroff
X
Xdoc:		$(DOC)
X		refer -e -l,2 -s $(DOC) | tbl | $(TROFF) -ms
X
Xdoc.lpr:	$(DOC)
X		refer -e -l,2 -s $(DOC) | tbl | nroff -ms > $@
X
Xman:		$(MANS)
X		for m in $(MANS); do \
X			$(TROFF) -man $$m; \
X		done
X
Xman.lpr:	$(MANS)
X		for m in $(MANS); do \
X			nroff -man $$m > $$m.lpr; \
X		done
X
X$(DOC):
X		cat $(DOCS) >$(DOC)
X		-rm -f $(DOCS)
X
Xinstall:	$(MANS)
X		for m in $(MAN1S); do \
X			cp $$m $(MAN1DIR)/`basename $$m .1`$(MAN1EXT); \
X		done
X		for m in $(MAN8S); do \
X			cp $$m $(MAN8DIR)/`basename $$m .8`$(MAN8EXT); \
X		done
X
Xclean:
X		-rm -f \#* *~ *.lpr
END_OF_ida/doc/Makefile
if test 996 -ne `wc -c <ida/doc/Makefile`; then
    echo shar: \"ida/doc/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/doc/mkdomext.1 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/doc/mkdomext.1\"
else
echo shar: Extracting \"ida/doc/mkdomext.1\" \(1613 characters\)
sed "s/^X//" >ida/doc/mkdomext.1 <<'END_OF_ida/doc/mkdomext.1'
X.TH MKDOMEXT 1 "24 April 1987"				\" -*- nroff -*-
X.SH NAME
Xmkdomext \- make the exteneded set of domain names
X.SH SYNOPSIS
X.B mkdomext
X.IR domain " [\|.\|.\|.\|]"
X.SH DESCRIPTION
XThis program acts as a filter that, when supplied with fully qualified
Xdomain names on stdin, will generate all legal abbreviations of these on
Xstdout with respect to the parent domains given on the command line.  It
Xis used to be able to recognize unqualified local subdomains and sibling
Xdomains from one or more positions in the domain hierarchy.
X.PP
XThe fully qualified domains on stdin should be given one on a line, each
Xterminated by a newline or tab.  Any text after the tab will go through
Xuntouched.  This makes it especially useful for filtering the output of
Xthe
X.IR dbm (1)
X.B parse
Xfunction when producing a domain name server table.
X.SH EXAMPLE
X.nf
X.ta \w'majestix.liu.se'u+5n
X% cat >foo
Xmajestix.liu.se	majestix.liu.se
Xobelix.liu.se	obelix.liu.se
Xobelix.\s-1UUCP\s+1	obelix.liu.se
Xaida.uu.se	aida.uu.se
Xmc.lcs.mit.edu	mc.lcs.mit.edu
Xmit-mc	mc.lcs.mit.edu
X^D
X% mkdomext liu.se \s-1UUCP\s+1 <foo >bar
X% cat bar
Xmajestix	majestix.liu.se
Xmajestix.liu	majestix.liu.se
Xmajestix.liu.se	majestix.liu.se
Xobelix	obelix.liu.se
Xobelix.liu	obelix.liu.se
Xobelix.liu.se	obelix.liu.se
Xobelix	obelix.liu.se
Xobelix.\s-1UUCP\s+1	obelix.liu.se
Xaida.uu	aida.uu.se
Xaida.uu.se	aida.uu.se
Xmc.lcs.mit.edu	mc.lcs.mit.edu
Xmit-mc	mc.lcs.mit.edu
X.SH AUTHOR
X.nf
XLennart Lovstrand <lel@ida.liu.se>
XCIS Dept, Univ of Linkoping, Sweden
X.fi
X.SH "SEE ALSO"
X.IR dbm (1)
X.br
XRFC822\-Standard for the Format of ARPA Internet Text Messages
X(section 6.2.2)
END_OF_ida/doc/mkdomext.1
if test 1613 -ne `wc -c <ida/doc/mkdomext.1`; then
    echo shar: \"ida/doc/mkdomext.1\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/doc/xalparse.8 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/doc/xalparse.8\"
else
echo shar: Extracting \"ida/doc/xalparse.8\" \(1604 characters\)
sed "s/^X//" >ida/doc/xalparse.8 <<'END_OF_ida/doc/xalparse.8'
X.TH XALPARSE 8 "24 April 1987"				\" -*- nroff -*-
X.SH NAME
Xxalparse \- parse an extended aliases file
X.SH SYNOPSIS
X.B xalparse
X.I xaliases aliases generics
X.SH DESCRIPTION
XThe
X.I xalparse
Xprogram parses an extended aliases file and produceces an ordinary
Xaliases file together with a file with generic address translations.
X.PP
XThe format of the xaliases file is a superset of
X.IR aliases (5):
X.RS
Xalias, alias, \|.\|.\|.\|: prefix address, prefix address, \|.\|.\|.\|
X.RE
XIt differes by allowing more than one LHS alias and by adding an
Xoptional
X.I prefix
Xin front of each RHS address.  The
X.I prefix
Xmarks the address as either inbound or outbound according to the
Xfollowing table:
X.RS
X.nf
X.ta \w'(\fIno mark\fP)'u+5n
X(\fIno mark\fP)	Inbound
X<	Outbound
X>	Inbound
X<>	Both Inbound and Outbound
X.fi
X.RE
X.PP
XInbound aliasing is the normal function implemented by
X.IR aliases (5).
XAll inbound entries are therefore simply copied to the
X.I aliases
Xoutput file.  Outbound addresses are written to the
X.I generics
Xfile in a format suitable for parsing by
X.I dbm (1).
XEach line will consist of the first LHS
X.I alias
Xof the entry followed by the outbound addresses separated with spaces.
XThe
X.I generics
Xfile is then normally loaded into a
X.IR dbm (3)
Xdatabase that is read by
X.IR sendmail (8)
Xand used to substitute header sender addresses with the aliased name.
X.SH AUTHOR
X.nf
XLennart Lovstrand <lel@ida.liu.se>
XCIS Dept, Univ of Linkoping, Sweden
X.fi
X.SH "SEE ALSO"
X.IR dbm (1),
X.IR aliases (5),
X.IR sendmail (8)
X.br
XElectronic Mail Addressing in Theory and Practice with The IDA Sendmail
XEnchancement Kit.
END_OF_ida/doc/xalparse.8
if test 1604 -ne `wc -c <ida/doc/xalparse.8`; then
    echo shar: \"ida/doc/xalparse.8\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/lib ; then
    echo shar: Creating directory \"ida/lib\"
    mkdir ida/lib
fi
if test -f ida/lib/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/Makefile\"
else
echo shar: Extracting \"ida/lib/Makefile\" \(2394 characters\)
sed "s/^X//" >ida/lib/Makefile <<'END_OF_ida/lib/Makefile'
X#
X#  MAKEFILE -- Library Files.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
XSENDMAIL=	/usr/lib/sendmail
XTABLES=		domaintable$(DBMEXT) generics$(DBMEXT) \
X		pathtable$(DBMEXT) aliases$(DBMEXT) mailertable$(DBMEXT) \
X		decnet/nodes decnet/xtable$(DBMEXT) uucp/xtable$(DBMEXT)
XPATHFLAGS=	-C25 -i -l`hostname`$(DOMAIN)
XUUCPNODES=	/usr/lib/uucp/L.sys
X
X#  Linkoping specific definitions
XDEPENDENTS=	asterix
XDOMAIN=		.liu.se
XNODE_DATA=	/usr/lisbet/ps/system/node-data.cmd
X
X#  The following definitions are inserted by ../Makefile
X#  Change them there--not here!
XLIBDIR=		/usr/lib/mail
XDBMEXT=		.dir
X
X
X#  Update all dbm tables
Xall:	$(TABLES)
X
X#  Fetch vital files from file server
Xpropagate:
X	@for d in $(DEPENDENTS); do \
X		echo ">>> Propagating changes to $$d"; \
X		rcp domaintable pathtable $${d}:$(LIBDIR); \
X		rcp decnet/nodes decnet/xtable $${d}:$(LIBDIR)/decnet; \
X		rcp uucp/xtable $${d}:$(LIBDIR)/uucp; \
X		rsh $$d "cd $(LIBDIR); make"; \
X	done
X
Xpathtable$(DBMEXT):	pathtable
X	pathalias $(PATHFLAGS) pathtable | dbm load pathtable
X
Xaliases generics:	xaliases
X	xalparse xaliases aliases generics
X
Xaliases$(DBMEXT):	aliases
X	$(SENDMAIL) -Cnewaliases.cf -bi
X
Xgenerics$(DBMEXT):	generics
X	dbm -L make generics generics
X
X# Note: Local fix here for making all DECnet nodes belong in .SUNET.SE
Xdomaintable$(DBMEXT):	domaintable decnet/nodes
X	(dbm parse domaintable; \
X	 awk '{printf "%s.sunet.se\t%s.sunet.se\n", $$1, $$1}' decnet/nodes) |\
X	 mkdomext liu.se ida.liu.se sunet.se UUCP | dbm -IL load domaintable
X
Xmailertable$(DBMEXT):	mailertable
X	dbm -L make mailertable mailertable
X
X# Note: Local fix here for making all DECnet nodes belong in .SUNET.SE
Xdecnet/xtable$(DBMEXT):	decnet/xtable decnet/nodes
X	(dbm parse decnet/xtable; \
X	 awk '{printf "%s.sunet.se\t%s\n", $$1, $$1}' decnet/nodes) | \
X	 dbm -IL load decnet/xtable
X
Xdecnet/nodes:		$(NODE_DATA)
X	cp decnet/nodes decnet/nodes.old
X	scanf -i " set node %*s name %s" $(NODE_DATA) >$@
X
Xuucp/xtable$(DBMEXT):	uucp/xtable $(UUCPNODES)
X	(dbm parse uucp/xtable; \
X	 awk '{printf "%s.UUCP\t%s\n", $$1, $$1}' $(UUCPNODES)) | \
X	 dbm -IL load uucp/xtable
X
Xstop:
X	-/usr/local/bin/skill sendmail
X
Xrestart:	stop
X	$(SENDMAIL) -bd -q30m
X
Xasterix:
X	rsh asterix "cd /usr/lib/mail; make fetch all"
X
Xclean:
X	-rm -f \#* *~ *.dir *.pag *.map *.dat */*.dir */*.pag */*.map */*.dat
END_OF_ida/lib/Makefile
if test 2394 -ne `wc -c <ida/lib/Makefile`; then
    echo shar: \"ida/lib/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/lib/decnet ; then
    echo shar: Creating directory \"ida/lib/decnet\"
    mkdir ida/lib/decnet
fi
if test -f ida/lib/decnet/nodes -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/decnet/nodes\"
else
echo shar: Extracting \"ida/lib/decnet/nodes\" \(1248 characters\)
sed "s/^X//" >ida/lib/decnet/nodes <<'END_OF_ida/lib/decnet/nodes'
Xliuida
Xlisbet
Xlaura
Xbill
Xbull
Xtrisse
Xfrasse
Xmurre
Xfille
Xbilbo
Xfrodo
Xelrond
Xgollum
Xolds
Xchevy
Xkafka
Xrolls
Xniva
Xvaz
Xlinnea
Xlinus
Xlina
Xelinor
Xp13l00
Xviktor
Xludvig
Xhazel
Xbigwig
Xkloker
Xtoker
Xclover
Xfiver
Xdaisy
Xaladin
Xturtle
Xminmin
Xjinjin
Xweiwei
Xfelix
Xflinta
Xflisa
Xfrida
Xfilip
Xfilipb
Xfenix
Xfrank
Xdec
Xrtr13a
Xmoll
Xdur
Xnfr
Xelin
Xelsy
Xelmer
Xromeo
Xvaxkab
Xkleo
Xklas
Xkicki
Xvera
Xkaron
Xpallas
Xfreja
Xelvira
Xsi
Xrtr08a
Xidun
Xbrage
Xbackus
Xnoatun
Xnjord
Xskade
Xgotl
Xmeta
Xpara
Xthermo
Xhelios
Xoseen
Xksab
Xkthttt
Xevild
Xelinda
Xelise
Xella
Xelton
Xelena
Xelke
Xelsa
Xeliza
Xornen
Xknoen
Xffacom
Xafivax
Xa08001
Xplasma
Xplasm1
Xvanb
Xvana
Xmcg
Xvanc
Xbasun
Xpsypdp
Xpsyvax
Xutb1
Xutb2
Xbiovax
Xostvax
Xtpsyk
Xargus
Xrtm
Xostpdp
Xlvax
Xmanwe
Xskogis
Xfjarr
Xrtr09a
Xmalin
Xtekla
Xcartus
Xpelle
Xpictor
Xtlu
Xmax
Xkvax1
Xkvax2
Xsigurd
Xescil
Xgwax1
Xgwax2
Xkemist
Xcell
Xminc
Xsilver
Xlapse
Xmaja
Xrtr18a
Ximunis
Xxray
Xgraph
Ximmuna
Xbmc1
Xfarfar
Xeva
Xnimbus
Xlaban
Xpax
Xtersx
Xapele1
Xtekn01
Xinfth1
Xtherm1
Xorgch1
Xfyvax1
Xfyvax2
Xelsys
Xcontrl
Xmeddat
Xsostel
Xfyvax3
Xcthmga
Xrtr31a
Xinfth2
Xinfth3
Xinfth4
Xkstad
Xlnkarl
Xedbild
Xsmtgbg
Xgotmed
Xvega
Xkcvax
Xsirius
Xgemini
Xadam
Xcastor
Xpollux
Xrigel
Xpandor
Xikaros
Xjanus
Xperdix
Xpan
Xshanno
Xbutter
Xerlang
Xpluto
Xagaton
Xbode
Xemma
Xshiva
Xegino
Xsamson
Xtyche
Xgarbo
Xalice
Xmira
Xp46xje
Xp46ldc
Xrtr46a
Xp46ibm
Xp46vm1
Xvaxi
Xvaxii
END_OF_ida/lib/decnet/nodes
if test 1248 -ne `wc -c <ida/lib/decnet/nodes`; then
    echo shar: \"ida/lib/decnet/nodes\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/decnet/xtable -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/decnet/xtable\"
else
echo shar: Extracting \"ida/lib/decnet/xtable\" \(1613 characters\)
sed "s/^X//" >ida/lib/decnet/xtable <<'END_OF_ida/lib/decnet/xtable'
X#
X#	DECnet domain translation table v1.0
X#	Last edited by lel@ida.liu.se Mon Apr 20 21:42:58 MET DST 1987
X#
X#	This file contiains the official domain name for nodes
X#	either on the locally connected DECnet or on the national
X#	SUNET.
X#
X#	Each line should contain the node's name within the DECnet
X#	followed by it's full official domain name.  The domain name
X#	may be followed by other names by which the node should be
X#	recognized, eg. when nodes are present in multiple domains.
X#
X#	Nodes not represented here but present in the decnet/nodes file
X#	are assumed to be contained in the SUNET.SE domain.
X#
X
Xagaton		agaton.lu.se
Xaida		aida.uu.se
Xaladin		aladin.liu.se
Xbmc1		bmc1.uu.se
Xcarmen		carmen.uu.se
Xcartus		cartus.uu.se
Xcell		cell.uu.se
Xclover		clover.liu.se
Xdaisy		daisy.liu.se
Xelinor		elinor.liu.se
Xescil		escil.uu.se
Xeva		eva.uu.se
Xfarfar		farfar.uu.se
Xfreja		freja.qz.se
Xgraph		graph.uu.se
Xgwax1		gwax1.uu.se
Xgwax2		gwax2.uu.se
Xhazel		hazel.liu.se
Ximmuna		immuna.uu.se
Ximunis		imunis.uu.se
Xjinjin		jinjin.liu.se
Xkemist		kemist.uu.se
Xkvax1		kvax1.uu.se
Xkvax2		kvax2.uu.se
Xlaban		laban.uu.se
Xlapse		lapse.uu.se
Xlina		lina.liu.se
Xlinnea		linnea.liu.se
Xlinus		linus.liu.se
Xlisbet		lisbet.liu.se
Xludvig		ludvig.liu.se
Xmaja		maja.uu.se
Xmalin		malin.uu.se
Xmax		max.uu.se
Xminc		minc.uu.se
Xminmin		minmin.liu.se
Xnimbus		nimbus.uu.se
Xp13l00		p13l00.liu.se
Xpandor		pandor.lu.se
Xpax		pax.uu.se
Xpelle		pelle.uu.se
Xpictor		pictor.uu.se
Xrtr18a		rtr18a.uu.se
Xsigurd		sigurd.uu.se
Xsilver		silver.uu.se
Xtekla		tekla.uu.se
Xtlu		tlu.uu.se
Xturtle		turtle.liu.se
Xviktor		viktor.liu.se
Xweiwei		weiwei.liu.se
Xxray		xray.uu.se
END_OF_ida/lib/decnet/xtable
if test 1613 -ne `wc -c <ida/lib/decnet/xtable`; then
    echo shar: \"ida/lib/decnet/xtable\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/mailertable -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/mailertable\"
else
echo shar: Extracting \"ida/lib/mailertable\" \(374 characters\)
sed "s/^X//" >ida/lib/mailertable <<'END_OF_ida/lib/mailertable'
X#
X#	Mailer table for physical node majestix.liu.se
X#	(aka the UUCP node liuida)
X#
X
XUUCP:alp	alp.UUCP	alp.se
XUUCP:liutde	liutde.UUCP	liutde.se	tde.liu.se
XUUCP:prosys	prosys.UUCP	prosys.se
XUUCP-A:enea	enea.UUCP	enea.se
XUUCP-A:erilin	erilin.UUCP	erilin.se	erilin.ericsson.se
XUUCP-A:erix	erix.UUCP	erix.se		erix.ericsson.se
XUUCP-A:rainier	rainier.UUCP	rainier.se	rainier.liu.se
END_OF_ida/lib/mailertable
if test 374 -ne `wc -c <ida/lib/mailertable`; then
    echo shar: \"ida/lib/mailertable\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/restart_clients -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/restart_clients\"
else
echo shar: Extracting \"ida/lib/restart_clients\" \(202 characters\)
sed "s/^X//" >ida/lib/restart_clients <<'END_OF_ida/lib/restart_clients'
X#!/bin/sh
X#		restart sendmail on all clients
X#
X
Xfor h in crabbofix lillefix miraculix portofix prefix senilix smidefix tragico
mix; do
X  echo -n "$h "
X  rsh $h -n "(cd /usr/lib/mail; make restart)"
Xdone
END_OF_ida/lib/restart_clients
if test 202 -ne `wc -c <ida/lib/restart_clients`; then
    echo shar: \"ida/lib/restart_clients\" unpacked with wrong size!
fi
chmod +x ida/lib/restart_clients
# end of overwriting check
fi
if test -f ida/lib/sendmail.hf -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/sendmail.hf\"
else
echo shar: Extracting \"ida/lib/sendmail.hf\" \(1858 characters\)
sed "s/^X//" >ida/lib/sendmail.hf <<'END_OF_ida/lib/sendmail.hf'
X@(#)	sendmail.hf	4.2	6/7/85
Xcpyr	
Xcpyr	Sendmail
Xcpyr	Copyright (c) 1983  Eric P. Allman
Xcpyr	Berkeley, California
Xcpyr	
Xcpyr	Copyright (c) 1983 Regents of the University of California.
Xcpyr	All rights reserved.  The Berkeley software License Agreement
Xcpyr	specifies the terms and conditions for redistribution.
Xcpyr	
Xcpyr	@(#)sendmail.hf	4.2 (Berkeley) 6/7/85
Xcpyr	
Xsmtp	Commands:
Xsmtp		HELO	MAIL	RCPT	DATA	RSET
Xsmtp		NOOP	QUIT	HELP	VRFY	EXPN
Xsmtp	For more info use "HELP <topic>".
Xsmtp	To report bugs in the implementation contact eric@Berkeley.ARPA
Xsmtp	or eric@UCB-ARPA.ARPA.
Xsmtp	For local information contact postmaster at this site.
Xhelp	HELP [ <topic> ]
Xhelp		The HELP command gives help info.
Xhelo	HELO <hostname>
Xhelo		Introduce yourself.  I am a boor, so I really don't
Xhelo		care if you do.
Xmail	MAIL FROM: <sender>
Xmail		Specifies the sender.
Xrcpt	RCPT TO: <recipient>
Xrcpt		Specifies the recipient.  Can be used any number of times.
Xdata	DATA
Xdata		Following text is collected as the message.
Xdata		End with a single dot.
Xrset	RSET
Xrset		Resets the system.
Xquit	QUIT
Xquit		Exit sendmail (SMTP).
Xvrfy	VRFY <recipient>
Xvrfy		Not implemented to protocol.  Gives some sexy
Xvrfy		information.
Xexpn	EXPN <recipient>
Xexpn		Same as VRFY in this implementation.
Xnoop	NOOP
Xnoop		Do nothing.
Xsend	SEND FROM: <sender>
Xsend		replaces the MAIL command, and can be used to send
Xsend		directly to a users terminal.  Not supported in this
Xsend		implementation.
Xsoml	SOML FROM: <sender>
Xsoml		Send or mail.  If the user is logged in, send directly,
Xsoml		otherwise mail.  Not supported in this implementation.
Xsaml	SAML FROM: <sender>
Xsaml		Send and mail.  Send directly to the user's terminal,
Xsaml		and also mail a letter.  Not supported in this
Xsaml		implementation.
Xturn	TURN
Xturn		Reverses the direction of the connection.  Not currently
Xturn		implemented.
END_OF_ida/lib/sendmail.hf
if test 1858 -ne `wc -c <ida/lib/sendmail.hf`; then
    echo shar: \"ida/lib/sendmail.hf\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/sendmail.st -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/sendmail.st\"
else
echo shar: Extracting \"ida/lib/sendmail.st\" \(0 character\)
sed "s/^X//" >ida/lib/sendmail.st <<'END_OF_ida/lib/sendmail.st'
END_OF_ida/lib/sendmail.st
if test 0 -ne `wc -c <ida/lib/sendmail.st`; then
    echo shar: \"ida/lib/sendmail.st\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/stop_clients -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/stop_clients\"
else
echo shar: Extracting \"ida/lib/stop_clients\" \(196 characters\)
sed "s/^X//" >ida/lib/stop_clients <<'END_OF_ida/lib/stop_clients'
X#!/bin/sh
X#		stop sendmail on all clients
X#
X
Xfor h in crabbofix lillefix miraculix portofix prefix senilix smidefix tragico
mix; do
X  echo -n "$h "
X  rsh $h -n "(cd /usr/lib/mail; make stop)"
Xdone
END_OF_ida/lib/stop_clients
if test 196 -ne `wc -c <ida/lib/stop_clients`; then
    echo shar: \"ida/lib/stop_clients\" unpacked with wrong size!
fi
chmod +x ida/lib/stop_clients
# end of overwriting check
fi
if test ! -d ida/lib/uucp ; then
    echo shar: Creating directory \"ida/lib/uucp\"
    mkdir ida/lib/uucp
fi
if test -f ida/lib/uucp/relays -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/uucp/relays\"
else
echo shar: Extracting \"ida/lib/uucp/relays\" \(548 characters\)
sed "s/^X//" >ida/lib/uucp/relays <<'END_OF_ida/lib/uucp/relays'
Xakgua.UUCP
Xalberta.UUCP
Xbellcore.UUCP
Xburl.UUCP
Xcbosgd.UUCP
Xcernvax.UUCP
Xclyde.UUCP
Xcmcl2.UUCP
Xcuae2.UUCP
Xdecvax.UUCP
Xdecwrl.UUCP
Xdiku.UUCP
Xdrillsys.UUCP
Xenea.UUCP
Xenea.se
Xgatech.UUCP
Xglacier.UUCP
Xhao.UUCP
Xhplabs.UUCP
Xi2unix.UUCP
Xihnp4.UUCP
Xinria.UUCP
Xkddlab.UUCP
Xlll-crg.UUCP
Xlll-lcc.UUCP
Xmcnc.UUCP
Xmcvax.UUCP
Xmcvax.cwi.nl
Xmunnari.UUCP
Xoliveb.UUCP
Xpenet.UUCP
Xphilabs.UUCP
Xprlb2.UUCP
Xqantel.UUCP
Xsdcrdcf.UUCP
Xsdcsvax.UUCP
Xseismo.UUCP
Xtektronix.UUCP
Xubc-vision.UUCP
Xukc.UUCP
Xulysses.UUCP
Xunido.UUCP
Xutzoo.UUCP
Xuw-beaver.UUCP
Xvmars.UUCP
Xwatmath.UUCP
END_OF_ida/lib/uucp/relays
if test 548 -ne `wc -c <ida/lib/uucp/relays`; then
    echo shar: \"ida/lib/uucp/relays\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/lib/uucp/xtable -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/lib/uucp/xtable\"
else
echo shar: Extracting \"ida/lib/uucp/xtable\" \(672 characters\)
sed "s/^X//" >ida/lib/uucp/xtable <<'END_OF_ida/lib/uucp/xtable'
X#
X#	Translation table between domain addresses and
X#	flat-spaced UUCP node names.
X#
X#	This table is used when formatting addresses for
X#	delivery overold-fashioned UUCP links.  Batched SMTP
X#	over UUCP does not use this table, since it is assumed
X#	that (B)SMTP nodes already know about domain names.
X#
X#	It is never necessary to enter a translation from "foo.UUCP"
X#	to "foo", since that already (automatically) is done by
X#	ruleset 14.
X#
X
Xalp		alp.se
Xemil		emil.uu.se
Xenea		enea.se
Xerilin		erilin.ericsson.se
Xerix		erix.ericsson.se
Xkuling		kuling.uu.se
Xliuida		ida.liu.se
Xliutde		tde.liu.se
Xmcvax		mcvax.cwi.nl
Xnumax		numax.uu.se
Xobelix		obelix.liu.se
Xprosys		prosys.se
END_OF_ida/lib/uucp/xtable
if test 672 -ne `wc -c <ida/lib/uucp/xtable`; then
    echo shar: \"ida/lib/uucp/xtable\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d ida/patches ; then
    echo shar: Creating directory \"ida/patches\"
    mkdir ida/patches
fi
if test -f ida/patches/BSD29.edit -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/BSD29.edit\"
else
echo shar: Extracting \"ida/patches/BSD29.edit\" \(263 characters\)
sed "s/^X//" >ida/patches/BSD29.edit <<'END_OF_ida/patches/BSD29.edit'
X: BSD29.edit SRCDIR
Xcd $1
Xchmod u+w Makefile
Xecho ">>> Editing $1/Makefile for use with BSD 2.9..."
X/bin/ed Makefile <<EOF
Xg/^LIBS=/s/$/ -ljobs -lndir/
Xg/^OBJS2=/s/$/ bcopy.o/
Xg/^SRCS2=/s/$/ bcopy.c/
Xg/^CCONFIG=/s/$/ -DBSD29 -DUCB_NET/
Xw
Xq
XEOF
Xchmod u-w Makefile
END_OF_ida/patches/BSD29.edit
if test 263 -ne `wc -c <ida/patches/BSD29.edit`; then
    echo shar: \"ida/patches/BSD29.edit\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/BSD42.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/BSD42.diff\"
else
echo shar: Extracting \"ida/patches/BSD42.diff\" \(523 characters\)
sed "s/^X//" >ida/patches/BSD42.diff <<'END_OF_ida/patches/BSD42.diff'
X*** sendmail.h.old	Wed May 27 01:59:12 1987
X--- sendmail.h	Wed May 27 02:26:37 1987
X***************
X*** 652,654 ****
X--- 652,673 ----
X  };
X  
X  extern struct metamac	MetaMacros[];
X+  
X+ /*
X+ ** BSD4.2 Compatibility Code
X+ */
X+ 
X+ #ifndef sigmask
X+ # define sigmask(m)	(1 << ((m)-1))
X+ #endif sigmask
X+ 
X+ #ifndef TRY_AGAIN
X+ # define TRY_AGAIN	2
X+ # ifdef EXTERN
X+ EXTERN int	h_errno;		/* ought to be initialized too */
X+ # endif EXTERN
X+ #endif TRY_AGAIN
X+ 
X+ #ifndef LOG_MAIL
X+ # define LOG_MAIL	(2<<3)
X+ #endif LOG_MAIL
END_OF_ida/patches/BSD42.diff
if test 523 -ne `wc -c <ida/patches/BSD42.diff`; then
    echo shar: \"ida/patches/BSD42.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/MDBM.edit -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/MDBM.edit\"
else
echo shar: Extracting \"ida/patches/MDBM.edit\" \(171 characters\)
sed "s/^X//" >ida/patches/MDBM.edit <<'END_OF_ida/patches/MDBM.edit'
X: MDBM.edit SRCDIR DBMLIB
Xcd $1
Xchmod u+w Makefile
Xecho ">>> Editing $1/Makefile to enable MDBM..."
X/bin/ed Makefile <<EOF
Xg/^LIBS=/s/-ldbm/$2/
Xw
Xq
XEOF
Xchmod u-w Makefile
END_OF_ida/patches/MDBM.edit
if test 171 -ne `wc -c <ida/patches/MDBM.edit`; then
    echo shar: \"ida/patches/MDBM.edit\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/Makefile\"
else
echo shar: Extracting \"ida/patches/Makefile\" \(1231 characters\)
sed "s/^X//" >ida/patches/Makefile <<'END_OF_ida/patches/Makefile'
X#
X#  MAKEFILE -- Sendmail Patches.
X#  Copyright (c) 1987 Lennart Lovstrand
X#  CIS Dept, Univ of Linkoping, Sweden
X#
X#  Use it, abuse it, but don't sell it.
X#
X
XSRCDIFFS=	Version.c.diff alias.c.diff conf.c.diff daemon.c.diff \
X		deliver.c.diff err.c.diff headers.c.diff macro.c.diff \
X		main.c.diff parseaddr.c.diff queue.c.diff readcf.c.diff \
X		recipient.c.diff savemail.c.diff sendmail.h.diff \
X		srvrsmtp.c.diff usersmtp.c.diff util.c.diff
XDOCDIFFS=	op.me.diff
X
X
X#  The following definitions are inserted by ../Makefile
X#  Change them there--not here!
XMDBM=
XDBMLIB=		-ldbm
XSRCDIR=		../../src
XDOCDIR=		../../doc
X
XBSD43 bsd43 patch:
X		for f in $(SRCDIFFS); do \
X			patch $(SRCDIR)/`basename $$f .diff` $$f; \
X		done
X		for f in $(DOCDIFFS); do \
X			patch $(DOCDIR)/`basename $$f .diff` $$f; \
X		done
X		-if [ -n "$(MDBM)" ]; then \
X			cp mdbm_compat.h $(SRCDIR); \
X			patch -d $(SRCDIR) -b .old < MDBM.diff; \
X			sh MDBM.edit $(SRCDIR) $(DBMLIB); \
X		fi
X
XBSD42 bsd42:	BSD43
X		patch -d $(SRCDIR) -b .old < BSD42.diff
X
XBSD29 bsd29:	BSD42
X		patch -d $(SRCDIR) -b .old < BSD29.diff
X		sh BSD29.edit $(SRCDIR)
X
Xbackup:
X		tar cvf Backup.tar $(SRCDIR)/*.[hc] $(DOCDIR)/op.me
X
Xrestore:
X		tar xvf Backup.tar
X
Xclean:
X		-rm -f \#* *~ Backup.tar
END_OF_ida/patches/Makefile
if test 1231 -ne `wc -c <ida/patches/Makefile`; then
    echo shar: \"ida/patches/Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/Version.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/Version.c.diff\"
else
echo shar: Extracting \"ida/patches/Version.c.diff\" \(405 characters\)
sed "s/^X//" >ida/patches/Version.c.diff <<'END_OF_ida/patches/Version.c.diff'
X*** Version.c.orig	Fri Mar 13 18:51:11 1987
X--- Version.c	Mon May 25 15:51:13 1987
X***************
X*** 12,18 ****
X  static char	SccsId[] = "@(#)version.c	5.51 (Berkeley) 5/2/86";
X  #endif not lint
X  
X! char	Version[] = "5.51";
X  
X  # ifdef COMMENT
X  
X--- 12,18 ----
X  static char	SccsId[] = "@(#)version.c	5.51 (Berkeley) 5/2/86";
X  #endif not lint
X  
X! char	Version[] = "5.51++";
X  
X  # ifdef COMMENT
X  
END_OF_ida/patches/Version.c.diff
if test 405 -ne `wc -c <ida/patches/Version.c.diff`; then
    echo shar: \"ida/patches/Version.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/conf.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/conf.c.diff\"
else
echo shar: Extracting \"ida/patches/conf.c.diff\" \(720 characters\)
sed "s/^X//" >ida/patches/conf.c.diff <<'END_OF_ida/patches/conf.c.diff'
X*** conf.c.orig	Fri Mar 13 18:51:01 1987
X--- conf.c	Mon May 25 15:54:51 1987
X***************
X*** 80,85 ****
X--- 80,86 ----
X  	"resent-cc",		H_RCPT|H_RESENT,
X  	"bcc",			H_RCPT|H_ACHECK,
X  	"resent-bcc",		H_RCPT|H_ACHECK|H_RESENT,
X+ 	"apparently-to",	H_RCPT,
X  		/* message identification and control */
X  	"message-id",		0,
X  	"resent-message-id",	H_RESENT,
X***************
X*** 141,146 ****
X--- 142,149 ----
X  
X  setdefaults()
X  {
X+ 	int c;
X+ 
X  	QueueLA = 8;
X  	QueueFactor = 10000;
X  	RefuseLA = 12;
X***************
X*** 151,156 ****
X--- 154,164 ----
X  	FileMode = 0644;
X  	DefUid = 1;
X  	DefGid = 1;
X+ 
X+ # ifdef NDBM
X+ 	for (c = 0; c < 128; c++)
X+ 		DbmTab[c].dbm = DB_NOTYETOPEN;
X+ # endif NDBM
X  }
X  
X  # ifdef V6
END_OF_ida/patches/conf.c.diff
if test 720 -ne `wc -c <ida/patches/conf.c.diff`; then
    echo shar: \"ida/patches/conf.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/err.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/err.c.diff\"
else
echo shar: Extracting \"ida/patches/err.c.diff\" \(518 characters\)
sed "s/^X//" >ida/patches/err.c.diff <<'END_OF_ida/patches/err.c.diff'
X*** err.c.orig	Fri Mar 13 18:51:05 1987
X--- err.c	Mon May 25 15:55:17 1987
X***************
X*** 354,360 ****
X  		(void) sprintf(buf, "Connection refused by %s", CurHostName);
X  		return (buf);
X  
X! 	  case (TRY_AGAIN+MAX_ERRNO):
X  		(void) sprintf(buf, "Host Name Lookup Failure");
X  		return (buf);
X  	}
X--- 354,360 ----
X  		(void) sprintf(buf, "Connection refused by %s", CurHostName);
X  		return (buf);
X  
X! 	  case (TRY_AGAIN+MAX_ERRNO): 
X  		(void) sprintf(buf, "Host Name Lookup Failure");
X  		return (buf);
X  	}
END_OF_ida/patches/err.c.diff
if test 518 -ne `wc -c <ida/patches/err.c.diff`; then
    echo shar: \"ida/patches/err.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/headers.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/headers.c.diff\"
else
echo shar: Extracting \"ida/patches/headers.c.diff\" \(503 characters\)
sed "s/^X//" >ida/patches/headers.c.diff <<'END_OF_ida/patches/headers.c.diff'
X*** headers.c.orig	Fri Mar 13 18:51:06 1987
X--- headers.c	Mon May 25 15:51:27 1987
X***************
X*** 777,783 ****
X  		*p = '\0';
X  
X  		/* translate the name to be relative */
X! 		name = remotename(name, m, bitset(H_FROM, h->h_flags), FALSE);
X  		if (*name == '\0')
X  		{
X  			*p = savechar;
X--- 777,784 ----
X  		*p = '\0';
X  
X  		/* translate the name to be relative */
X! 		name = remotename(name, m, bitset(H_FROM, h->h_flags), FALSE,
X! 				  TRUE);
X  		if (*name == '\0')
X  		{
X  			*p = savechar;
END_OF_ida/patches/headers.c.diff
if test 503 -ne `wc -c <ida/patches/headers.c.diff`; then
    echo shar: \"ida/patches/headers.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/macro.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/macro.c.diff\"
else
echo shar: Extracting \"ida/patches/macro.c.diff\" \(387 characters\)
sed "s/^X//" >ida/patches/macro.c.diff <<'END_OF_ida/patches/macro.c.diff'
X*** macro.c.orig	Fri Mar 13 18:51:06 1987
X--- macro.c	Mon May 25 15:51:29 1987
X***************
X*** 168,173 ****
X--- 168,174 ----
X  **		$h   to host
X  **		$i   queue id
X  **		$j   official SMTP hostname, used in messages+
X+ **		$k   our UUCP host name, if different from $w
X  **		$l   UNIX-style from line+
X  **		$n   name of sendmail ("MAILER-DAEMON" on local
X  **		     net typically)+
END_OF_ida/patches/macro.c.diff
if test 387 -ne `wc -c <ida/patches/macro.c.diff`; then
    echo shar: \"ida/patches/macro.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/mdbm_compat.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/mdbm_compat.h\"
else
echo shar: Extracting \"ida/patches/mdbm_compat.h\" \(762 characters\)
sed "s/^X//" >ida/patches/mdbm_compat.h <<'END_OF_ida/patches/mdbm_compat.h'
X/**
X **	MDBM Compatibility File
X **
X **	These definitions will make sendmail use Maryland's mdbm
X **	library package instead of the new multifile database
X **	routines of 4.3.
X **
X **	Note: Don't use this if you already have ndbm.
X **/
X
X#include <mdbm.h>
X
Xtypedef struct mdbm DBMFILE;
X
X#ifndef NDBM
X# define NDBM
X#endif NDBM
X#ifndef MDBM
X# define MDBM
X#endif MDBM
X
X/*
X *  Mdbm equivalents for ndbm functions
X */
X
X#define DBM_REPLACE	MDBM_REPLACE
X#define DBM_INSERT	MDBM_INSERT
X
X#define dbm_open(file, flags, mode) \
X			mdbm_open(file, flags, mode, NULL, NULL, NULL)
X#define dbm_close	mdbm_close
X#define dbm_fetch	mdbm_fetch
X#define dbm_store	mdbm_store
X#define dbm_firstkey	mdbm_firstkey
X#define dbm_nextkey	mdbm_nextkey /* don't forget to fill in 2nd param! */
END_OF_ida/patches/mdbm_compat.h
if test 762 -ne `wc -c <ida/patches/mdbm_compat.h`; then
    echo shar: \"ida/patches/mdbm_compat.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/queue.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/queue.c.diff\"
else
echo shar: Extracting \"ida/patches/queue.c.diff\" \(744 characters\)
sed "s/^X//" >ida/patches/queue.c.diff <<'END_OF_ida/patches/queue.c.diff'
X*** queue.c.orig	Fri Mar 13 18:51:03 1987
X--- queue.c	Mon May 25 15:51:38 1987
X***************
X*** 175,181 ****
X  	*/
X  
X  	bzero((char *) &nullmailer, sizeof nullmailer);
X! 	nullmailer.m_r_rwset = nullmailer.m_s_rwset = -1;
X  	nullmailer.m_eol = "\n";
X  
X  	define('g', "\001f", e);
X--- 175,182 ----
X  	*/
X  
X  	bzero((char *) &nullmailer, sizeof nullmailer);
X! 	nullmailer.m_re_rwset = nullmailer.m_se_rwset = -1;
X! 	nullmailer.m_rh_rwset = nullmailer.m_sh_rwset = -1;
X  	nullmailer.m_eol = "\n";
X  
X  	define('g', "\001f", e);
X***************
X*** 352,357 ****
X--- 353,362 ----
X  		free(w->w_name);
X  		free((char *) w);
X  	}
X+ 	/*
X+ 	 *	Don't let dropenvelope() trash locked queue files!
X+ 	 */
X+ 	CurEnv->e_id = NULL;
X  	finis();
X  }
X  /*
END_OF_ida/patches/queue.c.diff
if test 744 -ne `wc -c <ida/patches/queue.c.diff`; then
    echo shar: \"ida/patches/queue.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/readcf.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/readcf.c.diff\"
else
echo shar: Extracting \"ida/patches/readcf.c.diff\" \(2154 characters\)
sed "s/^X//" >ida/patches/readcf.c.diff <<'END_OF_ida/patches/readcf.c.diff'
X*** readcf.c.orig	Fri Mar 13 18:51:07 1987
X--- readcf.c	Mon May 25 15:51:41 1987
X***************
X*** 434,441 ****
X  				setbitn(*p, m->m_flags);
X  			break;
X  
X! 		  case 'S':		/* sender rewriting ruleset */
X! 		  case 'R':		/* recipient rewriting ruleset */
X  			i = atoi(p);
X  			if (i < 0 || i >= MAXRWSETS)
X  			{
X--- 434,441 ----
X  				setbitn(*p, m->m_flags);
X  			break;
X  
X! 		  case 'S':		/* sender rewriting ruleset(s) */
X! 		  case 'R':		/* recipient rewriting ruleset(s) */
X  			i = atoi(p);
X  			if (i < 0 || i >= MAXRWSETS)
X  			{
X***************
X*** 442,451 ****
X  				syserr("invalid rewrite set, %d max", MAXRWSETS
);
X  				return;
X  			}
X! 			if (fcode == 'S')
X! 				m->m_s_rwset = i;
X! 			else
X! 				m->m_r_rwset = i;
X  			break;
X  
X  		  case 'E':		/* end of line string */
X--- 442,464 ----
X  				syserr("invalid rewrite set, %d max", MAXRWSETS
);
X  				return;
X  			}
X! 			/* default envelope ruleset for header ruleset */
X! 			if (fcode == 'S') {
X! 				m->m_se_rwset = i;
X! 				m->m_sh_rwset = i;
X! 			} else {
X! 				m->m_re_rwset = i;
X! 				m->m_rh_rwset = i;
X! 			}
X! 			/* look for specific header rewriting ruleset */
X! 			while (*p != '\0' && *p != ',' && *p != '/') p++;
X! 			if (*p++ == '/') {
X! 				i = atoi(p);
X! 				if (fcode == 'S')
X! 					m->m_sh_rwset = i;
X! 				else
X! 					m->m_rh_rwset = i;
X! 			}
X  			break;
X  
X  		  case 'E':		/* end of line string */
X***************
X*** 797,803 ****
X  	  case 'i':		/* ignore dot lines in message */
X  		IgnrDot = atobool(val);
X  		break;
X! 
X  	  case 'L':		/* log level */
X  		LogLevel = atoi(val);
X  		break;
X--- 810,821 ----
X  	  case 'i':		/* ignore dot lines in message */
X  		IgnrDot = atobool(val);
X  		break;
X! # ifdef NDBM
X! 	  case 'K':		/* keyed database file */
X! 		if (*val != '\0')
X! 			DbmTab[*val].name = newstr(&val[1]);
X! 		break;
X! # endif NDBM
X  	  case 'L':		/* log level */
X  		LogLevel = atoi(val);
X  		break;
X***************
X*** 911,916 ****
X--- 929,938 ----
X  
X  	  case 'Z':		/* work time factor */
X  		WkTimeFact = atoi(val);
X+ 		break;
X+ 
X+ 	  case '/':		/* use split envelope/header rewriting */
X+ 		SplitRewriting = TRUE;
X  		break;
X  
X  	  default:
END_OF_ida/patches/readcf.c.diff
if test 2154 -ne `wc -c <ida/patches/readcf.c.diff`; then
    echo shar: \"ida/patches/readcf.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/savemail.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/savemail.c.diff\"
else
echo shar: Extracting \"ida/patches/savemail.c.diff\" \(1282 characters\)
sed "s/^X//" >ida/patches/savemail.c.diff <<'END_OF_ida/patches/savemail.c.diff
'
X*** savemail.c.orig	Fri Mar 13 18:51:08 1987
X--- savemail.c	Mon May 25 15:51:45 1987
X***************
X*** 366,371 ****
X--- 366,372 ----
X  	ENVELOPE errenvelope;
X  	static int returndepth;
X  	register ADDRESS *q;
X+ 	char *to, *cc;
X  
X  # ifdef DEBUG
X  	if (tTd(6, 1))
X***************
X*** 395,405 ****
X  	ee->e_flags |= EF_RESPONSE;
X  	ee->e_sendqueue = returnq;
X  	openxscript(ee);
X! 	for (q = returnq; q != NULL; q = q->q_next)
X! 	{
X! 		if (q->q_alias == NULL)
X! 			addheader("to", q->q_paddr, ee);
X  	}
X  
X  	(void) sprintf(buf, "Returned mail: %s", msg);
X  	addheader("subject", buf, ee);
X--- 396,422 ----
X  	ee->e_flags |= EF_RESPONSE;
X  	ee->e_sendqueue = returnq;
X  	openxscript(ee);
X! 
X! 	/* put the recipients in the to: header (cc: for PostMasterCopy) */
X! 	cc = NULL;
X! 	to = buf;
X! 	for (q = returnq; q != NULL; q = q->q_next) {
X! 	    if (q->q_alias == NULL)
X! 		if (strcmp(q->q_paddr, PostMasterCopy) == 0)
X! 		    cc = q->q_paddr;
X! 		else {
X! 		    int len = strlen(q->q_paddr);
X! 
X! 		    *to++ = ',';
X! 		    strncpy(to, q->q_paddr, len);
X! 		    to += len;
X! 		}
X  	}
X+ 	*to = '\0';
X+ 	if (to != buf)
X+ 	    addheader("to", buf+1, ee);
X+ 	if (cc)
X+ 	    addheader("cc", cc, ee);
X  
X  	(void) sprintf(buf, "Returned mail: %s", msg);
X  	addheader("subject", buf, ee);
END_OF_ida/patches/savemail.c.diff
if test 1282 -ne `wc -c <ida/patches/savemail.c.diff`; then
    echo shar: \"ida/patches/savemail.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/usersmtp.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/usersmtp.c.diff\"
else
echo shar: Extracting \"ida/patches/usersmtp.c.diff\" \(1852 characters\)
sed "s/^X//" >ida/patches/usersmtp.c.diff <<'END_OF_ida/patches/usersmtp.c.diff
'
X*** usersmtp.c.orig	Fri Mar 13 18:51:09 1987
X--- usersmtp.c	Mon May 25 15:51:50 1987
X***************
X*** 34,39 ****
X--- 34,40 ----
X  
X  #define REPLYTYPE(r)	((r) / 100)		/* first digit of reply code */
X  #define REPLYCLASS(r)	(((r) / 10) % 10)	/* second digit of repl
y code */
X+ #define SMTPGOODREPLY	250			/* positive SMTP respon
se */
X  #define SMTPCLOSING	421			/* "Service Shutting Down" */
X  
X  char	SmtpMsgBuffer[MAXLINE];		/* buffer for commands */
X***************
X*** 241,247 ****
X  	register int r;
X  	extern char *remotename();
X  
X! 	smtpmessage("RCPT To:<%s>", m, remotename(to->q_user, m, FALSE, TRUE));
X  
X  	SmtpPhase = "RCPT wait";
X  	r = reply(m);
X--- 242,257 ----
X  	register int r;
X  	extern char *remotename();
X  
X! 	/* DISABLED since I didn't understand why further rewriting
X! 	   should be necessary.  Since it doesn't go through ruleset 0
X! 	   on this second rewriting (which it should since it's a
X! 	   envelope recipient address) there is even the risk that it
X! 	   gets screwed up.
X! 						-- lel@ida.liu.se
X! 	smtpmessage("RCPT To:<%s>", m, remotename(to->q_user, m, FALSE, TRUE,
X! 						  FALSE));
X! 	*/
X! 	smtpmessage("RCPT To:<%s>", m, to->q_user);
X  
X  	SmtpPhase = "RCPT wait";
X  	r = reply(m);
X***************
X*** 291,297 ****
X  		return (EX_TEMPFAIL);
X  	else if (r == 554)
X  		return (EX_UNAVAILABLE);
X! 	else if (r != 354)
X  		return (EX_PROTOCOL);
X  
X  	/* now output the actual message */
X--- 301,307 ----
X  		return (EX_TEMPFAIL);
X  	else if (r == 554)
X  		return (EX_UNAVAILABLE);
X! 	else if (r != 354 && r != 250)
X  		return (EX_PROTOCOL);
X  
X  	/* now output the actual message */
X***************
X*** 377,382 ****
X--- 387,395 ----
X  
X  	if (tTd(18, 1))
X  		printf("reply\n");
X+ 
X+ 	if (bitnset(M_BSMTP, m->m_flags))
X+ 		return (SMTPGOODREPLY);
X  
X  	/*
X  	**  Read the input line, being careful not to hang.
END_OF_ida/patches/usersmtp.c.diff
if test 1852 -ne `wc -c <ida/patches/usersmtp.c.diff`; then
    echo shar: \"ida/patches/usersmtp.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f ida/patches/util.c.diff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/patches/util.c.diff\"
else
echo shar: Extracting \"ida/patches/util.c.diff\" \(2288 characters\)
sed "s/^X//" >ida/patches/util.c.diff <<'END_OF_ida/patches/util.c.diff'
X*** util.c.orig	Fri Mar 13 18:51:10 1987
X--- util.c	Mon May 25 15:51:52 1987
X***************
X*** 20,25 ****
X--- 20,27 ----
X  # include <ctype.h>
X  # include "sendmail.h"
X  
X+ bool catPrint = FALSE;		/* xputs: print strings for catenation 
*/
X+ 
X  /*
X  **  STRIPQUOTES -- Strip quotes & quote bits from a string.
X  **
X***************
X*** 261,266 ****
X--- 263,269 ----
X  	register char *s;
X  {
X  	register char c;
X+ 	register struct metamac *m;
X  
X  	if (s == NULL)
X  	{
X***************
X*** 267,273 ****
X  		printf("<null>");
X  		return;
X  	}
X! 	(void) putchar('"');
X  	while ((c = *s++) != '\0')
X  	{
X  		if (!isascii(c))
X--- 270,288 ----
X  		printf("<null>");
X  		return;
X  	}
X! 
X! 	if (s[0] == MATCHREPL && isdigit(s[1]) && s[2] == '\0') {
X! 	  printf("$%c", s[1]);
X! 	  return;
X! 	} else
X! 	  for (m = MetaMacros; m->metaname != '\0'; m++)
X! 	    if (m->metaval == *s) {
X! 	      printf("$%c%s", m->metaname, &s[1]);
X! 	      return;
X! 	    }
X! 
X! 	if (!catPrint)
X! 		(void) putchar('"');
X  	while ((c = *s++) != '\0')
X  	{
X  		if (!isascii(c))
X***************
X*** 282,288 ****
X  		}
X  		(void) putchar(c);
X  	}
X! 	(void) putchar('"');
X  	(void) fflush(stdout);
X  }
X  /*
X--- 297,304 ----
X  		}
X  		(void) putchar(c);
X  	}
X! 	if (!catPrint)
X! 		(void) putchar('"');
X  	(void) fflush(stdout);
X  }
X  /*
X***************
X*** 306,316 ****
X  	register char *p;
X  {
X  	register char c;
X  
X  	if (p == NULL)
X  		return;
X  	for (; (c = *p) != '\0'; p++)
X! 		if (isascii(c) && isupper(c))
X  			*p = c - 'A' + 'a';
X  }
X  /*
X--- 322,335 ----
X  	register char *p;
X  {
X  	register char c;
X+ 	register bool quoted_string = FALSE;
X  
X  	if (p == NULL)
X  		return;
X  	for (; (c = *p) != '\0'; p++)
X! 		if (c == '"')
X! 			quoted_string = !quoted_string;
X! 		else if (!quoted_string && isascii(c) && isupper(c))
X  			*p = c - 'A' + 'a';
X  }
X  /*
X***************
X*** 862,865 ****
X--- 881,907 ----
X  		if (map[i] != 0)
X  			return (FALSE);
X  	return (TRUE);
X+ }
X+ 
X+ /*
X+ **	PRINTCAV -- Print concatenated argument vector
X+ **
X+ **	Parameters:
X+ **		av -- argument vector.
X+ **
X+ **	Returns:
X+ **		none.
X+ **
X+ **	Side Effects:
X+ **		prints av.
X+ */
X+ 
X+ printcav(av)
X+      register char **av;
X+ {
X+   bool oldCatPrint = catPrint;
X+ 
X+   catPrint = TRUE;
X+   printav(av);
X+   catPrint = oldCatPrint;
X  }
END_OF_ida/patches/util.c.diff
if test 2288 -ne `wc -c <ida/patches/util.c.diff`; then
    echo shar: \"ida/patches/util.c.diff\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 1 \(of 7\).
cp /dev/null ark1isdone
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