#
# alias: generate hostname alias rewriting rules
#

REVISION_ID='@(#)alias	3.16 (motonori/WIDE) 22 Sep 1998'

#|# hostname alias file (set path of alias file)
#|#ADDRESS_ALIAS_FILE=

# if something is defined
if [ "$ADDRESS_ALIAS_FILE" ]
then

	# preserve current argument vector
	ARVG="$@"

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

S0ALIASRULE='\
# envelope alias rewriting\
#R$*<@$*ALIAS_NAME>$*	$:$1<@$2REAL_NAME>$3\
#R$*<@$+ALIAS_NAME>$*	$:$1<@REAL_NAME>$3\
#R$*<@ALIAS_NAME>$*	$:$1<@REAL_NAME>$2'

ALIASRULE='\
# header/envelope alias rewriting\
#R$*<@$*ALIAS_NAME>$*	$:$1<@$2REAL_NAME>$3\
#R$*<@$+ALIAS_NAME>$*	$:$1<@REAL_NAME>$3\
#R$*<@ALIAS_NAME>$*	$:$1<@REAL_NAME>$2'

	# if ADDRESS_ALIAS_FILE exists
	if [ -f $ADDRESS_ALIAS_FILE ]
	then

		_ALLOC_TYPE=class
		_ALLOC_DIR=up
		_ALLOC_USAGE='match pattern [alias]'

		# parse ALIAS_FILE
		exec < $ADDRESS_ALIAS_FILE
		while read LINE
		do
			case "$LINE" in
			'') ;;  # skip
			\#*) ;; # skip
			*)
#				set $LINE
				eval "set `echo $LINE`"

				# the first chars are:
				#  E(envelope only)
				#  B(both header&envelope).
				case "$1" in

				V*)	# version number
shift
REVISION_ID_LIST="$REVISION_ID_LIST\\
# $*" ;;

				L*)	# localhack rewriting
					case "$2" in
					\**|+*)	_A2=`expr $2 : '.\(.*\)'` ;;
					*)	_A2=$2 ;;
					esac
					case "$4" in
					=)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='='"$CHAR$_A2"
						;;
					\!|\~)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='\~'"$CHAR$_A2"
						;;
					*)
						_A2=$2
						;;
					esac
					case "$2" in 
					\*\.*)	# for safty (hmm...)
						case "$3" in
						\.*)
LOCALHACK_ALIAS="$LOCALHACK_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
						*)
LOCALHACK_ALIAS="$LOCALHACK_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2.'"$3"'>$3' ;;
						esac ;;
					\**)	# with wildcard "*"
LOCALHACK_ALIAS="$LOCALHACK_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
					+*)	# with wildcard "+"
LOCALHACK_ALIAS="$LOCALHACK_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@'"$3"'>$3' ;;
					*)	# without wildcard
LOCALHACK_ALIAS="$LOCALHACK_ALIAS"'\
R$*<@'"$_A2"'>$*		$:$1<@'"$3"'>$2' ;;
					esac ;;

				A*)	# another address rewriting
					case "$2" in
					\**|+*)	_A2=`expr $2 : '.\(.*\)'` ;;
					*)	_A2=$2 ;;
					esac
					case "$4" in
					=)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='='"$CHAR$_A2"
						;;
					\!|\~)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='\~'"$CHAR$_A2"
						;;
					*)
						_A2=$2
						;;
					esac
					case "$2" in 
					\*\.*)	# for safty (hmm...)
						case "$3" in
						\.*)
AADDR_ALIAS="$AADDR_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
						*)
AADDR_ALIAS="$AADDR_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2.'"$3"'>$3' ;;
						esac ;;
					\**)	# with wildcard "*"
AADDR_ALIAS="$AADDR_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
					+*)	# with wildcard "+"
AADDR_ALIAS="$AADDR_ALIAS"'\
R$*<@$'"$_A2"'>$*		$:$1<@'"$3"'>$3' ;;
					*)	# without wildcard
