#!/bin/sh
#
# autofs	automatically mounts filesystems when you use them,
#		and unmounts them later when you are not using them.
#
# chkconfig:	2345 72 08
#
# description:	Script for automount using a Sun-style "master map". \
#		We first look for a local /etc/autofs/auto.master, then a YP \
#		map with that name
#
# processname:	autofs
# config:	/etc/autofs/auto.master


# Source function library
. /etc/rc.d/init.d/functions

# Get network config
. /etc/sysconfig/network

# Demon specified configuration.
[ -f /etc/sysconfig/autofs ] && . /etc/sysconfig/autofs

# Check that networking is up.
if is_yes "${NETWORKING}"; then
	if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
		msg_network_down automounter
		exit 1
	fi
else
	exit 0
fi

DAEMON=/usr/sbin/automount

#
#	This function will build a list of automount commands to execute in
#	order #	to activate all the mount points. It is used to figure out
#	the difference of automount points in case of a reload
#
getmounts()
{
#
# Check for local maps to be loaded
#
if [ -f /etc/autofs/auto.master ]; then
	cat /etc/autofs/auto.master | sed -e '/^#/d' -e '/^$/d'| (
	while read dir map options; do
		if [ ! -z "$dir" -a ! -z "$map" -a x`echo "$map" | cut -c1` != 'x-' ]; then
		    :
		else
		    continue
		fi

		maptype=${map%%:*}
		if [ "$maptype" = "$map" ]; then
			map=`echo "/etc/autofs/$map" | sed -e 's:^/etc/autofs//:/:'`
			options=`echo "$options" | sed -e 's/\(^\|[ \t]\)-/\1/g'`
			if [ -x $map ]; then
				echo "$DAEMON --timeout ${TIMEOUT} ${OPTIONS} $dir program $map $options"
			elif [ -f $map ]; then
				echo "$DAEMON --timeout ${TIMEOUT} ${OPTIONS} $dir file $map $options"
			else
				echo "$DAEMON --timeout ${TIMEOUT} ${OPTIONS} $dir `basename $map` $options"
			fi
		else
			map=${map#*/}
			if [ "$map" ]; then
				if [ "$maptype" = "file" ]; then
					map=`echo "/etc/autofs/$map" | sed -e 's:^/etc/autofs//:/:'`
				fi
				echo "$DAEMON --timeout $TIMEOUT ${OPTIONS} $dir $maptype $map $options"
			fi
		fi
	done
	)
fi

#
# Check for YellowPage maps to be loaded
#
if is_yes $USE_YP; then
	if [ -e /usr/bin/ypcat ] && \
	   [ `ypcat -k auto.master 2>/dev/null | wc -l` -gt 0 ]; then
		ypcat -k auto.master | (
		while read dir map options; do
			if [ ! -z "$dir" -a ! -z "$map" \
			   -a x`echo "$map" | cut -c1` != 'x-' ]; then
				map=`echo "$map" | sed -e 's/^auto_/auto./'`
				if echo $options | \
				   grep -- '-t' >/dev/null 2>&1; then
					mountoptions="--timeout $(echo $options | \
					  sed 's/^.*-t\(imeout\)*[ \t]*\([0-9][0-9]*\).*$/\2/g')"
				fi
				options=`echo "$options" | sed -e '
				  s/--*t\(imeout\)*[ \t]*[0-9][0-9]*//g
				  s/\(^\|[ \t]\)-/\1/g'`
				echo "$DAEMON --timeout $TIMEOUT ${OPTIONS} $mountoptions \
				  $dir yp $map $options"
			fi
		done
		)
	fi
fi
}

start() {
	# Check if the service is already running?
	if [ ! -f /var/lock/subsys/autofs ]; then
		msg_starting automounter
		busy
#		getmounts | sh
		$DAEMON --timeout $TIMEOUT /etc/autofs/auto.master
		RETVAL=$?
		[ $RETVAL -eq 0 ] && ok || fail
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/autofs
	else
		msg_already_running automounter
	fi
}

stop() {
	if [ -f /var/lock/subsys/autofs ]; then
		msg_stopping automounter
		killproc automount
		rm -f /var/lock/subsys/autofs >/dev/null 2>&1
	else
		msg_not_running automounter
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|force-reload)
	stop
	start
	;;
#  status)
#	nls "Configured Mount Points:"
#	getmounts
#	echo ""
#	nls "Active Mount Points:"
#	ps axw|grep "[0-9]:[0-9][0-9] /usr/sbin/automount " | (
#		while read pid tt stat time command; do echo $command; done
#	)
#	;;
  *)
	msg_usage "$0 {start|stop|restart|force-reload|status}"
	exit 3
esac

exit $RETVAL
