Subject: v22i062: ELM mail syste, release 2.3, Part03/26 Newsgroups: comp.sources.unix Approved: rsalz@uunet.UU.NET X-Checksum-Snefru: f71bd890 727969a2 d8cc63cd c5702676 Submitted-by: Syd Weinstein Posting-number: Volume 22, Issue 62 Archive-name: elm2.3/part03 ---- Cut Here and unpack ---- #!/bin/sh # this is part 3 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file Configure continued # CurArch=3 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 echo "x - Continuing file Configure" sed 's/^X//' << 'SHAR_EOF' >> Configure X fi Xelse X if $test -r /usr/include/termio.h ; then X d_termio="$define" X echo "termio.h found." X elif $test -r /usr/include/sgtty.h ; then X echo "sgtty.h found." X else X echo "Neither termio.h nor sgtty.h found--you could have problems." X fi Xfi X X: see if we should include time.h, sys/time.h, or both Xcat <<'EOM' X XTesting to see if we should include , or both. XI'm now running the test program... XEOM X$cat >try.c <<'EOCP' X#ifdef I_TIME X#include X#endif X#ifdef I_SYSTIME X#ifdef SYSTIMEKERNEL X#define KERNEL X#endif X#include X#endif Xmain() X{ X struct tm foo; X#ifdef S_TIMEVAL X struct timeval bar; X#endif X if (foo.tm_sec == foo.tm_sec) X exit(0); X#ifdef S_TIMEVAL X if (bar.tv_sec == bar.tv_sec) X exit(0); X#endif X exit(1); X} XEOCP Xflags='' Xfor s_timeval in '-DS_TIMEVAL' ''; do X for d_systimekernel in '' '-DSYSTIMEKERNEL'; do X for i_time in '' '-DI_TIME'; do X for i_systime in '-DI_SYSTIME' ''; do X case "$flags" in X '') echo Trying $i_time $i_systime $d_systimekernel $s_timeval X if $cc $ccflags $i_time $i_systime $d_systimekernel $s_timeval \ X try.c -o try >/dev/null 2>&1 ; then X set X $i_time $i_systime $d_systimekernel $s_timeval X shift X flags="$*" X echo Succeeded with $flags X fi X ;; X esac X done X done X done Xdone Xcase "$flags" in X*SYSTIMEKERNEL*) d_systimekernel="$define";; X*) d_systimekernel="$undef";; Xesac Xcase "$flags" in X*I_TIME*) i_time="$define";; X*) i_time="$undef";; Xesac Xcase "$flags" in X*I_SYSTIME*) i_systime="$define";; X*) i_systime="$undef";; Xesac X$rm -f try.c try X Xtimeincl="" Xif $test "$i_time" = define ; then X timeincl="/usr/include/time.h" Xfi Xif $test "$i_systime" = define ; then X timeincl="$timeincl /usr/include/sys/time.h" Xfi X$cat $timeincl /dev/null | $cppstdin $cppminus > try.c 2>&1 Xif $contains 'tz_minuteswest' try.c > /dev/null 2>&1 ; then X echo "You have tz_minuteswest defined in $timeincl rather than timezone." X d_tz_min="$define" Xelse X echo "You have timezone defined in $timeincl rather than tz_minuteswest." X d_tz_min="$undef" Xfi X$rm -f try.c X: check for valid reply/to fields Xcase "$d_useembed" in X"$define") dflt=y;; X"$undef") dflt=n;; X*) dflt=n;; Xesac X$cat <try.c <<'EOCP' X#include X#include X#include X#include X#define far /* to keep XENIX from complaining */ X#include X#include Xmain() X{ Xstruct utimbuf test; Xtest.actime = 0; Xexit(1); X} XEOCP X if $cc try.c -o try >/dev/null 2>&1 ; then X d_utimbuf="$undef" X echo "You have the 'utimbuf' structure..." X else X echo "I will use my 'utimbuf' structure..." X d_utimbuf="$define" X fi X $rm -f try.c try.o try X fi X ;; Xesac X X: see if there is a vfork Xset vfork d_vfork Xeval $inlibc X X: see if signal is declared as pointer to function returning int or void Xecho " " X$cppstdin $cppflags < /usr/include/signal.h >$$.tmp Xif $contains 'int.*signal' $$.tmp >/dev/null 2>&1 ; then X echo "You have int (*signal())() instead of void." X d_voidsig="$undef" Xelif $contains 'void.*signal' $$.tmp >/dev/null 2>&1 ; then X echo "You have void (*signal())() instead of int." X d_voidsig="$define" Xelif $test -z "$d_voidsig"; then X echo $n "As you already told me, signal handlers return " X if $test "$d_voidsig" = "$define"; then X echo void X else X echo int X fi Xelse X echo "I can't determine whether signal handlers return void or int..." X echo "I'm assuming they return void like ANSI and POSIX want" X d_voidsig="$define" Xfi Xrm -f $$.tmp X X: get user and system aliases sizes X$cat <grimble X if $contains tputs.o grimble >/dev/null 2>&1; then X termlib='-lcurses' X d_havetlib="$define" X echo "Terminfo library found." X else X ans=x X fi X rm -f grimble X ;; Xesac Xcase "$ans" in Xx) X ans=`loc libtermlib.a x $libpth` X if $test "$ans" = x; then X ans=`loc Slibtermlib.a x $libpth` X fi X case "$ans" in X /usr/lib*|/lib*) X termlib='-ltermlib' X d_havetlib="$define" X echo "Termlib library found." X ;; X /*) X termlib="$ans" X d_havetlib="$define" X echo "Termlib library found." X ;; X *) X ans=`loc libtermcap.a x $libpth` X if $test "$ans" = x; then X ans=`loc Slibtermcap.a x $libpth` X fi X case "$ans" in X /usr/lib*|/lib*) X termlib='-ltermcap' X d_havetlib="$define" X echo "Termcap library found." X ;; X /*) X termlib="$ans" X d_havetlib="$define" X echo "Termcap library found." X ;; X *) X case "$termlib" in X '') X dflt=y X rp="Your system appears to NOT have termlib-style routines. Is this true? [$dflt]" X $echo $n "$rp $c" X . myread X case "$ans" in X n*|f*) d_havetlib="$define" X echo "Then where are the termlib-style routines kept (specify either -llibname" X $echo $n " or full pathname (~name ok))? $c" X rp='Specify termlib:' X . myread X termlib=`filexp $ans` X ;; X *) d_havetlib="$undef" X termlib='' X echo "You will have to play around with term.c then." X ;; X esac X echo " " X ;; X *) echo "You said termlib was $termlib before." X ;; X esac X ;; X esac X ;; X esac X ;; Xesac X X: determine where temporary files should go Xcase "$tmpdir" in X'') X dflt=`loc . "." "/tmp /usr/tmp"` X ;; X*) dflt="$tmpdir" X ;; Xesac Xif $test -d "$tmpdir" -a "$tmpdir" != ""; then X $echo " " X $echo "Temporary files will be put in the $tmpdir directory" Xelse X cont=true X while $test "$cont" ; do X $echo " " X rp="Where do you want to put the temporary files? [$dflt]" X $echo $n "$rp $c" X . myread X tmpdir="$ans" X tmpdir=`filexp $tmpdir` X if $test -d "$tmpdir" -a "$tmpdir" != ""; then X cont='' X else X if $test "$fastread" = yes; then X dflt=y X else X dflt=n X fi X rp="Directory $tmpdir doesn't exist. Use that name anyway? [$dflt]" X $echo $n "$rp $c" X . myread X dflt='' X case "$ans" in X y*) cont='';; X esac X fi X done Xfi X Xcase "$d_noxheader" in X"$define") dflt=y;; X"$undef") dflt=n;; X*) dflt=n;; Xesac X$cat <config.sh X$startsh X# config.sh X# This file was produced by running the Configure script. X Xdefine='$define' Xeunicefix='$eunicefix' XLog='$Log' XHeader='$Header' Xbin='$bin' Xbyteorder='$byteorder' Xcontains='$contains' Xcppstdin='$cppstdin' Xcppminus='$cppminus' Xd_crypt='$d_crypt' Xcryptlib='$cryptlib' Xd_getopt='$d_getopt' Xd_havetlib='$d_havetlib' Xtermlib='$termlib' Xd_mkdir='$d_mkdir' Xd_portable='$d_portable' Xd_rename='$d_rename' Xd_sigvec='$d_sigvec' Xd_sigvectr='$d_sigvectr' Xd_symlink='$d_symlink' Xd_vfork='$d_vfork' Xd_whoami='$d_whoami' Xdefeditor='$defeditor' Xhostname='$hostname' Xphostname='$phostname' Xmydomain='$mydomain' Xi_time='$i_time' Xi_systime='$i_systime' Xd_systimekernel='$d_systimekernel' Xmaildir='$maildir' Xn='$n' Xc='$c' Xpackage='$package' Xpager='$pager' Xprefshell='$prefshell' Xspitshell='$spitshell' Xshsharp='$shsharp' Xsharpbang='$sharpbang' Xstartsh='$startsh' Xd_eunice='$d_eunice' Xloclist='$loclist' Xexpr='$expr' Xsed='$sed' Xecho='$echo' Xcat='$cat' Xrm='$rm' Xmv='$mv' Xcp='$cp' Xtail='$tail' Xtr='$tr' Xmkdir='$mkdir' Xsort='$sort' Xuniq='$uniq' Xgrep='$grep' Xtrylist='$trylist' Xtest='$test' Xinews='$inews' Xegrep='$egrep' Xmore='$more' Xpg='$pg' XMcc='$Mcc' Xvi='$vi' Xmailx='$mailx' Xmail='$mail' Xcpp='$cpp' Xperl='$perl' Xemacs='$emacs' Xls='$ls' Xrmail='$rmail' Xsendmail='$sendmail' Xshar='$shar' Xsmail='$smail' Xtbl='$tbl' Xtroff='$troff' Xnroff='$nroff' Xuname='$uname' Xuuname='$uuname' Xline='$line' Xchgrp='$chgrp' Xchmod='$chmod' Xlint='$lint' Xsleep='$sleep' Xpr='$pr' Xtar='$tar' Xln='$ln' Xlpr='$lpr' Xlp='$lp' Xtouch='$touch' Xmake='$make' Xdate='$date' Xcsh='$csh' Xc_date='$c_date' Xd_calendar='$d_calendar' Xcalendar='$calendar' Xd_cuserid='$d_cuserid' Xd_flock='$d_flock' Xd_flockonly='$d_flockonly' Xlock_dir='$lock_dir' Xd_gethname='$d_gethname' Xd_douname='$d_douname' Xd_phostname='$d_phostname' Xd_host_comp='$d_host_comp' Xd_havedbm='$d_havedbm' Xdbm='$dbm' Xd_index='$d_index' Xd_internet='$d_internet' Xd_mboxedit='$d_mboxedit' Xd_mmdf='$d_mmdf' Xd_newauto='$d_newauto' Xd_nfs='$d_nfs' Xd_networkorder='$d_networkorder' Xd_noxheader='$d_noxheader' Xd_optreturn='$d_optreturn' Xd_pafirst='$d_pafirst' Xd_notouchadd='$d_notouchadd' Xd_noaddfrom='$d_noaddfrom' Xd_usedomain='$d_usedomain' Xd_nocheckvalid='$d_nocheckvalid' Xd_pidcheck='$d_pidcheck' Xd_ptem='$d_ptem' Xd_remlock='$d_remlock' Xmaxattempts='$maxattempts' Xd_setgid='$d_setgid' Xmailermode='$mailermode' Xd_strcspn='$d_strcspn' Xd_strspn='$d_strspn' Xd_strings='$d_strings' Xd_pwdinsys='$d_pwdinsys' Xstrings='$strings' Xincludepath='$includepath' Xd_subshell='$d_subshell' Xd_tempnam='$d_tempnam' Xtempnamo='$tempnamo' Xtempnamc='$tempnamc' Xd_termio='$d_termio' Xd_termios='$d_termios' Xd_tz_min='$d_tz_min' Xd_useembed='$d_useembed' Xd_utimbuf='$d_utimbuf' Xd_voidsig='$d_voidsig' Xdefbatsub='$defbatsub' Xelmalias='$elmalias' Xmaxsysalias='$maxsysalias' Xmaxuseralias='$maxuseralias' Xlib='$lib' Xlibc='$libc' Xlinepr='$linepr' Xmailer='$mailer' Xmailgrp='$mailgrp' Xmansrc='$mansrc' Xmanext='$manext' Xmodels='$models' Xsplit='$split' Xsmall='$small' Xmedium='$medium' Xlarge='$large' Xhuge='$huge' Xoptimize='$optimize' Xccflags='$ccflags' Xcppflags='$cppflags' Xldflags='$ldflags' Xcc='$cc' Xlibs='$libs' Xnametype='$nametype' Xd_passnames='$d_passnames' Xd_berknames='$d_berknames' Xd_usgnames='$d_usgnames' Xpasscat='$passcat' Xpathalias='$pathalias' Xdomains='$domains' Xrmttape='$rmttape' Xroff='$roff' Xtmpdir='$tmpdir' Xxencf='$xencf' Xxenlf='$xenlf' Xd_xenix='$d_xenix' Xd_bsd='$d_bsd' XCONFIG=true XEOT X XCONFIG=true X Xecho " " Xdflt='' Xfastread='' Xecho "If you didn't make any mistakes, then just type a carriage return here." Xrp="If you need to edit config.sh, do it as a shell escape here:" X$echo $n "$rp $c" X. UU/myread Xcase "$ans" in X'') ;; X*) : in case they cannot read X eval $ans;; Xesac X: if this fails, just run all the .SH files by hand X. ./config.sh X Xecho " " Xecho "Doing variable substitutions on .SH files..." Xset x `awk '{print $1}' /dev/null 2>&1; then X dflt=n X $cat < makedepend.out &" XIt can take a while, so you might not want to run it right now. X XEOM X rp="Run make depend now? [$dflt]" X $echo $n "$rp $c" X . UU/myread X case "$ans" in X y*) make depend && echo "Now you must run a make." X ;; X *) echo "You must run 'make depend' then 'make'." X ;; X esac Xelif test -f Makefile; then X echo " " X echo "Now you must run a make." Xelse X echo "Done." Xfi X X$rm -f kit*isdone X: the following is currently useless Xcd UU && $rm -f $rmlist X: since this removes it all anyway Xcd .. && $rm -rf UU X: end of Configure SHAR_EOF echo "File Configure is complete" chmod 0555 Configure || echo "restore of Configure fails" echo "x - extracting config.h.SH (Text)" sed 's/^X//' << 'SHAR_EOF' > config.h.SH && Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X echo "Using config.sh from above..." X fi X . ./config.sh X ;; Xesac Xecho "Extracting config.h (with variable substitutions)" Xsed <config.h -e 's!^#undef!/\*#undef!' X/* config.h X * This file was produced by running the config.h.SH script, which X * gets its values from config.sh, which is generally produced by X * running Configure. X * X * Feel free to modify any of this as the need arises. Note, however, X * that running config.h.SH again will wipe out any changes you've made. X * For a more permanent change edit config.sh and rerun config.h.SH. X */ X X X/* BIN: X * This symbol holds the name of the directory in which the user wants X * to put publicly executable images for the package in question. It X * is most often a local directory such as /usr/local/bin. X */ X#define BIN "$bin" /**/ X X/* BYTEORDER: X * This symbol contains an encoding of the order of bytes in a long. X * Usual values (in octal) are 01234, 04321, 02143, 03412... X */ X#define BYTEORDER 0x$byteorder /**/ X X/* CPPSTDIN: X * This symbol contains the first part of the string which will invoke X * the C preprocessor on the standard input and produce to standard X * output. Typical value of "cc -E" or "/lib/cpp". X */ X/* CPPMINUS: X * This symbol contains the second part of the string which will invoke X * the C preprocessor on the standard input and produce to standard X * output. This symbol will have the value "-" if CPPSTDIN needs a minus X * to specify standard input, otherwise the value is "". X */ X#define CPPSTDIN "$cppstdin" X#define CPPMINUS "$cppminus" X X/* CRYPT: X * This symbol, if defined, indicates that the crypt routine is available X * to encrypt passwords and the like. X */ X#$d_crypt CRYPT /**/ X X/* GETOPT: X * This symbol, if defined, indicates that the getopt() routine exists. X */ X#$d_getopt GETOPT /**/ X X/* HAVETERMLIB: X * This symbol, when defined, indicates that termlib-style routines X * are available. There is nothing to include. X */ X#$d_havetlib HAVETERMLIB /**/ X X/* MKDIR: X * This symbol, if defined, indicates that the mkdir routine is available X * to create directories. Otherwise you should fork off a new process to X * exec /bin/mkdir. X */ X#$d_mkdir MKDIR /**/ X X/* PORTABLE: X * This symbol, if defined, indicates to the C program that it should X * not assume that it is running on the machine it was compiled on. X * The program should be prepared to look up the host name, translate X * generic filenames, use PATH, etc. X */ X#$d_portable PORTABLE /**/ X X/* RENAME: X * This symbol, if defined, indicates that the rename routine is available X * to rename files. Otherwise you should do the unlink(), link(), unlink() X * trick. X */ X#$d_rename RENAME /**/ X X/* SIGVEC: X * This symbol, if defined, indicates that BSD reliable signals are X * supported. X */ X/* SIGVECTOR: X * This symbol, if defined, indicates that the sigvec() routine is called X * sigvector() instead, and that sigspace() is provided instead of X * sigstack(). This is probably only true for HP-UX. X */ X#$d_sigvec SIGVEC /**/ X X#$d_sigvectr SIGVECTOR /**/ X X/* SYMLINK: X * This symbol, if defined, indicates that the symlink routine is available X * to create symbolic links. X */ X#$d_symlink SYMLINK /**/ X X/* VFORK: X * This symbol, if defined, indicates that vfork() exists. X */ X#$d_vfork VFORK /**/ X X/* WHOAMI: X * This symbol, if defined, indicates that the program may include X * whoami.h. X */ X#$d_whoami WHOAMI /**/ X X/* DEFEDITOR: X * This symbol contains the name of the default editor. X */ X#define DEFEDITOR "$defeditor" /**/ X X/* HOSTNAME: X * This symbol contains name of the host the program is going to run on. X * The domain is not kept with hostname, but must be gotten from MYDOMAIN. X * The dot comes with MYDOMAIN, and need not be supplied by the program. X * If gethostname() or uname() exist, HOSTNAME may be ignored. X */ X/* MYDOMAIN: X * This symbol contains the domain of the host the program is going to X * run on. The domain must be appended to HOSTNAME to form a complete X * host name. The dot comes with MYDOMAIN, and need not be supplied by X * the program. If the host name is derived from PHOSTNAME, the domain X * may or may not already be there, and the program should check. X */ X#define HOSTNAME "$hostname" /**/ X#define MYDOMAIN "$mydomain" /**/ X X/* I_TIME: X * This symbol is defined if the program should include . X */ X/* I_SYSTIME: X * This symbol is defined if the program should include . X */ X/* I_SYSTIMEKERNEL: X * This symbol is defined if the program should include X * with KERNEL defined. X */ X#$i_time I_TIME /**/ X#$i_systime I_SYSTIME /**/ X#$d_systimekernel SYSTIMEKERNEL /**/ X X/* PREFSHELL: X * This symbol contains the full name of the preferred user shell on this X * system. Usual values are /bin/csh, /bin/ksh, /bin/sh. X */ X#define PREFSHELL "$prefshell" /**/ X X/* EUNICE: X * This symbol, if defined, indicates that the program is being compiled X * under the EUNICE package under VMS. The program will need to handle X * things like files that don't go away the first time you unlink them, X * due to version numbering. It will also need to compensate for lack X * of a respectable link() command. X */ X/* VMS: X * This symbol, if defined, indicates that the program is running under X * VMS. It is currently only set in conjunction with the EUNICE symbol. X */ X#$d_eunice EUNICE /**/ X#$d_eunice VMS /**/ X X/* CONFIGURE_DATE X * This symbol contains the last date that configure was run for elm -v output. X */ X#define CONFIGURE_DATE "$c_date" X X/* ENABLE_CALENDAR: X * This symbol, if defined, indicates that the calendar feature X * should be supported. X */ X#$d_calendar ENABLE_CALENDAR /**/ X#define dflt_calendar_file "$calendar" X X/* NEED_CUSERID: X * This symbol, if defined, means to include our own cuserid(). X */ X#$d_cuserid NEED_CUSERID /**/ X X/* LOCK_BY_FLOCK X * This symbol, if defined, indicates that the flock mailbox locking should be used. X */ X/* LOCK_FLOCK_ONLY X * This symbol, if defined, indicates that the only flock mailbox locking should also be used. X */ X/* LOCK_DIR X * This symbol is the name of the lock directory for access (not mailbox) locks. X * It will be /usr/spool/locks or /usr/spool/uucp X */ X#$d_flock LOCK_BY_FLOCK /**/ X X#$d_flockonly LOCK_FLOCK_ONLY /**/ X X#define LOCK_DIR "$lock_dir" /**/ X X/* GETHOSTNAME: X * This symbol, if defined, indicates that the C program may use the X * gethostname() routine to derive the host name. See also DOUNAME X * and PHOSTNAME. X */ X/* DOUNAME: X * This symbol, if defined, indicates that the C program may use the X * uname() routine to derive the host name. See also GETHOSTNAME and X * PHOSTNAME. X */ X/* PHOSTNAME: X * This symbol, if defined, indicates that the C program may use the X * contents of PHOSTNAME as a command to feed to the popen() routine X * to derive the host name. See also GETHOSTNAME and DOUNAME. X */ X/* HOSTCOMPILED: X * This symbol, if defined, indicated that the host name is compiled X * in from the string hostname X */ X#$d_gethname GETHOSTNAME /**/ X#$d_douname DOUNAME /**/ X#$d_phostname PHOSTNAME "$phostname" /**/ X#$d_host_comp HOSTCOMPILED /**/ X X/* USE_DBM X * This symbol, when defined, indicates that the pathalias file X * is available as a dbm file. There is nothing to include. X */ X#$d_havedbm USE_DBM /**/ X X/* index: X * This preprocessor symbol is defined, along with rindex, if the system X * uses the strchr and strrchr routines instead. X */ X/* rindex: X * This preprocessor symbol is defined, along with index, if the system X * uses the strchr and strrchr routines instead. X */ X#$d_index index strchr /* cultural */ X#$d_index rindex strrchr /* differences? */ X X/* INTERNET: X * This symbol, if defined, indicates that there is a mailer available X * which supports internet-style addresses (user@site.domain). X */ X#$d_internet INTERNET /**/ X X/* ALLOW_MAILBOX_EDITING: X * This symbol, if defined, indicates that the E)dit mailbox X * function is to be allowed. X */ X#$d_mboxedit ALLOW_MAILBOX_EDITING /**/ X X/* MMDF: X * This symbol, if defined, indicates that mailboxes are in X * the MMDF format. X */ X#$d_mmdf MMDF /**/ X X/* AUTO_BACKGROUND: X * This symbol, if defined, indicates that newmail should go to X * the background automatically. X */ X#$d_newauto AUTO_BACKGROUND /**/ X X/* NFS_CAPABLE X * This symbol, if defined, indicates NFS is available. X */ X/* NETWORK_ORDER X * This symbol, if defined, indicates that the internal files should be kept X * in network byte order. X */ X#$d_nfs NFS_CAPABLE /**/ X#$d_networkorder NETWORK_ORDER /**/ X X/* NO_XHEADER: X * This symbol, if defined, will not automatically add "X-Mailer:" X * headers. X */ X#$d_noxheader NO_XHEADER /**/ X X/* OPTIMIZE_RETURN: X * This symbol, if defined, indicates that Elm should optimize the X * return address of aliases. X */ X#$d_optreturn OPTIMIZE_RETURN /**/ X X/* LOOK_CLOSE_AFTER_SEARCH: X * This symbol, if defined, indicates that the pathalias route X * should be used for machines we talk to directly. X */ X/* DONT_TOUCH_ADDRESSES: X * This symbol, if defined, indicates that elm should not X * touch outbound addresses X */ X/* DONT_ADD_FROM: X * This symbol, if defined, indicates that elm should not adD X * the From: header X */ X/* USE_DOMAIN: X * This symbol, if defined, indicates that elm should add X * the domain name to our address X */ X/* NOCHECK_VALIDNAME: X * This symbol, if defined, indicates that elm should not X * check the addresses against mailboxes on this system. X */ X#$d_pafirst LOOK_CLOSE_AFTER_SEARCH /**/ X#$d_notouchadd DONT_TOUCH_ADDRESSES /**/ X#$d_noaddfrom DONT_ADD_FROM /**/ X#$d_usedomain USE_DOMAIN /**/ X#$d_nocheckvalid NOCHECK_VALIDNAME /**/ X X/* PIDCHECK: X * This symbol, if defined, means that the kill(pid, 0) will X * check for an active pid. X */ X#$d_pidcheck PIDCHECK /**/ X X/* PTEM: X * This symbol, if defined, indicates that the sys/ptem.h include file is X * needed for window sizing. X */ X#$d_ptem PTEM /**/ X X/* REMOVE_AT_LAST: X * This symbol, if defined, tells the C code to remove the lock X * file on lock failure. X */ X/* MAX_ATTEMPTS: X * This symbol defines to the C code the number of times to try X * locking the mail file. X */ X#$d_remlock REMOVE_AT_LAST /**/ X#define MAX_ATTEMPTS $maxattempts X X/* SAVE_GROUP_MAILBOX_ID: X * This symbol, if defined, indica;es that Elm needs to restore the X * group id of the file, as it is running setgid. X */ X#$d_setgid SAVE_GROUP_MAILBOX_ID /**/ X X/* STRCSPN: X * This symbol, if defined, indicates that the strcspn() routine exists. X */ X#$d_strspn STRSPN /**/ X X#$d_strcspn STRCSPN /**/ X X/* STRINGS: X * This symbol, if defined, indicates that the file strings.h X * should be included not string.h X */ X/* PWDINSYS: X * This symbol, if defined, indicates that the file pwd.h X * is in the sys sub directory X */ X#$d_strings STRINGS /**/ X#$d_pwdinsys PWDINSYS /**/ X X/* ALLOW_SUBSHELL: X * This symbol, if defined, indicates that the '!' subshell X * function is to be allowed at various places. X */ X#$d_subshell ALLOW_SUBSHELL /**/ X X/* TEMPNAM: X * This symbol, if defined, indicates that the tempnam() routine exists. X */ X#$d_tempnam TEMPNAM /**/ X X/* TERMIOS: X * This symbol, if defined, indicates that the program should include X * termios.h rather than sgtty.h or termio.h. There are also differences X * in the ioctl() calls that depend on the value of this symbol. X */ X/* TERMIO: X * This symbol, if defined, indicates that the program should include X * termio.h rather than sgtty.h. There are also differences in the X * ioctl() calls that depend on the value of this symbol. X */ X#$d_termios TERMIOS /**/ X X#$d_termio TERMIO /**/ X X/* TZ_MINUTESWEST: X * This symbol is defined if this system uses tz_minutes west X * in time.h instead of timezone. Only for BSD Systems X */ X#$d_tz_min TZ_MINUTESWEST /**/ X X/* USE_EMBEDDED_ADDRESSES: X * This symbol, if defined, indicates that replyto: and from: X * headers can be trusted. X */ X#$d_useembed USE_EMBEDDED_ADDRESSES /**/ X X/* NOUTIMBUF: X * This symbol, if defined, means to include our own struct utimbuf. X */ X#$d_utimbuf NOUTIMBUF /**/ X X/* VOIDSIG: X * This symbol is defined if this system declares "void (*signal())()" in X * signal.h. The old way was to declare it as "int (*signal())()". It X * is up to the package author to declare things correctly based on the X * symbol. X */ X#$d_voidsig VOIDSIG /**/ X X/* MAX_SALIASES: X * This symbol defines the number of system wide aliases allowed. X */ X/* MAX_UALIASES: X * This symbol defines the number of per user aliases allowed. X */ X#define MAX_SALIASES $maxsysalias /* number of system aliases allowed */ X#define MAX_UALIASES $maxuseralias /* number of user aliases allowed */ X X/* PASSNAMES: X * This symbol, if defined, indicates that full names are stored in X * the /etc/passwd file. X */ X/* BERKNAMES: X * This symbol, if defined, indicates that full names are stored in X * the /etc/passwd file in Berkeley format (name first thing, everything X * up to first comma, with & replaced by capitalized login id, yuck). X */ X/* USGNAMES: X * This symbol, if defined, indicates that full names are stored in X * the /etc/passwd file in USG format (everything after - and before ( is X * the name). X */ X#$d_passnames PASSNAMES /* (undef to take name from ~/.fullname) */ X#$d_berknames BERKNAMES /* (that is, ":name,stuff:") */ X#$d_usgnames USGNAMES /* (that is, ":stuff-name(stuff):") */ X X/* XENIX: X * This symbol, if defined, indicates this is a Xenix system, X * for knocking out the far keyword in selected places. X */ X/* BSD: X * This symbol, if defined, indicates this is a BSD type system, X */ X#$d_xenix XENIX /**/ X#$d_bsd BSD /**/ X X!GROK!THIS! SHAR_EOF chmod 0444 config.h.SH || echo "restore of config.h.SH fails" echo "x - extracting Makefile.SH (Text)" sed 's/^X//' << 'SHAR_EOF' > Makefile.SH && Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . ./config.sh X ;; Xesac Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac X Xcase "$d_symlink" in X*define*) sln='ln -s' ;; X*) sln='ln';; Xesac X Xecho "Extracting Makefile (with variable substitutions)" Xcat >Makefile <>Makefile <<'!NO!SUBS!' X# Other variables XSHELL = /bin/sh XSOURCE_FILES = `$(GREP) -v 'doc/' MANIFEST` XDISTRIBUTED_FILES = `$(CAT) MANIFEST` X X X# Targets X# Give default target first and alone Xdefault_target: all X X# Targets that are simply executed in each subordinate makefile as is Xall install uninstall lint clean: X cd src; $(MAKE) -$(MAKEFLAGS) $@ X cd utils; $(MAKE) -$(MAKEFLAGS) $@ X cd filter; $(MAKE) -$(MAKEFLAGS) $@ X cd doc; $(MAKE) -$(MAKEFLAGS) $@ X X# Targets that apply to all elm at once Xlisting: X @$(ECHO) "Making source listing in file LISTING." X @$(PR) -n -f $(SOURCE_FILES) > LISTING X X# This is the only target that gets installed even if not out-of-date X# with respect the files from which it is installed. Xrmt-install: rmt-defined X @($(ECHO) "Warning: This assumes you have already installed";\ X $(ECHO) "ELM on the remote machine <$(REMOTE)>. If this is";\ X $(ECHO) "not the case, interrupt this process quickly!";\ X $(SLEEP) 10;) X cd src; $(MAKE) -$(MAKEFLAGS) REMOTE=$(REMOTE) $@ X cd filter; $(MAKE) -$(MAKEFLAGS) REMOTE=$(REMOTE) $@ X cd utils; $(MAKE) -$(MAKEFLAGS) REMOTE=$(REMOTE) $@ X cd doc; $(MAKE) -$(MAKEFLAGS) REMOTE=$(REMOTE) $@ X Xrmt-defined: X @(if [ "$(REMOTE)" = "" ];\ X then\ X $(ECHO) "You need to define 'REMOTE' as the remote file system";\ X $(ECHO) "for this particular command. The easiest way to do this";\ X $(ECHO) "to type:";\ X $(ECHO) " make REMOTE= rmt-install";\ X exit 1;\ X fi); X Xshar: X $(SHAR) $(DISTRIBUTED_FILES) X Xtar: X $(TAR) cvf $(TAPE) $(DISTRIBUTED_FILES) X X# Targets that are really in subordinate make files Xdocumentation: X cd doc; $(MAKE) -$(MAKEFLAGS) $@ X Xelm: X cd src; $(MAKE) -$(MAKEFLAGS) all X X# The dummy dependency here prevents make from thinking the target is the X# filter directory that sits in the current directory, rather than X# an abstract target. Xfilter: _filter X X_filter: X cd filter; $(MAKE) -$(MAKEFLAGS) all X X# The dummy dependency here prevents make from thinking the target is the X# utils directory that sits in the current directory, rather than X# an abstract target. Xutils: _utils X X_utils: X cd utils; $(MAKE) -$(MAKEFLAGS) all X X!NO!SUBS! SHAR_EOF chmod 0444 Makefile.SH || echo "restore of Makefile.SH fails" echo "x - extracting Patchlist (Text)" sed 's/^X//' << 'SHAR_EOF' > Patchlist && XThis file will contain the date and comment header from each Xofficial patch as issued. Since this is the full new release, Xthere are currently no patches. SHAR_EOF chmod 0444 Patchlist || echo "restore of Patchlist fails" echo "x - extracting doc/Alias.guide (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/Alias.guide && X.\" @(#)$Id: Alias.guide,v 4.1 90/04/28 22:40:58 syd Exp $ X.\" X.\" A guide to the ELM alias system and so on. X.\" format with: X.\" tbl Alias.guide | troff -mn > Alias.format' X.\" X.\" (C) Copyright 1986, 1987 Dave Taylor X.\" (C) Copyright 1988, 1989, 1990 USENET Community Trust X.\" Elm is now in the public trust. Bug reports, comments, suggestions, flames X.\" etc. should go to: X.\" Syd Weinstein elm@DSI.COM (dsinc!elm) X.\" X.\" $Log: Alias.guide,v $ X.\" Revision 4.1 90/04/28 22:40:58 syd X.\" checkin of Elm 2.3 as of Release PL0 X.\" X.\" X.tm Have we been run through "tbl" first?? I hope so! X.po 1i X.ds h0 X.ds h1 X.ds h2 X.ds f0 X.ds f1 X.ds f2 X.nr Hy 1 X.nr Pt 1 X.nr Pi 0 X.lg 0 X.nf X.na X.rs X.za X.sp |3.0i X.ce 99 X.ps 20 X.ss 18 X.vs 12 X\f3The Elm Alias System Users Guide\f1 X.sp 4 X.ps 12 X.ss 14 X.vs 14 X\f2What aliases are and how to use them Xin the \f3Elm\fP mail system\f1 X.sp 2 XDave Taylor X.sp XHewlett-Packard Laboratories X1501 Page Mill Road XPalo Alto CA X94304 X.sp 3 Xemail: taylor\s-1@\s+1hplabs.HP.COM or hplabs\s-1!\s+1taylor X.sp 3 X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<< X.sp XSyd Weinstein XDatacomp Systems, Inc. X3837 Byron Road XHuntingdon Valley, PA 19006-2320 X.sp Xemail: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm X.sp 2 X\s18\f3\(co\f1\s12 Copyright 1986, 1987 by Dave Taylor X\s18\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust X.ps 10 X.ss 12 X.vs 12 X.fi X.ad X.bp 1 X.sv 5v X.ps 14 X.ss 12 X.vs 16 X\f3The Elm Alias System Users Guide\f1 X.ds h0 "Alias Users Guide X.ds h1 X.ds h2 "Version 2.3 X.ds f0 "May 1, 1990 X.ds f1 X.ds f2 "Page % X.sp X.ps 10 X.ss 12 X.vs 12 X(Version 2.3) X.sp 2 XDave Taylor X.sp XHewlett-Packard Laboratories X1501 Page Mill Road XPalo Alto CA X94304 X.sp Xemail: taylor\s-1@\s+1hplabs.HP.COM or hplabs\s-1!\s+1taylor X.sp 2 X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<< X.sp XSyd Weinstein XDatacomp Systems, Inc. X3837 Byron Road XHuntingdon Valley, PA 19006-2320 X.sp Xemail: elm\s-1@\s+1DSI.COM or dsinc\s-1!\s+1elm X.sp 2 XMay 1, 1990 X.ce 0 X.sp 3 X.pg XThis document is intended as a supplement to the \f2Elm Users Guide\f1 Xand is only of interest to those users desiring more knowledge Xabout how aliases work and how to create strange and exciting Xaliases for their systems (okay, so maybe it's not \f2that\f1 exciting!) X.sp X.pg XThis document is broken up into the following sections; Xuser aliases, Xgroup aliases, Xsystem aliases, Xediting and installing new aliases, Xthe host routing database, Xthe domain routing database, Xgeneral warnings and other chitchat. X.sp X.hn 1 User Aliases X XThe most simple type of aliases in the \f3Elm\f1 system are individual Xuser aliases. These are made up of three parts; X.nf X \f2aliasname list\f1 = \f2username\f1 = \f2address\f1 \s-2\u1\d\s0 X.fn X1. Notice that the alias separator has moved from being a colon Xcharacter (`:') to the equals sign (`='). XThis is due to the requirements of the X.400 addressing scheme. X.ef X.fi XWhere the \f2aliasname list\f1 is either a single aliasname\s-2\u2\d\s0 X.fn X2. aliasnames can be any combination of letters, numbers, dashes (`-'), Xperiods (`.'), or underscores (`_'). Letter case is not significant. XThat is `FRED' and `Fred' are identical. X.ef Xor a list of aliasnames separated by commas. Aliasnames are case insensitive and will be Xconverted to all lower case by the alias system. X.pg X\f2Username\f1 is used to indicate the full `real name' of the user. XFor example, if you had an alias for `taylor' to get to me, the X\f2username\f1 field would contain `Dave Taylor' or Xperhaps `Dave Taylor at HP' Xor some other permutation. \f3Elm\f1 Xuses this information to add the users full name to the addresses of Xoutbound mail to get more readable addresses. X.pg X\f2Address\f1 is either the users full electronic mail address or, if Xthe machine routing database is installed, the minimum address needed Xto specify the destination. For example, say our routing database Xcontained information on how to get to machine `hp-sdd' and I wanted Xto have an address for my friend Ken there \(em I could have his address Xspecified as simply `ken@hp-sdd' (or alternatively `hp-sdd!ken' since Xthe two are functionally equivalent). X.sp X.pg 0 XLet's get on to some examples, shall we? X.sp XConsider this excerpt from my own \f2.elm/aliases.text\f1 file; X X.nf X.ft CW X.zf X.in .5i X.ta \w'frank,minjarez 'u \w'frank,minjarez = Frank Minjarez 'u X# Mail aliases for Dave Taylor X# Friends from UCSD Xaddie = Addie Silva = addie@hp-sdd.SDD.HP.COM Xfrank,minjarez = Frank Minjarez = Minjarez.Verify@dockmaster.arpa Xpizzini = Ken Pizzini = hplabs!ucbvax!ucdavis!pai!ken X.ft 1 X X.in 0 X.fi XNote that the alias for Frank Minjarez has two \f2aliasnames\f1 associated Xwith it, X.ft CW X.zf Xfrank\f1 and X.ft CW X.zf Xminjarez\f1. XAlso notice that the first and second aliases Xuse the ARPA Internet style naming convention of \f2user@machine\f1 Xwhereas the third uses the UUCP notation of \f2machine!user\f1. X.pg XFor the most part, the notational format is transparent within the Xalias file \(em the only time it \f2does\f1 make a difference Xis if you have to specify more than the machine that the user is Xreceiving mail on (as in the third example above). X.pg XSuffice to say that if you must specify any sort of uucp route Xthat you should use the uucp notation as much as possible to ensure Xthat the system expands the correct machine name. Similarly, if Xyou're bouncing mail through different ARPA Internet sites (to Xget to a foreign system, as in the example below) you should use the Xnotation that system expects: X X.ft CW X.zf X.ti .5i X listserv%byuadmin.BITNET@rugters.edu X.ft 1 X.sp X.hn 1 Group Aliases X XAfter the confusion of user aliases, group aliases are even more Xfun! For the most part the notation is very similar; X X \f2aliasname list\f1 = \f2groupname\f1 = \f2list of people\f1 X XWhere \f2aliasname list\f1 and \f2groupname\f1 are exactly equivalent Xto the corresponding fields in user aliases. X.pg XThe interesting part is the \f2list of people\f1 field; this Xfield is actually in the same notation as the aliasname list, Xso it's really quite easy to create. XIt's best to illustrate by example: X X.ft CW X.zf X.nf X.in .5i Xfriends, mypals = The Gang of Six = joe, larry, mary, joanna, X\h'\w'friends, mypals = The Gang of Six = 'u'nancy, michael X.ft 1 X X.in 0 X.fi X(Notice that you can continue onto as many lines as you'd like so Xlong as each additional line start with either a \s8SPACE\s10 or a \s8TAB\s10 Xcharacter) X.pg XThe major limitation with group aliases is that each of the Xpeople in the list must be a \f2previously defined alias\f1 Xor a valid mail address on the current machine. X.pg XWhat does this mean? That the following excerpt from an alias file: X X.in .5i X.ft CW X.zf X.nf X.ta \w'hawaii 'u \w'hawaii = The Hawaiian Twins 'u Xhawaii = The Hawaiian Twins = joe@cs.rit.edu, maoa Xmaoa = Maoa Lichtenski Jr = maoa@Hawaii.cs.uh.edu X.ft 1 X X.in 0 X.fi Xwill fail for two reasons \(em not only does the group \f2list of people\f1 Xcontain a complex address, but it also contains an aliasname that is Xdefined \f2further on\f1 in Xthe \f2.elm/aliases.text\f1 file. X.pg XThe correct way to have the previous aliases in the file are to have them Xorganized like: X X.ft CW X.zf X.in .5i X.ta \w'hawaii 'u \w'hawaii = The Hawaiian Twins 'u X.nf Xjoe = Joe Lichtenski = joe@cs.rit.edu Xmaoa = Maoa Lichtenski Jr = maoa@Hawaii.cs.uh.edu Xhawaii = The Hawaiian Twins = joe, maoa X.ft 1 X X.in 0 X.fi Xwhich will then work correctly. X.sp XFortunately, while this seems fairly picky, when you run \f2newalias\f1 Xto install the new aliases, you'll get relevant and meaningful Xerror messages to help you fix your aliases up correctly. X.sp X.hn 1 System Aliases X XSystem aliases are functionally equivalent to the individual \f3Elm\f1 Xalias lists each \f3Elm\f1 user has (both user aliases and group aliases) Xbut are \f2read only\f1 for everyone but the \f3Elm\f1 administrator. The Xformat of the file is identical to the users file, and the only difference is Xthat this file is expected to be located in the directory that contains Xthe \f2system_hash_file\f1 and \f2system_data_file\f1 files (see the X\f2Elm Configuration Guide\f1 for more details on these variables). X.pg XSimply create the system alias file in the specified directory Xas you would a normal alias file, and install it the same way (see the Xfollowing section for more details on that). X.pg XVoila!! X.sp X.hn 1 Editing and Installing New Aliases X XTo install new aliases, you need merely to create, or modify, Xthe file \f2.elm/aliases.text\f1 until you're Xsatisfied with it and it meets the requirements discussed above. XYou can then try to install it with the command; X X $ \f3newalias\f1 X Xwhich will either report back the number of aliases installed Xor any errors encountered trying to parse and store the Xgiven alias list. X.pg XNote that blank lines are no problem and that comments are not only Xallowed but actually encouraged, and must have `\f3#\f1' as the first Xcharacter of each comment line. X.sp XFinally, if you find that you're hitting the ``Too many aliases'' error, Xthen you'll need to reconfigure the entire \f3Elm\f1 system (again, Xsee \f2The Elm Configuration Guide\f1). X.sp X.hn 1 The Hostname Routing Database X XFloating about on the various networks is a rather nifty program by Xa number of people, including Peter Honeyman and Steve Bellovin, Xcalled \f2pathalias\f1. What this software does is SHAR_EOF echo "End of part 3" echo "File doc/Alias.guide is continued in part 4" echo "4" > s2_seq_.tmp exit 0 exit 0 # Just in case...