#!/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_no "${NETWORKING}"; then
        # nls "ERROR: Networking is down. %s can't be run." <service>
        msg_network_down automounter
        exit 1
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
		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 $dir program $map $options"
		elif [ -f $map ]; then
		    echo "$DAEMON --timeout $TIMEOUT $dir file $map $options"
		else
		    echo "$DAEMON --timeout $TIMEOUT $dir `basename $map` $options"
		fi
	    fi
	done
    )
fi

#
# Check for YellowPage maps to be loaded
#
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 $mountoptions $dir yp $map $options"
	    fi
	done
    )
fi
}

#
#	See how we were called.
#
case "$1" in
  start)
	# Check if the service is already running?
	if [ ! -f /var/lock/subsys/autofs ]; then
                msg_starting automounter
		busy
		if getmounts | sh; then
		    deltext;ok
		else
		    deltext;ok
		fi
                RETVAL=$?
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/autofs
	else
                msg_already_running automounter
		exit 1
	fi
	;;
  stop)
        if [ -f /var/lock/subsys/autofs ]; then
                msg_stopping automount -TERM
                killproc automount
                rm -f /var/lock/subsys/autofs >/dev/null 2>&1
        else
                msg_not_running automounter
                exit 1
        fi
	;;
  restart|reload)
	$0 stop
	$0 start
	;;
  status)
	echo "Configured Mount Points:"
	getmounts
	echo ""
	echo "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|reload|status}"
	exit 1
esac

exit $RETVAL
