From: andrew@acwbust.sub.org (A.W. Root)
Newsgroups: comp.unix.bsd
Subject: Patch for smail (Re: UUCP woes with 386BSD)
Date: 18 Aug 92 10:05:08 GMT
Organization: A.Wheadon,6140-Bensheim-4,FRG

In article <1992Aug15.170940.13095@unixland.natick.ma.us> bill@unixland.natick.ma.us (Bill Heiser) writes:
>mink@coyote.datalog.com (Clint Ruoho) writes:
>
>However I have not had any luck getting MAIL to work in a UUCP environment.
>I tried to set up sendmail.cf to use UUCP, but it still fails with
>"hostname lookup failed" errors.  Seems maybe it's trying to use a nameserver?
>Anyone have outbound mail working on 386BSD in a UUCP environment?

All you need to do is replace sendmail with smail-3.1.25 which after
changing mkdefs.sh to run with ash or bash will compile with practically
no problems.

Attached is a patch to get smail running, I still seem to have a problem
with bind and smail as a daemon but used normally it works perfectly.
You can't use ndbm as smail wants some type of ndbm_fileno or something
which doesn't exist.

             Patch follows

diff +context +recursive ./conf/EDITME ../smail-3.1.25.new/conf/EDITME
*** ./conf/EDITME	Wed Jul 22 18:14:54 1992
--- ../smail-3.1.25.new/conf/EDITME	Wed Jul 22 02:53:08 1992
***************
*** 113,119 ****
  # This may save some disk space at the expence of the ability to do
  # symbolic debugging.
  
! #STRIP=yes
  
  
  # USE_SYMLINKS - define this if you wish to use symlinks when installing
--- 113,119 ----
  # This may save some disk space at the expence of the ability to do
  # symbolic debugging.
  
! STRIP=yes
  
  
  # USE_SYMLINKS - define this if you wish to use symlinks when installing
***************
*** 127,133 ****
  # one copy of the smail binary to be installed.  Do not define this
  # if your system does not have symbolic links.
  
! #USE_SYMLINKS=yes
  
  
  # OS_TYPE - define the operating system type for your machine
--- 127,133 ----
  # one copy of the smail binary to be installed.  Do not define this
  # if your system does not have symbolic links.
  
! USE_SYMLINKS=yes
  
  
  # OS_TYPE - define the operating system type for your machine
***************
*** 282,288 ****
  # doesn't work for you, try defining OBSOLETE_RESOLVER.
  
  #MISC_DEFINES=ISC_SOCKET_TIME_BUG
! #MISC_DEFINES=NO_FORWARDTO_FILE		# recommended for BSD systems
  #MISC_DEFINES=ISC_SOCKET_TIME_BUG:NO_FORWARDTO_FILE
  #MISC_DEFINES=OBSOLETE_RESOLVER
  
--- 282,288 ----
  # doesn't work for you, try defining OBSOLETE_RESOLVER.
  
  #MISC_DEFINES=ISC_SOCKET_TIME_BUG
! MISC_DEFINES=NO_FORWARDTO_FILE		# recommended for BSD systems
  #MISC_DEFINES=ISC_SOCKET_TIME_BUG:NO_FORWARDTO_FILE
  #MISC_DEFINES=OBSOLETE_RESOLVER
  
***************
*** 386,392 ****
  # transports, inet_uusmtp and inet_demand_uusmtp use compliant
  # protocols.
  
! #UUCP_ZONE=true					# this site is in the UUCP zone
  #UUCP_ZONE=					# this site is on the Internet
  
  
--- 386,392 ----
  # transports, inet_uusmtp and inet_demand_uusmtp use compliant
  # protocols.
  
! UUCP_ZONE=true					# this site is in the UUCP zone
  #UUCP_ZONE=					# this site is on the Internet
  
  
***************
*** 427,433 ****
  #	wish to be able to receive mail from anywhere in the world
  #	should get a registered domain.
  
! DOMAINS=uucp					# common
  #DOMAINS=ussr.comm:uucp				# example only
  
  
--- 427,433 ----
  #	wish to be able to receive mail from anywhere in the world
  #	should get a registered domain.
  
! DOMAINS=sub.org:uucp					# common
  #DOMAINS=ussr.comm:uucp				# example only
  
  
