#
# usertable: generate rules to rewrite with usertable
#
# (must follow "nosourceroute")

REVISION_ID='@(#)usertable	3.38 (motonori/WIDE) 19 Jul 1998'

#|# domain names and map tables for usertable rewriting
#|##USERTABLE_MAPS='local=hash:/etc/ut.local \
#|##                ut.dom1=btree:/etc/ut.dom1:error \
#|##                ut.dom2=dbm:/etc/ut.dom2 \
#|##                ut.dom3=nis:usertable3'
#|## format: domain_name=map_type:map_path:error_on_no_user_flag
#|# How to make DB: makemap btree /etc/ut.dom1.db < /etc/ut.dom1 (btree)
#|#              or makedbm /etc/ut.dom2 /etc/ut.dom2 (ndbm on SunOS4)
#|# rewrite from/to addresses on local map from user@$j or user@$ACCEPTADDRS
#|# into user@[mailname] (yes/no)
#|#USERTABLE_LOCAL_REWRITE=no
#|#USERTABLE_RECIPIENT_REWRITE=no

if [ "$USERTABLE_DOMAIN_NAME" ]
then
	echo 'usertable: USERTABLE_DOMAIN_NAME is obsolete.' 1>&2
fi
if [ "$USERTABLE_DOMAIN_NAMES" ]
then
	echo 'usertable: USERTABLE_DOMAIN_NAMES is obsolete.' 1>&2
fi
if [ "$USERTABLE_MAILNAME_LOOKUP_ALL" ]
then
	echo 'usertable: USERTABLE_MAILNAME_LOOKUP_ALL is obsolete.' 1>&2
fi

if [ "$USERTABLE_MAPS" ]
then

	if [ "$REVISION_ID_LIST" ]
	then
		REVISION_ID_LIST="$REVISION_ID_LIST\\
# $REVISION_ID"
	else
		REVISION_ID_LIST="# $REVISION_ID"
	fi

	: ${USERTABLE_LOCAL_REWRITE=no}
	: ${USERTABLE_RECIPIENT_REWRITE=no}

	# allocate class character
	_ALLOC_MODE=normal
	_ALLOC_TYPE=class
	_ALLOC_DIR=down
	_ALLOC_PREF=
	_ALLOC_USAGE='domain names for usertable [usertable]'
	. $MASTERDIR/$CHARALLOC
	_UD_CHAR=$_ALLOC_CHAR

	# allocate class character
	_ALLOC_MODE=normal
	_ALLOC_TYPE=class
	_ALLOC_DIR=down
	_ALLOC_PREF=
	_ALLOC_USAGE='unknown user rejecting domain names [usertable]'
	. $MASTERDIR/$CHARALLOC
	_RD_CHAR=$_ALLOC_CHAR

	UTRS1=91
	UTRS2=92
	UTRS3=93

	if [ "$R_S0RTR2" = "" ]
	then
		R_S0RTR2=$R_S0RETRY
	fi

	HDRUSERTABLE='# usertable domain names/maps/unknown user rejectings'
	UTMN_REWRITE='# user name rewriting'
	UTMD_REWRITE='# user name rewriting'

	for UTMAP in $USERTABLE_MAPS
	do

		set `echo $UTMAP | tr '=:' '  '`
		case "$1" in
		    \\)	;;
		    local|localhost|usertable|general)
			HAS_GENERAL_USERTABLE=1

HDRUSERTABLE="$HDRUSERTABLE\\
Kusertable $2 -o $3"
UTMN_REWRITE="$UTMN_REWRITE"'\
R$+			$:$(usertable $1:mailname $: $1 $)\
R$*@$*			$@$1<@$2>			with domain part'
UTMD_REWRITE="$UTMD_REWRITE"'\
R$+			$:$(usertable $1:maildrop $: $1 $)\
R$*@$*			$@$1<@$2>			with domain part'

			if [ "$4" = error ]
			then

HDRUSERTABLE="$HDRUSERTABLE\\
C$_RD_CHAR $1"

			fi

			;;
		    *)
			HAS_DOMAIN_USERTABLE=1
			UTMAPNAME=`echo $1 | tr '._\-' '098'`

HDRUSERTABLE="$HDRUSERTABLE\\
C$_UD_CHAR $1\\
K$UTMAPNAME $2 -o $3"
UT_GETMAP1="$UT_GETMAP1"'\
R$+<@'"$1"'>	$@$('"$UTMAPNAME"' $1:maildrop $: $1@ $)@<@'"$1"'>\
R$+<%'"$1"'>	$@$('"$UTMAPNAME"' *:maildrop $@ $1 $: $1@ $)@<@'"$1"'>\
R$+<!'"$1"'>	$@$('"$UTMAPNAME"' :default:maildrop $@ $1 $: $1@ $)@<@'"$1"'>'
UT_GETMAP2="$UT_GETMAP2"'\
R$+<@'"$1"'>	$@$('"$UTMAPNAME"' $1:mailname $: $1@ $)@<@'"$1"'>'
UT_GETMAP3="$UT_GETMAP3"'\
R$+<@'"$1"'>	$@$('"$UTMAPNAME"' $1:maildrop $: $1@ $)@<@'"$1"'>'

			if [ "$4" = error ]
			then

HDRUSERTABLE="$HDRUSERTABLE\\
C$_RD_CHAR $1"

			fi

			;;
		esac

	done

	case "$CF_FORMAT" in
	V5)

