v08i033: Uumail release 4.2, Part01/04

sources-request at mirror.UUCP sources-request at mirror.UUCP
Fri Feb 6 06:59:16 AEST 1987


Submitted by: sob at soma.BCM.TMC.EDU (Stan Barber)
Mod.sources: Volume 8, Issue 33
Archive-name: uumail4/Part01

[  IMPORTANT NOTE:  This version superceeds the recent net.sources posting
   because it also inclues the Patch#1.  An earlier version of Uumail
   was next in the backlog, hence this "rapid" posting.  --r$  ]

#! /bin/sh

# Make a new directory for the uumail sources, cd to it, 
# and run kits 1 thru 4 through sh. 
# When all 4 kits have been run, read README.

echo "This is uumail kit 1 (of 4).  If kit 1 is complete, the line"
echo '"'"End of kit 1 (of 4)"'" will echo at the end.'
echo ""
export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
echo Extracting Configure
cat >Configure <<'!STUFFY!FUNK!'
#! /bin/sh
#
# If these # comments don't work, trim them.  Don't worry about the other
# shell scripts, Configure will trim # comments from them for you.
#
# $Header: Configure,v 1.12 87/02/02 15:44:21 sob Exp $
#
# $Log:	Configure,v $
# Revision 1.12  87/02/02  15:44:21  sob
# Added localflags option
# 
# Revision 1.11  86/12/15  13:27:39  sob
# Fixed useknownhosts bug
# 
# Revision 1.10  86/11/06  01:58:57  sob
# Altered DBM to UUDBM to avoid possible conflicts under 4.3 BSD
# Thanks to page at ulowell for the report
# 
# Revision 1.9  86/11/03  22:57:41  sob
# Spelling fix.
# Sheesh.
# 
# Revision 1.8  86/11/03  22:53:43  sob
# Fixes provided by lowell!page
# 
# Revision 1.5  86/10/21  15:35:10  sob
# Added RETURN mail definition
# 
# Revision 1.4  86/10/21  15:07:07  sob
# Changes to use the MANIFEST file effectively.
# 
# Revision 1.3  86/10/10  18:25:48  sob
# Modified uuconf.h here
# 
# Revision 1.2  86/10/07  15:13:49  sob
# Modifications for better use on SYSTEM V
# 
# Yes, you may rip this off to use in other distribution packages.
# Thanks, Larry Wall. I did! Stan Barber
#
n=''
c=''
libc=''
eunicefix=''
eunice=''
sysexits=''
cpp=''
useknownhost=''
knownhost=''
shsharp=''
spitshell=''
startsh=''
test=''
expr=''
sed=''
echo=''
cat=''
rm=''
mv=''
cp=''
tail=''
log=''
sorted=''
tr=''
mkdir=''
sort=''
uniq=''
grep=''
egrep=''
contains=''
lib=''
nametype=''
cc=''
iandd=''
ndirlib=''
libndir=''
usendir=''
ndirc=''
ndiro=''
debug=''
resolve=''
mailer=''
localmail=''
localflags=''
internet=''
returnmail=''
bindir=''
filexp=''
Log=''
Header=''
sitename=''
orgname=''
mailadmin=''
libdbm=''
mansrc=''
manext=''
maildir=''
spool=''
active=''
myactive=''
mininact=''
pref=''
defeditor=''
rootid=''
mboxchar=''
locpref=''
orgpref=''
citypref=''
statepref=''
cntrypref=''
contpref=''
strchr=''
novoid=''
novfork=''
portable=''
passnam=''
berknam=''
usgnam=''
whoami=''
termio=''
fcntl=''
ioctl=''
database=''
logfile=''
noalias=''
aliases=''
havetlib=''
getpwent=''
gethostname=''
douname=''
phostname=''
hostcmd=''
norelay=''
CONFIG=''

echo "Beginning of configuration questions for uumail kit."
: Eunice requires " " instead of "", can you believe it
echo " "

: sanity checks
PATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc'
export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh $0; kill $$)

if test ! -t 0; then
    echo "Say 'sh Configure', not 'sh <Configure'"
    exit 1
fi

: some greps do not return status, grrr.
echo "grimblepritz" >grimble
if grep blurfldyick grimble >/dev/null 2>&1 ; then
    contains=contains
else
    if grep grimblepritz grimble >/dev/null 2>&1 ; then
	contains=grep
    else
	contains=contains
    fi
fi
rm grimble
: the following should work in any shell
case $contains in
contains*)
    echo " "
    echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
    cat >contains <<'EOSS'
grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
EOSS
chmod 755 contains
esac

: first determine how to suppress newline on echo command
echo "Checking echo to see how to suppress newlines..."
(echo "hi there\c" ; echo " ") >.echotmp
if $contains c .echotmp >/dev/null 2>&1 ; then
    echo "...using -n."
    n='-n'
    c=''
else
    echo "...using \\\c."
    n=''
    c='\c'
fi
echo $n "Type carriage return to continue.  Your cursor should be here-->$c"
read ans
rm .echotmp