***************
*** 509,515 ****
  # is os-type dependent, and is commonly nobody for BSD- and sun-derived
  # systems.
  
! #NOBODY=nobody
  #NOBODY=unknown		# some sites have this in their passwd file
  
  
--- 509,515 ----
  # is os-type dependent, and is commonly nobody for BSD- and sun-derived
  # systems.
  
! NOBODY=nobody
  #NOBODY=unknown		# some sites have this in their passwd file
  
  
***************
*** 549,557 ****
  # under SMAIL_BIN_DIR.  The SMAIL_BIN_DIR should be a directory
  # that is commonly in users search path (i.e., $PATH).
  
! SMAIL_BIN_DIR=/usr/local			# BSD local convention
  #SMAIL_BIN_DIR=/usr/amdahl/bin			# convention for UTS/580
! #SMAIL_BIN_DIR=/usr/local/bin			# yet another convention
  #SMAIL_BIN_DIR=/usr/smail/bin			# I use this right now
  
  
--- 549,557 ----
  # under SMAIL_BIN_DIR.  The SMAIL_BIN_DIR should be a directory
  # that is commonly in users search path (i.e., $PATH).
  
! #SMAIL_BIN_DIR=/usr/local			# BSD local convention
  #SMAIL_BIN_DIR=/usr/amdahl/bin			# convention for UTS/580
! SMAIL_BIN_DIR=/usr/local/bin			# yet another convention
  #SMAIL_BIN_DIR=/usr/smail/bin			# I use this right now
  
  
***************
*** 574,581 ****
  # to the null string.  This will prevent the smail src/Makefile from
  # installing it as $SMAIL_BIN_DIR/smail twice.
  
! SMAIL_NAME=/usr/lib/sendmail			# common convention
! #SMAIL_NAME=					# use smail in bin directory
  
  
  # OTHER_SMAIL_NAMES - other names under which to install smail
--- 574,581 ----
  # to the null string.  This will prevent the smail src/Makefile from
  # installing it as $SMAIL_BIN_DIR/smail twice.
  
! #SMAIL_NAME=/usr/sbin/sendmail			# common convention
! SMAIL_NAME=					# use smail in bin directory
  
  
  # OTHER_SMAIL_NAMES - other names under which to install smail
***************
*** 596,602 ****
  #
  # NOTE: A pathname CANNOT be in both SMAIL_NAME and OTHER_SMAIL_NAMES.
  
! OTHER_SMAIL_NAMES=/bin/rmail			# common
  #OTHER_SMAIL_NAMES=/usr/lib/sendmail		# could use this rather
  						# than putting it into
  						# SMAIL_NAME
--- 596,602 ----
  #
  # NOTE: A pathname CANNOT be in both SMAIL_NAME and OTHER_SMAIL_NAMES.
  
! OTHER_SMAIL_NAMES=/bin/rmail:/usr/sbin/sendmail		# common
  #OTHER_SMAIL_NAMES=/usr/lib/sendmail		# could use this rather
  						# than putting it into
  						# SMAIL_NAME
***************
*** 621,627 ****
  # is required by the smail binary as it is released.  See smail(5)
  # and smail(8) for more details on this and related topics.
  
! LIB_DIR=/usr/lib/smail				# common convention
  #LIB_DIR=/usr/local/lib/smail
  #LIB_DIR=/usr/smail/lib				# I use this right now
  
--- 621,627 ----
  # is required by the smail binary as it is released.  See smail(5)
  # and smail(8) for more details on this and related topics.
  
! LIB_DIR=/usr/libexec/smail				# common convention
  #LIB_DIR=/usr/local/lib/smail
  #LIB_DIR=/usr/smail/lib				# I use this right now
  
***************
*** 652,658 ****
  
  #NEWALIASES=$UTIL_BIN_DIR/newaliases
  #NEWALIASES=/usr/local/bin/newaliases
! NEWALIASES=/usr/ucb/newaliases			# BSD location
  #NEWALIASES=/usr/lib/newaliases			# UTS/580 location
  
  
--- 652,658 ----
  
  #NEWALIASES=$UTIL_BIN_DIR/newaliases
  #NEWALIASES=/usr/local/bin/newaliases