AADDR_ALIAS="$AADDR_ALIAS"'\
R$*<@'"$_A2"'>$*		$:$1<@'"$3"'>$2' ;;
					esac ;;

				S*)	# sender header/envelope rewriting
					case "$2" in
					\**|+*)	_A2=`expr $2 : '.\(.*\)'` ;;
					*)	_A2=$2 ;;
					esac
					case "$4" in
					=)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='='"$CHAR$_A2"
						;;
					\!|\~)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='\~'"$CHAR$_A2"
						;;
					*)
						_A2=$2
						;;
					esac
					case "$2" in 
					\*\.*)	# for safty (hmm...)
						case "$3" in
						\.*)
S1ALIASRULE="$S1ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
						*)
S1ALIASRULE="$S1ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2.'"$3"'>$3' ;;
						esac ;;
					\**)	# with wildcard "*"
S1ALIASRULE="$S1ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
					+*)	# with wildcard "+"
S1ALIASRULE="$S1ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@'"$3"'>$3' ;;
					*)	# without wildcard
S1ALIASRULE="$S1ALIASRULE"'\
R$*<@'"$_A2"'>$*		$:$1<@'"$3"'>$2' ;;
					esac ;;

				E*)	# envelope only rewriting
					case "$2" in
					\**|+*)	_A2=`expr $2 : '.\(.*\)'` ;;
					*)	_A2=$2 ;;
					esac
					case "$4" in
					=)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='='"$CHAR$_A2"
						;;
					\!|\~)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='\~'"$CHAR$_A2"
						;;
					*)
						_A2=$2
						;;
					esac
					case "$2" in 
					\*\.*)	# for safty (hmm...)
						case "$3" in
						\.*)
S0ALIASRULE="$S0ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
						*)
S0ALIASRULE="$S0ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2.'"$3"'>$3' ;;
						esac ;;
					\**)	# with wildcard "*"
S0ALIASRULE="$S0ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
					+*)	# with wildcard "+"
S0ALIASRULE="$S0ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@'"$3"'>$3' ;;
					*)	# without wildcard
S0ALIASRULE="$S0ALIASRULE"'\
R$*<@'"$_A2"'>$*		$:$1<@'"$3"'>$2' ;;
					esac ;;

				B*)	# header/envelope rewriting
					case "$2" in
					\**|+*)	_A2=`expr $2 : '.\(.*\)'` ;;
					*)	_A2=$2 ;;
					esac
					case "$4" in
					=)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='='"$CHAR$_A2"
						;;
					\!|\~)
						# allocate class character
						. $MASTERDIR/$CHARALLOC
						CHAR=$_ALLOC_CHAR
						_A2='\~'"$CHAR$_A2"
						;;
					*)
						_A2=$2
						;;
					esac
					case "$2" in 
					\*\.*)	# for safety (hmm...)
						case "$3" in
						\.*)
ALIASRULE="$ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
						*)
ALIASRULE="$ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2.'"$3"'>$3' ;;
						esac ;;
					\**)	# with wildcard "*"
ALIASRULE="$ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@$2'"$3"'>$3' ;;
					+*)	# with wildcard "+"
ALIASRULE="$ALIASRULE"'\
R$*<@$'"$_A2"'>$*		$:$1<@'"$3"'>$3' ;;
					*)	# without wildcard
ALIASRULE="$ALIASRULE"'\
R$*<@'"$_A2"'>$*		$:$1<@'"$3"'>$2' ;;
					esac ;;

				P*)	# Pattern description line
					if [ "$CHAR" = "" ]
					then
echo "alias: P record should follow E/B record with =/!,~." 1>&2
					fi
					if [ "$HDRALIAS" = "" ]
					then

HDRALIAS='\
# alias matching pattern definition\
#CEhost1 host2 host3'

					fi
					case "$2" in
					/*|-*)	# use file class
shift
HDRALIAS="$HDRALIAS\\
F$CHAR$*" ;;
                                        *)	# define a member of the class
						# in config file
shift
HDRALIAS="$HDRALIAS\\
C$CHAR $*" ;;
					esac ;;

				*) ;;	# other lines should be comment lines
				esac ;;
			esac
		done
		# end of ADDRESS_ALIAS_FILE parsing

	else
	# if ADDRESS_ALIAS_FILE is not found.
		echo "alias: $ADDRESS_ALIAS_FILE not found." 1>&2
	fi

	# recover argument vector
	set "$ARGV"

fi