: now set up to do reads with possible shell escape
: if this does not work on your machine, 1,$s/. myread/read ans/
cat <<EOSC >myread
ans='!'
while expr "X\$ans" : "X!" >/dev/null; do
    read ans
    case "\$ans" in
    !)
	sh
	echo " "
	echo $n "Your answer: $c"
	;;
    !*)
	set \`expr "X\$ans" : "X!\(.*\)\$"\`
	sh -c "\$*"
	echo " "
	echo $n "Your answer: $c"
	;;
    esac
done
EOSC
: general instructions
cat <<'EOH'
 
This installation shell script will examine your system and ask you questions
to determine how uumail and its auxiliary files should be installed.  If you
get stuck on a question, you may use a ! shell escape to start a subshell or
execute a command.  Many of the questions will have default answers in
square brackets--typing carriage return will give you the default.

On some of the questions which ask for file or directory names you are
allowed to use the ~name construct to specify the login directory belonging
to "name", even if you don't have a shell which knows about that.  Questions
where this is allowed will be marked "(~name ok)".

Much effort has been expended to ensure that this shell script will run
on any Unix system.  If despite that it blows up on you, your best bet is
to edit Configure and run it again.  (Trying to install uumail without having
run Configure is well nigh impossible.)  Also, let me (sob at rice.edu) know
how I blew it.

This installation script affects things in two ways: 1) it does direct
variable substitutions on some of the files included in this kit, and
2) it builds a uuconf.h file for inclusion in C programs.  You may edit
any of these files as the need arises after running this script.

EOH
echo $n "[Type carriage return to continue] $c"
. myread

: get old answers, if there is a config file out there
if test -f config.sh; then
    echo " "
    echo "(Fetching default answers from your old config.sh file...)"
    . config.sh
fi

: get list of predefined functions in a handy place
echo " "
if test -f /lib/libc.a; then
    echo "Your C library is in /lib/libc.a.  You're normal."
    libc=/lib/libc.a
else
    if test -f /usr/lib/libc.a; then
	echo "Your C library is in /usr/lib/libc.a, of all places."
	libc=/usr/lib/libc.a
    else
	if test -f "$libc"; then
	    echo "Your C library is in $libc, like you said before."
	else
	    cat <<'EOM'
 
I can't seem to find your C library.  I've looked for /lib/libc.a and
/usr/lib/libc.a, but neither of those are there.  What is the full name
EOM
	    echo $n "of your C library? $c"
	    . myread
	    libc="$ans"
	fi
    fi
fi
echo " "
echo $n "Extracting names from $libc for later perusal...$c"
if ar t $libc > libc.list; then
    echo "done"
else
    echo " "
    echo "The archiver doesn't think $libc is a reasonable library."
    exit 1
fi

: make some quick guesses about what we are up against
echo " "
echo $n "Hmm...  $c"
if $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then
    echo "Looks kind of like a BSD system, but we'll see..."
    echo exit 0 >bsd
    echo exit 1 >usg
    echo exit 1 >v7
else
    if $contains fcntl.o libc.list >/dev/null 2>&1 ; then
	echo "Looks kind of like a USG system, but we'll see..."
	echo exit 1 >bsd
	echo exit 0 >usg
	echo exit 1 >v7
    else
	echo "Looks kind of like a version 7 system, but we'll see..."
	echo exit 1 >bsd
	echo exit 1 >usg
	echo exit 0 >v7
    fi
fi
if $contains vmssystem.o libc.list >/dev/null 2>&1 ; then
    cat <<'EOI'
There is, however, a strange, musty smell in the air that reminds me of
something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
EOI
    echo "exit 0" >eunice
    eunicefix=unixtovms
    eunice=define
: it so happens the Eunice I know will not run shell scripts in Unix format
else
    echo " "
    echo "Congratulations.  You aren't running Eunice."
    eunicefix=':'
    eunice=undef
    echo "exit 1" >eunice
fi
chmod 755 bsd usg v7 eunice
$eunicefix bsd usg v7 eunice

: see how we invoke the C preprocessor
echo " "
echo "Checking to see how your C preprocessor is invoked..."
cat <<'EOT' >testcpp.c
#define ABC abc
#define XYZ xyz
ABC+XYZ
EOT
echo 'Maybe "cc -E" will work...'
cc -E testcpp.c >testcpp.out 2>&1
if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
    echo "Yup, it does."
    cpp='cc -E'
else
    echo 'Nope...maybe "cc -P" will work...'
    cc -P testcpp.c >testcpp.out 2>&1
    if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
	echo "Yup, that does."
	cpp='cc -P'
    else
	echo 'Nixed again...maybe "/lib/cpp" will work...'
	/lib/cpp testcpp.c >testcpp.out 2>&1
	if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
	    echo "Hooray, it works!  I was beginning to wonder."
	    cpp='/lib/cpp'
	else
	    echo 'Hmm...maybe you already told me...'
	    case "$cpp" in
	    '') ;;
	    *) $cpp testcpp.c >testcpp.out 2>&1;;
	    esac
	    if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
		echo "Hooray, you did!  I was beginning to wonder."
	    else
		echo "Nope. I can't find a C preprocessor.  Name one: $c"
		. myread
		cpp="$ans"
		$cpp testcpp.c >testcpp.out 2>&1
		if $contains 'abc+xyz' testcpp.out >/dev/null 2>&1 ; then
		    echo "OK, that will do."
		else
		    echo "Sorry, I can't get that to work.  Go find one."
		    exit 1
		fi
	    fi
	fi
    fi
fi
rm -f testcpp.c testcpp.out

: check for pdp11
echo " "
if usg; then
    : pdp11 is already defined
else
    cat <<'EOT' >pdp11.c
#ifdef pdp11
exit 0
#else
exit 1
#endif
EOT
    $cpp pdp11.c | grep exit >pdp11
    chmod 755 pdp11
    $eunicefix pdp11
    rm pdp11.c
fi
if pdp11; then
    echo "This looks like a pdp11 to me."
else
    echo "This doesn't look like a pdp11 to me."
fi

: see if sh knows # comments
echo " "
echo "Checking your sh to see if it knows about # comments..."
if sh -c '#' >/dev/null 2>&1 ; then
    echo "Your sh handles # comments correctly."
    shsharp=true
    spitshell=cat
    echo " "
    echo "Okay, let's see if #! works on this system..."
    echo "#!/bin/echo hi" > try
    $eunicefix try
    chmod 755 try
    try > today
    if test -s today; then
	echo "It does."
	sharpbang='#!'
    else
	echo "#! /bin/echo hi" > try
	$eunicefix try
	chmod 755 try
	try > today
	if test -s today; then
	    echo "It does."
	    sharpbang='#! '
	else
	    echo "It doesn't."
	    sharpbang=': use '
	fi
    fi
else
    echo "Your sh doesn't grok # comments--I will strip them later on."
    shsharp=false
    echo "exec grep -v '^#'" >spitshell
    chmod 755 spitshell
    $eunicefix spitshell
    spitshell=`pwd`/spitshell
    echo "I presume that if # doesn't work, #! won't work either!"
    sharpbang=': use '
fi

: figure out how to guarantee sh startup
echo " "
echo "Checking out how to guarantee sh startup..."
startsh=$sharpbang'/bin/sh'
echo "Let's see if '$startsh' works..."
cat >try <<EOSS
$startsh
set abc
test "$?abc" != 1
EOSS

chmod 755 try
$eunicefix try
if try; then
    echo "Yup, it does."
else
    echo "Nope.  You may have to fix up the shell scripts to make sure sh runs them."
fi
rm -f try today

: find out where common programs are
echo " "
echo "Locating common programs..."
pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib"
cat <<EOSC >loc
$startsh
thing=\$1
shift
dflt=\$1
shift
for dir in \$*; do
    case "\$thing" in
    .)
	if test -d \$dir/\$thing; then
	    echo \$dir
	    exit 0
	fi
	;;
    *)
	if test -f \$dir/\$thing; then
	    echo \$dir/\$thing
	    exit 0
	fi
	;;
    esac
done
echo \$dflt
exit 1
EOSC
chmod 755 loc
$eunicefix loc
loclist="expr sed echo cat rm mv cp tail tr mkdir sort uniq grep"
trylist="test egrep"
for file in $loclist; do
    xxx=`loc $file $file $pth`
    eval $file=$xxx
    case "$xxx" in
    /*)
	echo $file is in $xxx.
	;;
    *)
	echo "I don't know where $file is.  I hope it's in everyone's PATH."
	;;
    esac
done
echo " "
echo "Don't worry if any of the following aren't found..."
for file in $trylist; do
    xxx=`loc $file $file $pth`
    eval $file=$xxx
    case "$xxx" in
    /*)
	echo $file is in $xxx.
	;;
    *)
	echo "I don't see $file out there, offhand."
	;;
    esac
done
case $egrep in
egrep)
    echo "Substituting grep for egrep."
    egrep=$grep
    ;;
esac
case $test in
test)
    echo "Hopefully test is built into your sh."
    ;;
/bin/test)
    echo " "
    echo $n 'Is your "test" built into sh? [n] (OK to guess) '"$c"
    . myread
    case $ans in
    y*) test=test ;;
    esac
    ;;
*)
    test=test
    ;;
esac
case $echo in
echo)
    echo "Hopefully echo is built into your sh."
    ;;
/bin/echo)
    echo " "
    echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
    $echo $n "hi there$c" >foo1
    echo $n "hi there$c" >foo2
    if cmp foo1 foo2 >/dev/null 2>&1; then
	echo "They are compatible.  In fact, they may be identical."
    else
	echo "They are not compatible--the echo builtin will be used."
	echo=echo
    fi
    $rm -f foo1 foo2
    ;;
*)
    echo=echo
    ;;
esac

: decide how portable to be
case "$portable" in
define) dflt=y;;
*)	dflt=n;;
esac
$cat <<'EOH'
 
I can set things up so that your shell scripts and binaries are more portable,
at what may be a noticable cost in performance.  In particular, if you
ask to be portable, the following happens:

     1) ~username interpretations will be done at run time rather than
	by Configure.
     2) the system name will be determined at run time, if at all possible.

EOH
$echo $n "Do you expect to run these scripts and binaries on multiple machines? [$dflt] $c"
. myread
case $ans in
'') ans=$dflt;;
esac
case $ans in
    y*) portable=define
	for file in $loclist; do
	    eval $file=$file
	done
	;;
    *)  portable=undef ;;
esac

: set up shell script to do ~ expansion
cat >filexp <<EOSS
$startsh
: expand filename
case \$1 in
~/*|~)
    $echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
    ;;
~*)
    if $test -f /bin/csh; then
	/bin/csh -f -c "glob \$1"
	$echo ""
    else
	name=\`$expr x\$1 : '..\([^/]*\)'\`
	dir=\`$sed </etc/passwd -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}'\`
	if $test ! -d "\$dir"; then
	    me=\`basename \$0\`
	    $echo "\$me: can't locate home directory for: \$name" >&2
	    exit 1
	fi
	case \$1 in
	*/*)
	    $echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
	    ;;
	*)
	    $echo \$dir
	    ;;
	esac
    fi
    ;;
*)
    $echo \$1
    ;;
esac
EOSS
chmod 755 filexp
$eunicefix filexp

: now get the site name
$echo " "
$echo "Figuring out site name..."
$echo 'Maybe "hostname" will work...'
if ans=`sh -c hostname 2>&1` ; then
    sitename=$ans
    hostcmd=hostname
else
    $echo 'No, maybe "uuname -l" will work...'
    if ans=`sh -c 'uuname -l' 2>&1` ; then
	sitename=$ans
	hostcmd='uuname -l'
    else
	$echo 'Strange.  Maybe "uname -n" will work...'
	if ans=`sh -c 'uname -n' 2>&1` ; then
	    sitename=$ans
	    hostcmd='uname -n'
	else
	    $echo 'Oh well, maybe I can mine it out of whoami.h...'
	    if ans=`sh -c $contains' sysname /usr/include/whoami.h' 2>&1` ; then
		sitename=`$echo "$ans" | $sed 's/^.*"\(.*\)"/\1/'`
		hostcmd="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' </usr/include/whoami.h"
	    else
		case "$sitename" in
		'') $echo "Does this machine have an identity crisis or something?"
		    hostcmd=''
		    ;;
		*)  $echo "Well, you said $sitename before...";;
		esac
	    fi
	fi
    fi
fi
: you do not want to know about this
set $sitename
sitename=$1

: translate upper to lower if necessary
case $sitename in
    *[A-Z]*)
	sitename=`$echo $sitename | tr '[A-Z]' '[a-z]'`
	$echo "(Normalizing case in your site name)"
	;;
esac

: verify guess
if $test "$sitename" ; then
    $echo 'Your site name appears to be "'$sitename'".'
    $echo $n "Is this correct? [y] $c"
    . myread
    case $ans in
      y*|'')  ;;
      *)      sitename='' ;;
    esac
fi

: bad guess or no guess
while $test "X$sitename" = X ; do
    $echo $n "Please type the (one word) name of your site: $c"
    . myread
    sitename="$ans"
    case $hostcmd in
    sed*)
	$echo "(That doesn't agree with your whoami.h file, by the way.)"
	;;
    *)
	$echo "(That doesn't agree with your $hostcmd command, by the way.)"
	;;
    esac
    hostcmd=''
done
: figure out knownhost
case "$knownhost" in
'')
    dflt=none
    ;;
*)  dflt=$knownhost ;;
esac

knownhost=''

: get uucp neighbors
$echo " "
$echo $n "Getting a list of uucp neighbors... $c"
if uuname >uucp.local; then
	$echo "done"
else
	$echo " "
	$echo "I cannot seem to find a list of your uucp neighbors!"
	exit 1
fi

testd=''
useknownhost=''
while $test "X$useknownhost" = X; do
cat <<'EOUUCP'
There may be some mail that your site cannot route. Uumail will send
the mail to a neighbor for routing. Please enter the name of a 
EOUUCP
$echo $n "uucp neighbor to which unresolved mail may be routed: [$dflt] $c"
. myread
case "$ans" in
'') ans=$dflt;;
esac
if $test "$ans" = 'none'; then
    $echo "OK, you'll have to manually handle unknown routes yourself."
    useknownhost=undef
    knownhost=''
else
    if $contains "$ans" uucp.local >/dev/null 2>&1; then
	$echo "OK, $ans will be used when $sitename cannot find a route"
	useknownhost=define
	knownhost="$ans"
    else
	$echo "$ans does not appear to be a uucp neighbor... try again"
    fi
fi
done

: figure out uucp library location
case "$lib" in
'')
    dflt=/usr/lib/uucp
    ;;
*)  dflt=$lib ;;
esac
libexp=$lib
libexp='blurfl/dyick'
while $test ! -d "$libexp"; do
    $echo " "
    case "$libexp" in
    blurfl*) ;;
    *) $echo "Directory $libexp not found";;
    esac
    $echo $n "Where is your uucp library (~name okay)? [$dflt] $c"
    . myread
    case "$ans" in
    '') ans="$dflt";;
    esac
    lib="$ans"
    case $database in
    ~*)
	libexp=`filexp $lib`
	$echo "(That is $libexp on this particular system.)"
	case $portable in
	  undef) lib=$libexp ;;
	esac
	;;
    *)
	libexp=$lib
	;;
    esac
done
: are we going to keep a log
case "$log" in
define) dflt=y;;
*)	dflt=n;;
esac

$echo $n "Do you want to maintain a log of uumail transactions? [$dflt] $c"
. myread
case "$ans" in
	'') ans=$dflt;;
esac
case $ans in
	y*)log=define;;
	*)log=undef;;
esac

if $test "X$log" = Xdefine ; then
: figure out logfile location
case "$logfile" in
'')
    dflt=/usr/adm/uumail.log
    ;;
*)  dflt=$logfile ;;
esac
libexp=$logfile
libexp='blurfl/dyick'
while $test ! -f "$libexp"; do
    $echo " "
    case "$libexp" in
    blurfl*) ;;
    *) $echo "File $libexp not found";;
    esac
    $echo $n "Where is your uumail log file (~name okay)? [$dflt] $c"
    . myread
    case "$ans" in
    '') ans="$dflt";;
    esac
    logfile="$ans"
    case $logfile in
    ~*)
	libexp=`filexp $logfile`
	$echo "(That is $libexp on this particular system.)"
	case $portable in
	  undef) logfile=$libexp ;;
	esac
	;;
    *)
	libexp=$logfile
	;;
    esac
done
fi
$echo "Determining the format of the routing database..."
$echo $n "Looking for dbm library... $c"
: see if there are database libraries
if $test -r /usr/lib/libdbm.a || $test -r /usr/local/lib/libdbm.a ; then
    $echo "found."
    if $test -r /usr/lib/libdbm.a; then
	libdbm='-ldbm'
    else
	libdbm="/usr/local/lib/libdbm.a"
    fi
    usedbm=define
else
    $echo " "
    libdbm=''
    usedbm=undef
    if $contains dbminit.o libc.list >/dev/null 2>&1 ; then
	$echo "No dbm library found, but you have dbminit() so we'll use that."
	usedbm=define
    else
	$echo "No dbm library found -- assuming database in text format"
	usedbm=undef
    fi
fi

: figure out database location
case "$database" in
'')
    dflt=$lib/paths
    ;;
*)  dflt=$database ;;
esac
if $test "X$usedbm" = Xdefine ;then
	database="$database.pag"
fi

libexp='blurfl/dyick'
while $test ! -f "$libexp"; do
    $echo " "
    case "$libexp" in
    blurfl*) ;;
    *) $echo "File $libexp not found";;
    esac
    $echo $n "Where is your uucp map database (~name okay)? [$dflt] $c"
    . myread
    case "$ans" in
    '') ans="$dflt";;
    esac
    database="$ans"
    case $database in
    ~*)
	libexp=`filexp $database`
	$echo "(That is $libexp on this particular system.)"
	case $portable in
	  undef) database=$libexp ;;
	esac
	;;
    *)
	libexp=$database
	;;
    esac
done

testd=`$echo "$database" | $sed 's/.pag\$//'`

: we assume the pathalias database is there already
if $test ! -f "$testd.pag" ; then
	libdbm=''
	usedbm=undef
	$echo "Database $database not in dbm format."
	: is the database sorted?
	case "$sorted" in
	define) dflt=y;;
	*)	dflt=n;;
	esac

	$echo $n "Is database $database sorted? [$dflt] $c"
	. myread
	case "$ans" in
		'') ans=$dflt;;
	esac
	case "$ans" in
		y*)sorted=define;;
		*)sorted=undef;;
	esac
else
	database="$testd"
fi

: ensure 'sorted' has a value
case "$sorted" in
	'') sorted=undef
esac

: are we going to use aliasing and forwarding
case "$noalias" in
define) dflt=n;;
*)	dflt=y;;
esac

$echo $n "Do you want to use uumail to alias and forward mail? [$dflt] $c"
. myread
case "$ans" in
	'') ans=$dflt;;
esac
case $ans in
	n*)noalias=define;;
	*)noalias=undef;;
esac
if $test "X$noalias" = Xundef ; then
: figure out aliases location
case "$aliases" in
'')
    dflt=$lib/Aliases
    ;;
*)  dflt=$aliases
    ;;
esac
: libexp=$aliases
libexp='blurfl/dyick'
while $test ! -f "$libexp"; do
    $echo " "
    case "$libexp" in
    blurfl*) ;;
    *) $echo "File $libexp not found";;
    esac
    $echo $n "Where is your aliases file (~name okay)? [$dflt] $c"
    . myread
    case "$ans" in
    '') ans="$dflt";;
    esac
    aliases="$ans"
    case $aliases in
    ~*)
	libexp=`filexp $aliases`
	$echo "(That is $libexp on this particular system.)"
	case $portable in
	  undef) aliases=$libexp ;;
	esac
	;;
    *)
	libexp=$aliases
	;;
    esac
done
fi
: Shall we compile in the debugging information
case "$debug" in
	define) dflt=y;;
	*)	dflt=n;;
esac

$echo $n "Want the debugging information compiled in? [$dflt] $c"
. myread
case "$ans" in
	'') ans=$dflt;;
esac
case $ans in
	y*)debug=define;;
	*)debug=undef;;
esac

: figure out local delivery program
case "$localmail" in
'')
    dflt=/bin/mail
    ;;
*)  dflt="$localmail"
    ;;
esac
: libexp="$localmail"
libexp='blurfl/dyick'
while $test ! -f "$libexp"; do
    $echo " "
    case "$libexp" in
    blurfl*) ;;
    *) $echo "File $libexp not found";;
    esac
    $echo $n "What is the name of the local mail delivery program (~name okay)? [$dflt] $c"
    . myread
    case "$ans" in
    '') ans="$dflt";;
    esac
    localmail="$ans"
    case $localmail in
    ~*)
	libexp=`filexp $localmail`
	$echo "(That is $libexp on this particular system.)"
	case $portable in
	  undef) localmail="$libexp" ;;
	esac
	;;
    *)
	libexp="$localmail"
	;;
    esac
done

: Do we need any special flags when calling the localmailer
case "$localflags" in
	'') dflt=none;;
	*) dflt=$localflags;;
esac

$echo $n "Please enter any special flags needed when calling $localmail: [$dflt] $c"
. myread
case "$ans" in
	'') ans='';;
esac
case $ans in
	-*)localflags=$ans;;
	*)localflags='';;
esac




: determine where manual pages go
case "$mansrc" in
'')
    dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
    ;;
*)  dflt="$mansrc"
    ;;
esac
mansrc='blurfl/dyick'
while $test ! -d "$mansrc" ; do
    case $mansrc in
      blurfl*) ;;
      *) $echo "$mansrc does not appear to exist." ;;
    esac
    $echo " "
    $echo $n "Where do the manual pages (source) go? [$dflt] $c"
    . myread
    mansrc=`filexp "$ans"`
    case $mansrc in
      '') mansrc=$dflt ;;
    esac
done
case "$mansrc" in
*l)
    manext=l
    ;;
*n)
    manext=n
    ;;
*)
    manext=1
    ;;
esac

: determine where mail is spooled
case "$maildir" in
'')
    dflt=`loc . /usr/spool/mail /usr/spool/mail /usr/mail`
    ;;
*)  dflt="$maildir"
    ;;
esac
maildir='blurfl/dyick'
while $test ! -d "$maildir" ; do
    case $maildir in
      blurfl*) ;;
      *) $echo "$maildir does not appear to exist." ;;
    esac
    $echo " "
    $echo $n "Where is yet-to-be-read mail spooled? [$dflt] $c"
    . myread
    maildir=`filexp "$ans"`
    case $maildir in
      '') maildir=$dflt ;;
    esac
done

: find out how to find out full name
$echo " "
case "$berkname" in
define)
    dflt=y;;
undef)
    dflt=n;;
*)
    if bsd; then
	dflt=y
    else
	dflt=n
    fi
    ;;
esac
$echo "Does your /etc/passwd file keep full names in Berkeley/V7 format (name first"
$echo $n "thing after ':' in GCOS field)? [$dflt] $c"
. myread
case $ans in
  '') ans=$dflt ;;
esac
case $ans in
  y*)
    passnam=define
    berknam=define
    usgnam=undef
    nametype=bsd
    ;;
  *)
    $echo " "
    case "$usgname" in
    define)
	dflt=y;;
    undef)
	dflt=n;;
    *)
	if usg; then
	    dflt=y
	else
	    dflt=n
	fi
	;;
    esac
    $echo "Does your passwd file keep full names in USG format (name sandwiched"
    $echo $n "between a '-' and a '(')? [$dflt] $c"
    . myread
    case $ans in
      '') ans=$dflt ;;
    esac
    case $ans in
      n*)
	$echo "Full name will be taken from ~/.fullname"
	passnam=undef
	berknam=undef
	usgnam=undef
	nametype=other
	;;
      *)
	passnam=define
	berknam=undef
	usgnam=define
	nametype=usg
	;;
    esac
    ;;
esac

: figure out mailer daemons name
case "$mailadmin" in
'')
    dflt=MAILER-DAEMON
    ;;
*)  dflt="$mailadmin"
	;;
esac
$echo $n "What is the name of the mail subsystem? [$dflt] $c"
. myread
case "$ans" in
    '') ans="$dflt"
	;;
esac
mailadmin="$ans"


: see if we need a special compiler
$echo " "
if usg; then
    case "$cc" in
    '')
	case "$Mcc" in
	/*) dflt='Mcc'
	    ;;
	*)
	    if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
		dflt='cc -M'
	    else
		dflt='cc'
	    fi
	    ;;
	esac
	;;
    *)  dflt="$cc";;
    esac
    $cat <<'EOM'
 
On some systems the default C compiler will not resolve multiple global
references that happen to have the same name.  On some such systems the
"Mcc" command may be used to force these to be resolved.  On other systems
a "cc -M" command is required.  What command will force resolution on
EOM
    $echo $n "this system? [$dflt] $c"
    . myread
    cc="$ans"
    case "$cc" in
	'') cc="$dflt" ;;
    esac
else
    $echo "Not a USG system--assuming cc can resolve multiple definitions."
    cc=cc
fi

: see if we should throw a -i into the Makefile
$echo " "
if pdp11; then
    if $contains '\-i' $mansrc/cc.1 >/dev/null 2>&1 ; then
	$echo $n "Your system appears to have separate I and D space.  Is this true? [y] $c"
	. myread
	case $ans in
	    n*|f*) iandd='' ;;
	    *)     iandd='-i' ;;
	esac
    else
	$echo "Your system appears to NOT have separate I and D space."
	$echo $n "Is this correct? [y] $c"
	. myread
	case $ans in
	    n*|f*) iandd='-i' ;;
	    *)     iandd='' ;;
	esac
    fi
else
    $echo "Not a pdp11--assuming no separate I and D."
fi

: index or strcpy
$echo " "
if $contains index.o libc.list >/dev/null 2>&1 ; then
    $echo "Your system appears to use index() and rindex() rather than strchr()"
    $echo $n "and strrchr().  Is this correct? [y] $c"
    . myread
    case $ans in
	n*|f*) strchr='define' ;;
	*)     strchr='undef' ;;
    esac
else
    $echo "Your system appears to use strchr() and strrchr() rather than index()"
    $echo $n "and rindex().  Is this correct? [y] $c"
    . myread
    case $ans in
	n*|f*) strchr=undef ;;
	*)     strchr=define ;;
    esac
fi

: see if there is a whoami file
if $test -r /usr/include/whoami.h ; then
    whoami=define
    $echo "whoami.h found."
else
    whoami=undef
fi

: see if this is a termio system
if $test -r /usr/include/fcntl.h ; then
    fcntl=define
    $echo "fcntl.h found."
else
    fcntl=undef
    $echo "No fcntl.h found, but that's ok."
fi

: see if ioctl defs are in sgtty/termio or sys/ioctl
if $test -r /usr/include/sys/ioctl.h ; then
    ioctl=define
    $echo "sys/ioctl.h found."
else
    ioctl=undef
    $echo "sys/ioctl.h not found, assuming ioctl args are defined in sgtty.h."
fi

: see if sysexits.h is out there
if $test -r /usr/include/sysexits.h; then
    sysexits=define
    $echo "sysexits.h found."
else
    sysexits=undef
    $echo "sysexits not found, added needed flags to uuconf.h"
fi

: see if there is a vfork
if $contains vfork.o libc.list >/dev/null 2>&1 ; then
    $echo "vfork() found."
    novfork='undef'
else
    $echo "No vfork() found--will use fork() instead."
    novfork='define'
fi

: see if there is a getpw
if $contains getpw.o libc.list >/dev/null 2>&1 ; then
    $echo "getpw() found."
    getpwent='undef'
else
    $echo "No getpw() found--will use getpwent() instead."
    getpwent='define'
fi

: see how we will look up site name
douname=undef
gethostname=undef
phostname=undef
if $contains gethostname.o libc.list >/dev/null 2>&1 ; then
    $echo "gethostname() found."
    gethostname=define
else
    if $contains uname.o libc.list >/dev/null 2>&1 ; then
	$echo "uname() found."
	douname=define
    else
	case $hostcmd in
	  '') ;;
	  *)
	    $cat <<EOT
 
There is no gethostname() or uname() on this system.  You have two
possibilites at this point:

1)  You can have your site name ($sitename) compiled into uumail, which lets rn
    start up faster, but makes your binaries non-portable, or
2)  you can have uumail use a
	
	popen("$hostcmd","r")

    which will start slower but be more portable.

Option 1 will use whoami.h if you have one.  If you want option 2 but with
a different command, you can edit uuconf.h after this shell script is done.

EOT
	    case "$phostname" in
	    define) dflt=n;;
	    undef)  dflt=y;;
	    '')
		case $portable in
		define) dflt=n ;;
		*)      dflt=y ;;
		esac
		;;
	    esac
	    $echo $n "Do you want your site name compiled in? [$dflt] $c"
	    . myread
	    case $ans in
	    '') ans=$dflt;;
	    esac
	    case $ans in
	      n*) phostname=define ;;
	      *)  hostcmd='' phostname=undef;;
	    esac
	    ;;
	esac
	case $hostcmd in
	  '')
	    case $whoami in
	      define)
		$echo 'No hostname function--using whoami.h.'
		;;
	      undef)
		$echo 'No hostname function--hardwiring "'$sitename'".'
		;;
	    esac
	    ;;
	esac
    fi
fi

: see if there are directory access routines out there
if $test -r /usr/lib/libndir.a || $test -r /usr/local/lib/libndir.a ; then
    $echo "Ndir library found."
    if $test -r /usr/lib/libndir.a; then
	ndirlib='-lndir'
    else
	ndirlib="/usr/local/lib/libndir.a"
    fi
    libndir=define
    usendir=undef
    ndirc=''
    ndiro=''
else
    ndirlib=''
    libndir=undef
    if $contains readdir.o libc.list >/dev/null 2>&1 ; then
	$echo "No ndir library found, but you have readdir() so we'll use that."
	usendir=undef
	ndirc=''
	ndiro=''
    else
	$echo "No ndir library found and no readdir() found--using ./ndir.c."
	usendir=define
	ndirc='ndir.c'
	ndiro='ndir.o'
    fi
fi
: check for void type
$echo " "
$echo "Checking to see if your C compiler groks the void type..."
$cat >try.c <<'EOCP'
void main();
EOCP
if cc -c try.c >/dev/null 2>&1 ; then
    novoid='undef'
    $echo "Yup, it does."
else
    novoid='define'
    $echo "Nope, it doesn't (boo hiss).  I will substitute int."
fi
$rm try.*

: determine mailer for uumail to use to return mail
$echo " "
if $test -f /usr/lib/sendmail; then
    mailer=/usr/lib/sendmail
    resolve=undef
    returnmail=undef
else
    if usg && $test -f $libexp/recmail; then
	mailer=$libexp/recmail
    else
	mailer=$lib/uumail
    fi
    resolve=define
    returnmail=define
fi
$echo "Mail sender is $mailer"

: check for internet mailer
case "$internet" in
define) dflt=y;;
undef)	dflt=n;;
*)	dflt=n;;
esac
cat <<EOM
 
Some newer mailers can deliver mail to addresses of the INTERNET persuasion,
such as user at host.UUCP.  Other older mailers require the complete path
to the destination to be specified in the address.  Does your mailer
EOM
$echo $n "(`basename $mailer`) understand INTERNET addresses? [$dflt] $c"
. myread
case "$ans" in
'') ans=$dflt;;
esac
case "$ans" in
y*) internet=define;;
*)  internet=undef;;
esac


if $test X$internet = Xdefine && $test `basename $mailer` = uumail
then 
resolve=define
else
: shall uumail resolve addreses or just supply routes
case "$resolve" in
	define) dflt=y;;
	*)	dflt=n;;
esac

cat <<'EOUUMAIL'

Uumail is capable of resolving addresses in domain form (user at site.domain)
however, some people who use sendmail prefer to use uumail just to provide
uucp paths.
EOUUMAIL
$echo $n "Shall uumail resolve addresses? [$dflt] $c"
. myread
case "$ans" in
	'') ans=$dflt;;
esac
case $ans in
	y*)resolve=define;;
	*)resolve=undef;;
esac
fi

: determine where public executables go
case "$bindir" in
'')
    dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
    ;;
*)  dflt="$bindir"
    ;;
esac
bindir='blurfl/dyick'
while $test ! -d "$bindir" ; do
    case $bindir in
      blurfl*) ;;
      *) $echo "$bindir does not appear to exist." ;;
    esac
    $echo " "
    $echo $n "Where do you want to put the public executables? [$dflt] $c"
    . myread
    bindir="$ans"
    bindir=`filexp $bindir`
    case $bindir in
      '') bindir=$dflt ;;
    esac
done


: determine root id
rootid=`$sed </etc/passwd -e "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" -e "q" -e "}" -e "d"`
case $rootid in
  '') rootid=0 ;;
  *)  $echo "Root uid = $rootid" ;;
esac

: weed out incompatibilities
case $douname in
  define) whoami=undef ;;
esac

: preserve RCS keywords in files with variable substitution, grrr
Log='$Log'
Header='$Header'

: Warnings
if v7; then
    cat <<'EOM'
 
NOTE: the V7 compiler may ignore some #undefs that uumail uses.  If so, you will
get messages about redefining EXT.  Some V7 compilers also have difficulties
with #defines near buffer boundaries, so beware.  You may have to play with
the spacing in common.h.
EOM
fi

if pdp11; then
    cat <<'EOM'
 

EOM
fi

$echo " "
$echo "End of configuration questions."
$echo " "

: create config.sh file
$echo " "
$echo "Creating config.sh..."
$spitshell <<EOT >config.sh
$startsh
# config.sh
# This file was produced by running the Configure script.

n='$n'
c='$c'
libc='$libc'
eunicefix='$eunicefix'
eunice='$eunice'
cpp='$cpp'
sysexits='$sysexits'
shsharp='$shsharp'
startsh='$startsh'
spitshell='$spitshell'
test='$test'
expr='$expr'
sed='$sed'
echo='$echo'
cat='$cat'
rm='$rm'
mv='$mv'
cp='$cp'
debug='$debug'
resolve='$resolve'
sorted='$sorted'
log='$log'
tail='$tail'
tr='$tr'
mkdir='$mkdir'
sort='$sort'
uniq='$uniq'
grep='$grep'
egrep='$egrep'
contains='$contains'
libdbm='$libdbm'
libexp='$libexp'
nametype='$nametype'
cc='$cc'
iandd='$iandd'
useknownhost='$useknownhost'
knownhost='$knownhost'
ndirlib='$ndirlib'
libndir='$libndir'
usendir='$usendir'
ndirc='$ndirc'
ndiro='$ndiro'
mailer='$mailer'
localmail='$localmail'
localflags='$localflags'
internet='$internet'
returnmail='$returnmail'
bindir='$bindir'
filexp='$filexp'
Log='$Log'
Header='$Header'
sitename='$sitename'
orgname='$orgname'
mailadmin='$mailadmin'
lib='$lib'
mansrc='$mansrc'
manext='$manext'
maildir='$maildir'
spool='$spool'
active='$active'
myactive='$myactive'
mininact='$mininact'
pref='$pref'
defeditor='$defeditor'
rootid='$rootid'
mboxchar='$mboxchar'
locpref='$locpref'
orgpref='$orgpref'
citypref='$citypref'
statepref='$statepref'
cntrypref='$cntrypref'
contpref='$contpref'
strchr='$strchr'
novoid='$novoid'
novfork='$novfork'
portable='$portable'
passnam='$passnam'
berknam='$berknam'
usgnam='$usgnam'
whoami='$whoami'
termio='$termio'
fcntl='$fcntl'
ioctl='$ioctl'
database='$database'
logfile='$logfile'
noalias='$noalias'
aliases='$aliases'
havetlib='$havetlib'
getpwent='$getpwent'
gethostname='$gethostname'
douname='$douname'
phostname='$phostname'
hostcmd='$hostcmd'
norelay='$norelay'
CONFIG=true
EOT

: create uuconf.h file
$echo " "
$echo "Creating uuconf.h..."
$cat <<EOT >uuconf.h
/***************************************************************************
This work in its current form is Copyright 1986 Stan Barber
with the exception of resolve, gethostname and the original getpath which
as far as I know are in the Public Domain. This software may be distributed
freely as long as no profit is made from such distribution and this notice
is reproducted in whole.
The Configuration script and idea are borrowed from Larry Wall. Thanks
Larry!
***************************************************************************
This software is provided on an "as is" basis with no guarantee of 
usefulness or correctness of operation for any purpose, intended or
otherwise. The author is in no way liable for this software's performance
or any damage it may cause to any data of any kind anywhere.
***************************************************************************/

#include <stdio.h>
#include <ctype.h>
#include <pwd.h>
#include <signal.h>

#$usedbm UUDBM
#$sysexits SYSEXITS		/* sysexits.h is available */

#define NAMESIZ 32 		/* system name size */
#define PATHSIZ 16*NAMESIZ 	/* path length */
#define MAXDOMS	16		/* maximum number of domain elements */
#define TRUE	1
#define FALSE	0
/*
 * sysexits is a file of exit codes that are used in sendmail
 * and other programs ...
 */
#ifdef SYSEXITS
#include <sysexits.h>
#endif
/* if you don't have sysexits.h here are the useful parts */
#ifndef EX_OK

# define EX_OK		0	/* successful termination */


# define EX_USAGE	64	/* command line usage error */
# define EX_DATAERR	65	/* data format error */
# define EX_NOINPUT	66	/* cannot open input */
# define EX_NOHOST	68	/* host name unknown */
# define EX_UNAVAILABLE	69	/* service unavailable */
# define EX_SOFTWARE	70	/* internal software error */
# define EX_OSERR	71	/* system error (e.g., can't fork) */
# define EX_OSFILE	72	/* critical OS file missing */
# define EX_CANTCREAT	73	/* can't create (user) output file */
# define EX_IOERR	74	/* input/output error */
# define EX_TEMPFAIL    75      /* temp failure; user should retry */
#endif

typedef char bool;

#ifndef TIMEOUT
#define TIMEOUT ((unsigned) 180)
#endif TIMEOUT

#ifndef SENTINEL
#define SENTINEL "@@@"
#endif SENTINEL

/* Does this solve the problem of null for dbm users?
 * problem reported by pluto!warren */
#ifndef NULL
#define NULL	((char *) 0)
#endif

/* uuconf.h
 * This file was produced by running the Configure script.
 * Feel free to modify any of this as the need arises.
 */

/* name of the site.  May be overridden by gethostname, uname, etc. */
#define SITENAME "$sitename"

/* login name of mail administrator, if any. */
#define MAILERDAEMON "$mailadmin"

/* uucp library */
#define LIB "$lib"

/* location of mailer */
#define MAILER "$mailer"

/* local mail delivery program */
#define LOCALMAIL "$localmail $localflags %s"

/* local mail directory */
#define MAILDIR	"$maildir"

/* root uid */
#define ROOTID $rootid

#ifndef UUDBM
#$sorted	SORTED		/* database is sorted */
#endif

#$resolve 	RESOLVE		/* resolve addresses */
#$debug		DEBUG		/* compile in debugging */
#$log		LOG		/* log transactions */
#$noalias	NOALIAS		/* do aliasing? */
#$returnmail	RETURNMAIL	/* shall uumail return failed mail? */

#ifdef LOG
#define LOGFILE 	"$logfile"
#endif

/* locations of database files */
#define DATABASE 	"$database"

#ifndef NOALIAS
#define ALIASFILE 	"$aliases"
#endif

#$strchr	index strchr	/* cultural */
#$strchr	rindex strrchr	/*  differences? */
#$novoid	void int	/* is void to be avoided? */
#$novfork	vfork fork	/* is vfork too virtual? */
#$eunice	EUNICE		/* no linking? */
#$eunice	VMS		/* not currently used, here just in case */
#$usendir	USENDIR		/* include ndir.c? */
#$libndir	LIBNDIR		/* include /usr/include/ndir.h? */
#$portable	PORTABLE	/* do we do extra lookups to start up? */
#$passnam	PASSNAMES	/* do names come from the passwd file? */
				/*  (undef to take name from ~/.fullname) */
#$berknam	BERKNAMES	/* if so, are they Berkeley format? */
				/* (that is, ":name,stuff:") */
#$usgnam	USGNAMES	/* or are they USG format? */
				/* (that is, ":stuff-name(stuff):") */
#$whoami	WHOAMI		/* should we include whoami.h? */
#$fcntl		FCNTL		/* should we include fcntl.h? */
#$ioctl		IOCTL		/* are ioctl args all defined in one place? */
#$getpwent	GETPWENT	/* need we include slow getpwent? */
#$internet	INTERNET	/* does our mailer do INTERNET addressing? */
#$gethostname	GETHOSTNAME	/* do we have a gethostname function? */
#$douname	DOUNAME		/* do we have a uname function? */
#$phostname	PHOSTNAME "$hostcmd"	/* how to get host name with popen */

#$useknownhost	KNOWNHOST "$knownhost" /* a smarter host to punt to */

#ifdef _DEFINE
#define EXTERN 
#else
#define EXTERN extern
#endif
/*
The following structure is used in the aliasing and forwarding 
feature that is based on the method used in MH.
My thanks to the MH folks for making this stuff possible. */

struct  mailname {
	struct mailname *m_next;
	char            *m_name;
	int              m_pipe;
} ;

/* some people claim that some C-compilers cannot handle enums... */
/* for the handle variable */
#define ALL	1	/* UUCP and DOMAIN addresses */
#define JUSTUUCP 2	/* UUCP only */
#define NONE	3	/* all mail is LOCAL */

/* for form determinations */
#define ERROR 1
#define LOCAL 2
#define DOMAIN 3
#define UUCP 4
#define ROUTE 5


EXTERN int handle;
EXTERN int exitstat;	/* for resolve */
EXTERN int Debug;
EXTERN char *paths;
EXTERN char *ConfFile;
EXTERN char *AliasFile;
EXTERN char Myname[NAMESIZ];
EXTERN char * from;
EXTERN char lbuf[512]; /* for pipe to uux */
EXTERN char *logfile;
EXTERN char	OpMode;		/* operation mode, see below */
/* These don't do anything yet.... maybe next time they will do something */
#define MD_DELIVER	'm'		/* be a mail sender */
#define MD_ARPAFTP	'a'		/* old-style arpanet protocols */
#define MD_SMTP		's'		/* run SMTP on standard input */
#define MD_DAEMON	'd'		/* run as a daemon */
#define MD_VERIFY	'v'		/* verify: don't collect or deliver */
#define MD_TEST		't'		/* test mode: resolve addrs only */
#define MD_INITALIAS	'i'		/* initialize alias database */
#define MD_PRINT	'p'		/* print the queue */
#define MD_FREEZE	'z'		/* freeze the configuration file */
EOT

CONFIG=true



$rm -f libc.list .distlist kit*isdone

$echo " "
$echo "Doing variable substitutions on various files..."
$echo " "
set `$grep <MANIFEST '\.SH' | awk '{print $1}'`
for file in $*; do
    . $file
done

$echo " "
$echo 'Now you need to generate make dependencies by running "makedepend".'
$echo 'You might prefer to run it in background: "makedepend > makedepend.out &"'
$echo $n "Would you like me to run it for you? [n] $c" 
. myread
case "$ans" in
y*) makedepend;;
esac
$rm -f  uucp.local myread loc filexp bsd pdp11 v7 usg eunice
: end of Configure
!STUFFY!FUNK!
echo Extracting README
cat >README <<'!STUFFY!FUNK!'
This is an updated version of uumail (and uupath) that can 
access a pathalias-generated database to facilitate routine mail.

These program can cope with DBM and standard line-oriented forms of 
pathalias-generated databases.

This version of uumail can be used as uupath by linking uumail to
uupath. Also, this version can handle domain addresses (user at host.domain).
You can put as many addresses on a line as you like.

This version provides an alias and forwarding facility. For details on 
aliasing see the file "Alias.Design". The forward facility is similiar to
the one in sendmail. A user may forward his mail by adding a file called
".forward" in his home directory. This file conatains the address(es) to which
mail is to be forwarded. These addresses are not reprocessed by the aliasing
subroutine, but may be in domain format (if RESOLVE is defined when you are
compiling).

There is also some experimental sections in this release that binary only
sites might like to experiment with. See the file "Binary.Only" for details on
this experiment.

There has been some confusion in the past on configuring uumail to work
with sendmail. See the file "Sendmail" for information on this.

 *    IF YOU ARE USING A DBM DATABASE, READ THIS!
 *    If the special sentinel value of @@@ is not present in the
 *    database, then getpath will assumed that the database is being
 *    rebuilt and will block for TIMEOUT (default = 180) seconds.  
 *    If, after 5 such blocks, the sentinel is not present,
 *    the error code EX_TEMPFAIL is returned.
 *    The same is true if the dbm files cannot be initialized.
 *    Please be sure to add the sentinal to the DBM database when
 *    it is created.
 *    To add the sentinel, use the "makedb" command.
 *    makedb -a dbrootname < @@@
 *    should append the sentinel to the database.
 *    makedb is part of the distribution of pathalias.

To configure uumail, type "sh Configure" and answer the questions
as best you can. You should be able to type "make" when it is 
done to build uumail.

Here are some manual alterations you may want to make by adding
these flags (in the form -Dflag) to the OPTIONS line in the Makefile.

NOGRADE should be used if your uux does not understand the -g flag.
NORETURN should be used if your uux does not understand the -a flag.

There are some other items that should be noted when configuring uumail.
In the makefile, set UUMAIL equal to the location of the uumail program
on your system FOLLOWING INSTALLATION! Set REALUUX equal to the location
of the uux program. This will be /usr/bin/uux on most systems. Binary
only site should check the "Binary.Only" file for more information on
the use of this symbol.

If you want to install this system, use "make install". If you want
to have it do all the work for incoming mail, type "make mailer". You
probably do not want to "make mailer" if you run sendmail.

A manual page for address, uumail and uupath are included.

IMPORTANT NOTE ABOUT THE PATHS DATABASE
The "palias" file supplied has routes to the known networks relative to
soma. To make this work for you, you can do one of two things:
1. Get a recent distribution of pathalias and make your own database.
OR
2. Edit the "palias" file to provide paths relative to your machine.
If you fail to do this, uumail will fail to find a usable path most
of the time.

RFC976 Compliance notes

Uumail is capable of satisfying Class 3 requirements as specified in
RFC976. It can also be compiled to satisfy Class 2 and Class 1 requirements
only. Here are the appropriate compile time flags for compliance with
with the three classes; these are only the flags necessary to make 
uumail perform in a particular class. Other flags may be needed to use
the dbm-type database and other options. It should be noted that each
higher numbered class is a superset of the lower numbered class,
so if you are a class 3 you will automatically comply with Classes 1
and 2. The following is excerpted from the RFC976 document.


   Class 1   old-style UUCP ! routing only.  We assume that the host
             understands local user names:

                  rmail user

             and bang paths

                  rmail host1!host2!user

             but we assume nothing more about the host.  If we have
             no information about a host, we can treat it as class 1
             with no problems, since we make no assumptions about
             how it will handle hybrid addresses.

COMPILE FLAGS NEED FOR THIS CLASS: none



   Class 2   Old style UUCP ! routing, and 4.2BSD style domain
             parsing.  We assume the capabilities of class 1, plus
             the ability to understand

                  rmail user at domain

             if the "domain" is one outside the UUCP zone which
             the host knows about.  Class 2 hosts do not necessarily
             understand domain!user or have routers.  Hosts in non-

             UUCP RFC-920 domains are considered class 2, even though
             they may not understand host!user.

COMPILE FLAGS NEED FOR THIS CLASS: RESOLVE

   Class 3   All class 1 and 2 features are present.  In addition,
             class 3 hosts must be able to route UUCP mail for hosts
             that are not immediately adjacent and also understand
             the syntax

                  rmail domain!user

             as described above.  All gateways into UUCP must be
             class 3.

COMPILE FLAGS NEED FOR THIS CLASS: RESOLVE

Please forward comments and bug fixes to me at sob at rice.edu or 
ihnp4!shell!soma!sob or cuae2!soma!sob or seismo!soma!sob.

Stan Barber
Baylor College of Medicine
Houston, Texas

P.S. My thanks to all those who reported bugs from the previous release.
Please continue to send them in, and I will try to keep fixing them.


***************************************************************************
This work in its current form is Copyright 1986 Stan Barber
with the exception of resolve, gethostname, and the original getpath which
as far as I know are in the Public Domain. This software may be distributed
freely as long as no profit is made from such distribution and this notice
is reproducted in whole.
***************************************************************************
This software is provided on an "as is" basis with no guarantee of 
usefulness or correctness of operation for any purpose, intended or
otherwise. The author is in no way liable for this software's performance
or any damage it may cause to any data of any kind anywhere.
***************************************************************************
My thanks to Larry Wall for allowing the use of his Configure idea in other
systems. My thanks to the MH folks for the aliasing idea.

!STUFFY!FUNK!
echo Extracting manifake
cat >manifake <<'!STUFFY!FUNK!'
#!/bin/sh
# $Header: manifake,v 4.3 85/05/01 11:42:41 lwall Exp $
#
# $Log:	manifake,v $
# Revision 4.3  85/05/01  11:42:41  lwall
# Baseline for release with 4.3bsd.
# 

: make MANIFEST and MANIFEST.new say the same thing
if test ! -f MANIFEST.new; then
    if test -f MANIFEST; then
	sed <MANIFEST >MANIFEST.new \
	    -e '1,/---/d' \
	    -e 's/\([ 	][ 	]*\)[0-9]*  */\1/'
    else
	echo "Make a MANIFEST.new file, with names and descriptions."
    fi
fi
!STUFFY!FUNK!
echo ""
echo "End of kit 1 (of 4)"
cat /dev/null >kit1isdone
config=true
for iskit in 1           	2           	3           	4           	; do
    if test -f kit${iskit}isdone; then
	echo "You have run kit ${iskit}."
    else
	echo "You still need to run kit ${iskit}."
	config=false
    fi
done
case $config in
    true)
	echo "You have run all your kits.  Please read README and then type Configure."
	chmod 755 Configure
	;;
esac
: I do not append .signature, but someone might mail this.
exit



More information about the Mod.sources mailing list