! NEWALIASES=/usr/bin/newaliases			# BSD location
  #NEWALIASES=/usr/lib/newaliases			# UTS/580 location
  
  
***************
*** 746,753 ****
  #	YP maps.  In any case, use whatever works in your
  #	environment.
  
! ALIASES_FILE=/usr/lib/aliases			# compatible with sendmail
! #ALIASES_FILE=aliases				# for file under LIB_DIR
  #ALIASES_FILE=mail.aliases			# for use over Sun YP
  
  #ALIASES_TYPE=dbm				# compatible with sendmail
--- 746,753 ----
  #	YP maps.  In any case, use whatever works in your
  #	environment.
  
! #ALIASES_FILE=/usr/lib/aliases			# compatible with sendmail
! ALIASES_FILE=aliases				# for file under LIB_DIR
  #ALIASES_FILE=mail.aliases			# for use over Sun YP
  
  #ALIASES_TYPE=dbm				# compatible with sendmail
***************
*** 788,794 ****
  # directories should be colon-separated and may contain only one spool
  # directory if desired.
  
! SPOOL_DIRS=/usr/spool/smail			# common
  #SPOOL_DIRS=/usr/spool/smail:/usr2/spool/smail	# use of alternate filesystem
  #SPOOL_DIRS=/usr/smail/spool			# I use this right now
  
--- 788,794 ----
  # directories should be colon-separated and may contain only one spool
  # directory if desired.
  
! SPOOL_DIRS=/var/spool/smail			# common
  #SPOOL_DIRS=/usr/spool/smail:/usr2/spool/smail	# use of alternate filesystem
  #SPOOL_DIRS=/usr/smail/spool			# I use this right now
  
***************
*** 825,831 ****
  # If UNSHAR_MAP_DIR is not defined, then the getmap and uuwho utilities
  # will not function.
  
! UNSHAR_MAP_DIR=/usr/spool/uumaps
  
  
  # NEWS_SPOOL_DIR - where news articles are stored
--- 825,831 ----
  # If UNSHAR_MAP_DIR is not defined, then the getmap and uuwho utilities
  # will not function.
  
! UNSHAR_MAP_DIR=/var/spool/uumaps
  
  
  # NEWS_SPOOL_DIR - where news articles are stored
***************
*** 838,844 ****
  # the news articles from comp.mail.maps.
  
  #NEWS_SPOOL_DIR=/usr/spool/news
! #NEWS_SPOOL_DIR=/var/spool/news
  
  
  # UUWHO_FILE - file used to store the uuwho file
--- 838,844 ----
  # the news articles from comp.mail.maps.
  
  #NEWS_SPOOL_DIR=/usr/spool/news
! NEWS_SPOOL_DIR=/var/spool/news
  
  
  # UUWHO_FILE - file used to store the uuwho file
***************
*** 890,896 ****
  # It is therefore recommended that TMP_DIR not be globally writable.  
  
  #TMP_DIR=$UNSHAR_MAP_DIR/tmp			# common for unsecure /tmp
! #TMP_DIR=/usr/tmp				# if /usr/tmp is sticky
  #TMP_DIR=$LIB_DIR/tmp
  
  
--- 890,896 ----
  # It is therefore recommended that TMP_DIR not be globally writable.  
  
  #TMP_DIR=$UNSHAR_MAP_DIR/tmp			# common for unsecure /tmp
! TMP_DIR=/usr/tmp				# if /usr/tmp is sticky
  #TMP_DIR=$LIB_DIR/tmp
  
  
***************
*** 904,910 ****
  # normal users.  A common directory for smail utilities to append to
  # SECURE_PATH is UTIL_BIN_DIR.
  
! #SECURE_PATH=/bin:/usr/bin:/usr/ucb		# common for BSD systems
  #SECURE_PATH=/bin:/usr/bin:/usr/amdahl/bin	# common for UTS/580 systems
  #SECURE_PATH=/bin:/usr/bin			# common for System V system
  
--- 904,910 ----
  # normal users.  A common directory for smail utilities to append to
  # SECURE_PATH is UTIL_BIN_DIR.
  
