#
# usertable: generate rules to rewrite with usertable
#

REVISION_ID='@(#)usertable	3.17 (motonori/WIDE) 8/19/95'

#|# domain names and map tables for usertable rewriting
#|##USERTABLE_MAPS='local=hash:/etc/ut.local \
#|##                ut.dom1=btree:/etc/ut.dom1 \
#|##                ut.dom2=dbm:/etc/ut.dom2 \
#|##                ut.dom3=nis:usertable3'
#|# 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)
#|# should search all maps to lookup :mailname definition (yes/no)
#|#USERTABLE_MAILNAME_LOOKUP_ALL=yes

if [ "$USERTABLE_MAPS" ]
then

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

	# 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

	UTRS=91
	HDRUSERTABLE='# usertable domain names'
	UT_REWRITE='# user name rewriting'

	: ${USERTABLE_MAILNAME_LOOKUP_ALL=yes}
	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"
UT_REWRITE="$UT_REWRITE"'\
R$+			$:$(usertable $1:mailname $: $1 $)\
R$*@$*			$@$1<@$2>			with domain part'

			;;
		    *)
			UTMAPNAME=`echo $1 | tr '.' '0'`

HDRUSERTABLE="$HDRUSERTABLE\\
C$_UD_CHAR $1\\
K$UTMAPNAME $2 -o $3"
UT_GETMAP="$UT_GETMAP"'\
R$+<@'"$1"'>	$@$('"$UTMAPNAME"' $1:maildrop $: $1@ $)@<@'"$1"'>'

			if [ "$USERTABLE_MAILNAME_LOOKUP_ALL" = "yes" ]
			then

UT_REWRITE="$UT_REWRITE"'\
R$+			$:$('"$UTMAPNAME"' $1:mailname $: $1@ $)<@'"$1"'>\
R$*@<@$+>		$:$1				no match\
R$*@$*<@$+>		$@$1<@$2>			with domain part\
R$*<@$+>		$@$1<@$2>			without domain part'

			fi
			;;
		esac

	done

S0USERTABLEMAILDROP='\
# address rewriting\
R$+$=@$+<@$='$_UD_CHAR'>		$@$>97 $1$2$3			retry\
R$+<@$='$_UD_CHAR'>		$:$>'"$UTRS"' $1<@$2>\
R$+@@<@$='$_UD_CHAR'>		$:$1<@$2>			unmark\
R$+@$+@<@$='$_UD_CHAR'>		$@$>97 $1@$2			retry\
R$+@<@$='$_UD_CHAR'>		$:$1				local\
R$+<@$='$_UD_CHAR'>		$#error$@NOUSER$: 550 User Unknown'

	if [ "$HAS_GENERAL_USERTABLE" ]
	then

S11USERTABLEMAILNAME1='\
# user name rewriting\
R$+<@$j>		$:$(usertable $1:mailname $: $1@ $)<@$j>\
R$+@<@$j>		$@$1<@$j>\
R$+@$+<@$j>		$:$1<@$2>'

S21USERTABLEMAILNAME1='\
# user name rewriting\
R$+<@$j>		$:$(usertable $1:mailname $: $1@ $)<@$j>\
R$+@<@$j>		$@$1<@$j>\
R$+@$+<@$j>		$:$1<@$2>'

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

	fi

	S11USERTABLEMAILNAME2="$UT_REWRITE"
	S21USERTABLEMAILNAME2="$UT_REWRITE"

USERTABLEBODY="# user table map switcher\\
S$UTRS\\
$UT_GETMAP"

fi