S0USERTABLEMAILDROP='\
# address rewriting\
R$+$=@$+<@$='$_UD_CHAR'>		$@$>'$R_S0RETRY' $1$2$3			retry\
R$+<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<@$2>\
R$+@@<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<%$2>			get default\
R$+@@<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<!$2>			get default\
R$+@@<@$='$_UD_CHAR'>		$:$1<@$2>			found, unmark\
R$+@$+@<@$='$_UD_CHAR'>		$@$>'$R_S0RTR2' $1@$2			retry to fwd\
R$+@<@$='$_UD_CHAR'>		$:$1				not defined\
R$+<@$='$_RD_CHAR'>		$#error$@NOUSER$: "550 User Unknown"'
		;;

	*)

S0USERTABLEMAILDROP='\
# address rewriting\
R$+$=@$+<@$='$_UD_CHAR'>		$@$>'$R_S0RETRY' $1$2$3			retry\
R$+<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<@$2>\
R$+@@<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<%$2>			get default\
R$+@@<@$='$_UD_CHAR'>		$:$>'"$UTRS1"' $1<!$2>			get default\
R$+@@<@$='$_UD_CHAR'>		$:$1<@$2>			found, unmark\
R$+@$+@<@$='$_UD_CHAR'>		$@$>'$R_S0RTR2' $1@$2			retry to fwd\
R$+@<@$='$_UD_CHAR'>		$:$1				not defined\
R$+<@$='$_RD_CHAR'>		$#error$@5.1.1$: User Unknown'
		;;

	esac

	if [ "$HAS_GENERAL_USERTABLE" ]
	then

		if [ "$USERTABLE_LOCAL_REWRITE" != no ]
		then

S11USERTABLEMAILNAME1='\
# user name rewriting\
R$+<@$=w>		$:$(usertable $1:mailname $: $1@ $)@<@$2>\
R$+@@<@$=w>		$:$1<@$2>			unmark unmatches\
R$+@$+@<@$=w>		$@$1<@$2>			rewrite and exit\
R$+@<@$=w>		$:$1<@$2>			unmark'

			if [ "$_AA_CHAR" ]
			then

S11USERTABLEMAILNAME1="$S11USERTABLEMAILNAME1"'\
# user name rewriting\
R$+<@$='$_AA_CHAR'>		$:$(usertable $1:mailname $: $1@ $)@<@$2>\
R$+@@<@$='$_AA_CHAR'>		$:$1<@$2>			unmark unmatches\
R$+@$+@<@$='$_AA_CHAR'>		$@$1<@$2>			rewrite and exit\
R$+@<@$='$_AA_CHAR'>		$:$1<@$2>			unmark'

			fi

		fi

S5USERTABLEMAILDROP='\
# address rewriting\
R$+			$:$(usertable $1:maildrop $: <@>$1 $)\
R<@>$+			$:$(usertable *:maildrop $@ $1 $: <@>$1 $)\
R<@>$+			$:$(usertable :default:maildrop $@ $1 $: $1 $)\
R$+@$+			$@$>'$R_S0RTR2' $1@$2			retry'

		S11USERTABLEMAILNAME2="$UTMN_REWRITE"
		S21USERTABLEMAILNAME2="$UTMN_REWRITE"

#		if [ "$USERTABLE_DROP_REWRITE" != no ]
#		then
#			S11USERTABLEMAILDROP1="$UTMD_REWRITE"
#			S21USERTABLEMAILDROP1="$UTMD_REWRITE"
#		fi

	fi

	if [ "$HAS_DOMAIN_USERTABLE" ]
	then

S11USERTABLEMAILNAME1="$S11USERTABLEMAILNAME1"'\
# user name of specific domain rewriting\
R$+<@$='$_UD_CHAR'>		$:$>'"$UTRS2"' $1<@$2>\
R$+@@<@$='$_UD_CHAR'>		$:$1<@$2>			unmark\
R$+@$+@<@$='$_UD_CHAR'>		$@$1<@$2>			rewrite & exit\
R$+@<@$='$_UD_CHAR'>		$:$1<@$2>			preserve domain'

#		if [ "$USERTABLE_DROP_REWRITE" != no ]
#		then
#
#S21USERTABLEMAILDROP1="$S21USERTABLEMAILDROP1"'\
## user name of specific domain rewriting\
#R$+<@$='$_UD_CHAR'>		$:$>'"$UTRS3"' $1<@$2>\
#R$+@@<@$='$_UD_CHAR'>		$:$1<@$2>			unmark\
#R$+@$+@<@$='$_UD_CHAR'>		$@$1<@$2>			rewrite & exit\
#R$+@<@$='$_UD_CHAR'>		$:$1<@$2>			preserve domain'
#
#		fi

USERTABLEBODY="# user table map switcher\\
S$UTRS1\\
$UT_GETMAP1\\
\\
S$UTRS2\\
$UT_GETMAP2"

#		if [ "$USERTABLE_DROP_REWRITE" != no ]
#		then
#
#USERTABLEBODY="\\
#S$UTRS3\\
#$UT_GETMAP3"
#
#		fi

	fi

	if [ "$USERTABLE_RECIPIENT_REWRITE" != no ]
	then

		S21USERTABLEMAILNAME1="$S11USERTABLEMAILNAME1"

	fi

fi