! SECURE_PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin	# common for BSD systems
  #SECURE_PATH=/bin:/usr/bin:/usr/amdahl/bin	# common for UTS/580 systems
  #SECURE_PATH=/bin:/usr/bin			# common for System V system
  
***************
*** 968,978 ****
  # will read the compressed file: filename$DOT_Z and write the
  # plain text to standard output while leaving the file compressed.
  
! #COMPRESS=compress				# common
! #COMP_FLAG="-f"
! #UNCOMPRESS=uncompress
! #ZCAT=zcat
! #DOT_Z=".Z"
  
  #COMPRESS=pack					# System V standard
  #COMP_FLAG="-f"
--- 968,978 ----
  # will read the compressed file: filename$DOT_Z and write the
  # plain text to standard output while leaving the file compressed.
  
! COMPRESS=compress				# common
! COMP_FLAG="-f"
! UNCOMPRESS=uncompress
! ZCAT=zcat
! DOT_Z=".Z"
  
  #COMPRESS=pack					# System V standard
  #COMP_FLAG="-f"
diff +context +recursive ./conf/lib/mkdefs.sh ../smail-3.1.25.new/conf/lib/mkdefs.sh
*** ./conf/lib/mkdefs.sh	Tue Dec 24 04:02:58 1991
--- ../smail-3.1.25.new/conf/lib/mkdefs.sh	Tue Jul 21 23:54:04 1992
***************
*** 376,386 ****
  list=$OTHER_SMAIL_NAMES
  OTHER_SMAIL_NAMES=
  IFS=$sep
! for i in $list; do
  	case "$OTHER_SMAIL_NAMES" in
  	?*)	OTHER_SMAIL_NAMES="$OTHER_SMAIL_NAMES $i";;
  	*)	OTHER_SMAIL_NAMES="$i";
! 	esac
  done
  IFS=$save_IFS
  
--- 376,386 ----
  list=$OTHER_SMAIL_NAMES
  OTHER_SMAIL_NAMES=
  IFS=$sep
! for i in $list; do if [ "$i" != "" ] ; then
  	case "$OTHER_SMAIL_NAMES" in
  	?*)	OTHER_SMAIL_NAMES="$OTHER_SMAIL_NAMES $i";;
  	*)	OTHER_SMAIL_NAMES="$i";
! 	esac ; fi
  done
  IFS=$save_IFS
  
***************
*** 436,456 ****
  
  # Write out the simple variables
  eval "cat <<EOF
! `for v in $VARS $LISTS $NLISTS; do echo \"\$v='\\\$\$v'\"; done`
  EOF
  "
  
  # write out the positive boolean list variables
! (IFS="$sep"; for i in $HAVE; do echo HAVE_$i=yes; done)
! (IFS="$sep"; for i in $OSNAMES; do echo $i=yes; done)
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do echo HAVE_$i=; done)
  
  # write the extensible set of variables that may have values
  (IFS="$sep"
!   for i in $MISC_DEFINES; do
! 	echo "$i"
    done | sed -n -e 's/^\(.[^=]*\)$/\1=yes/p' \
  		-e 's/^\(.[^=]*\)=\(.*\)/\1='\2'/p'
  )
--- 436,458 ----
  
  # Write out the simple variables
  eval "cat <<EOF
! `for v in $VARS $LISTS $NLISTS; do echo "$v='\$$v'"; done`
  EOF
  "
  
  # write out the positive boolean list variables
! #(IFS="$sep"; for i in $HAVE; do echo HAVE_$i=yes; done)
! (IFS="$sep"; for i in $HAVE; do if [ "$i" != "" ] ; then echo HAVE_$i=yes; fi ; done)
! #(IFS="$sep"; for i in $OSNAMES; do echo $i=yes; done)
! (IFS="$sep"; for i in $OSNAMES; do  if [ "$i" != "" ] ; then echo $i=yes; fi ; done)
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do  if [ "$i" != "" ] ; then echo HAVE_$i=; fi ; done)
  
  # write the extensible set of variables that may have values
  (IFS="$sep"
!   for i in $MISC_DEFINES; do if [ "$i" != "" ] ; then
! 	echo "$i" ; fi
    done | sed -n -e 's/^\(.[^=]*\)$/\1=yes/p' \
  		-e 's/^\(.[^=]*\)=\(.*\)/\1='\2'/p'
  )
***************
*** 563,578 ****
  EOF
  
  # write out the positibe boolean list variables
! (IFS="$sep"; for i in $HAVE; do echo "#define HAVE_$i"; done)
! (IFS="$sep"; for i in $OSNAMES; do echo "#define $i"; done)
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do echo "#undef HAVE_$i"; done)
  
  # write the extensible set of variables that may have values
  (IFS="$sep"
!   for i in $MISC_DEFINES; do
! 	echo "$i"
    done | sed -n -e 's/^\(.[^=]*\)$/#define \1/p' \
  		-e 's/^\(.[^=]*\)=\(.*\)/#define \1		\2/p'
  )
--- 565,580 ----
  EOF
  
  # write out the positibe boolean list variables
! (IFS="$sep"; for i in $HAVE; do if [ "$i" != "" ] ; then echo "#define HAVE_$i" ; fi; done)
! (IFS="$sep"; for i in $OSNAMES; do if [ "$i" != "" ] ; then echo "#define $i" ; fi; done)
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do if [ "$i" != "" ] ; then echo "#undef HAVE_$i" ; fi; done)
  
  # write the extensible set of variables that may have values
  (IFS="$sep"
!   for i in $MISC_DEFINES; do if [ "$i" != "" ] ; then
! 	echo "$i" ; fi
    done | sed -n -e 's/^\(.[^=]*\)$/#define \1/p' \
  		-e 's/^\(.[^=]*\)=\(.*\)/#define \1		\2/p'
  )
***************
*** 644,663 ****
  fi
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do echo "s|X_HAVE_${i}_X||g"; done)
  
  # write out the positive boolean list variables
! (IFS="$sep"; for i in $HAVE; do echo "s|X_HAVE_${i}_X|yes|g"; done)
! (IFS="$sep"; for i in $OSNAMES; do echo "s|X_${i}_X|yes|g"; done)
  
  # If this OS cannot correctly use #!/bin/sh at the beginning of bourne
  # shell scripts, then convert them not to do this.
  (IFS="$sep";
    sed_hash_bang=true
!   for i in $HAVE; do
  	case "$i" in
  	HAVE_HASH_BANG)	sed_hash_bang=false;;
! 	esac
    done
    if $sed_hash_bang; then
  	echo '1s|^#! */bin/sh|: /bin/sh|'
--- 646,665 ----
  fi
  
  # clear the negative boolean list variables
! (IFS="$sep"; for i in $NO_HAVE; do if [ "$i" != "" ] ; then echo "s|X_HAVE_${i}_X||g" ; fi; done)
  
  # write out the positive boolean list variables
! (IFS="$sep"; for i in $HAVE; do if [ "$i" != "" ] ; then echo "s|X_HAVE_${i}_X|yes|g" ; fi; done)
! (IFS="$sep"; for i in $OSNAMES; do if [ "$i" != "" ] ; then echo "s|X_${i}_X|yes|g" ; fi; done)
  
  # If this OS cannot correctly use #!/bin/sh at the beginning of bourne
  # shell scripts, then convert them not to do this.
  (IFS="$sep";
    sed_hash_bang=true
!   for i in $HAVE; do if [ "$i" != "" ] ; then
  	case "$i" in
  	HAVE_HASH_BANG)	sed_hash_bang=false;;
! 	esac ; fi
    done
    if $sed_hash_bang; then
  	echo '1s|^#! */bin/sh|: /bin/sh|'
diff +context +recursive ./conf/os/bsd4.3 ../smail-3.1.25.new/conf/os/bsd4.3
*** ./conf/os/bsd4.3	Sun Oct 27 08:21:43 1991
--- ../smail-3.1.25.new/conf/os/bsd4.3	Wed Jul 22 02:01:30 1992
***************
*** 18,24 ****
  FLOCK_MAILBOX=yes
  
  # MAILBOX_DIR - in which directory are user mailbox files
! MAILBOX_DIR=/usr/spool/mail
  
  # CONSOLE - name of the console device file
  CONSOLE=/dev/console
--- 18,24 ----
  FLOCK_MAILBOX=yes
  
  # MAILBOX_DIR - in which directory are user mailbox files
! MAILBOX_DIR=/var/mail
  
  # CONSOLE - name of the console device file
  CONSOLE=/dev/console
***************
*** 31,40 ****
  "
  
  # SECURE_PATH - directories containing system-supplied user programs
! SECURE_PATH=/usr/ucb:/bin:/usr/bin
  
  # OSLIBS - name any object libraries containing routines we will need
! OSLIBS=-ldbm
  
  # DRIVER_CONFIGURATION - configuration file describing smail drivers
  DRIVER_CONFIGURATION=bsd-network
--- 31,40 ----
  "
  
  # SECURE_PATH - directories containing system-supplied user programs
! # SECURE_PATH=/usr/ucb:/bin:/usr/bin
  
  # OSLIBS - name any object libraries containing routines we will need
! # OSLIBS=-ldbm
  
  # DRIVER_CONFIGURATION - configuration file describing smail drivers
  DRIVER_CONFIGURATION=bsd-network
***************
*** 43,53 ****
  RANLIB=ranlib
  
  # CHOWN - command to use for accessing the chown program
! CHOWN=/etc/chown
  
  # HAVE - what features should be used with this operating system
  HAVE=RENAME:MKDIR:BSD_NETWORKING:SYSEXITS:DBM:NDBM:BSTRING:SYS5STRLIB
  HAVE=$HAVE:GETOPT:GETHOSTNAME:HASH_BANG:DUP2:READDIR:SETGROUPS:FSYNC
  
  # UUCP_SYSTEM_FILE - path to UUCP file containing remote systems
! UUCP_SYSTEM_FILE=/usr/lib/uucp/L.sys
--- 43,54 ----
  RANLIB=ranlib
  
  # CHOWN - command to use for accessing the chown program
! CHOWN=/usr/sbin/chown
  
  # HAVE - what features should be used with this operating system
  HAVE=RENAME:MKDIR:BSD_NETWORKING:SYSEXITS:DBM:NDBM:BSTRING:SYS5STRLIB
  HAVE=$HAVE:GETOPT:GETHOSTNAME:HASH_BANG:DUP2:READDIR:SETGROUPS:FSYNC
+ HAVE=$HAVE:HDB_UUCP:VFPRINTF
  
  # UUCP_SYSTEM_FILE - path to UUCP file containing remote systems
! UUCP_SYSTEM_FILE=/etc/uucp/sys
diff +context +recursive ./src/lookup.c ../smail-3.1.25.new/src/lookup.c
*** ./src/lookup.c	Mon Oct 28 07:40:28 1991
--- ../smail-3.1.25.new/src/lookup.c	Wed Jul 22 02:01:13 1992
***************
*** 668,674 ****
  	priv->proto = proto;
  	priv->name = name;
  	*db = (char *)priv;
! #ifdef lock_fd_rd_wait
  	if (lock_fd_rd_wait(dbm_pagfno(priv->db)) < 0) {
  	    *error = "database is locked, try again later";
  	    return FILE_AGAIN;
--- 668,674 ----
  	priv->proto = proto;
  	priv->name = name;
  	*db = (char *)priv;
! #ifndef lock_fd_rd_wait
  	if (lock_fd_rd_wait(dbm_pagfno(priv->db)) < 0) {
  	    *error = "database is locked, try again later";
  	    return FILE_AGAIN;
diff +context +recursive ./util/dbm_compat.h ../smail-3.1.25.new/util/dbm_compat.h
*** ./util/dbm_compat.h	Tue Dec 24 04:03:10 1991
--- ../smail-3.1.25.new/util/dbm_compat.h	Wed Jul 22 00:34:40 1992
***************
*** 1,5 ****
  /* @(#)util/dbm_compat.h	1.3 09 Dec 1991 01:37:41 */
! 
  /*
   * dbm_compat.h:
   *	Low-functionality compatibility header for dbm and ndbm.
--- 1,5 ----
  /* @(#)util/dbm_compat.h	1.3 09 Dec 1991 01:37:41 */
! #include <sys/types.h>
  /*
   * dbm_compat.h:
   *	Low-functionality compatibility header for dbm and ndbm.

-- 
He ought to be put in his place | He has a brain | andrew@acwbust.sub.org
Is there a shovel around ? <mr> | but it hasn't reached his head yet. ;->