#!/bin/bash
#
# rc file for automount using a Sun-style "master map".
#

### BEGIN INIT INFO
# Provides:       autofs
# Required-Start: $network $syslog $remote_fs
# Should-Start:   $portmap ypbind keyserv ldap gssd
# Required-Stop:
# Should-Stop:	  
# Default-Start:  3 5
# Default-Stop:
# Description:    Start the autofs daemon for automatic mounting of filesystems.
### END INIT INFO

#
# Location of the automount daemon and the init directory
#
DAEMON=/usr/sbin/automount
prog=`basename $DAEMON`
MODULE="autofs4"
confdir=/etc/sysconfig

test -x $DAEMON || exit 5

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

. /etc/rc.status

#
# load customized configuation settings
#
if [ -r $confdir/autofs ]; then
    . $confdir/autofs
fi

function start() {
	# Make sure autofs4 module is loaded
    if ! grep -q autofs /proc/filesystems; then
	# Try load the autofs4 module fail if we can't
	modprobe -q $MODULE >/dev/null 2>&1
	if [ $? -eq 1 ]; then
	    echo "Error: failed to load autofs4 module."
	    return 1
	fi
    elif ([ -f /proc/modules ] && lsmod) | grep -q autofs[^4]; then
	# wrong autofs filesystem module loaded
	echo
	echo "Error: autofs kernel module is loaded, autofs4 required"
	return 1
    fi

    if [ "$LOCAL_OPTIONS" ]; then
        AUTOFS_OPTIONS="-O $LOCAL_OPTIONS $AUTOFS_OPTIONS"
    fi
    /sbin/startproc $DAEMON $AUTOFS_OPTIONS

    return $?
}

function stop() {
    declare -i count=0
    case "$RUNLEVEL" in
    0|6|s|S)
	for sig in TERM KILL ; do
	    while read type path fs rest ; do
		case "$fs" in
		autofs)
		    /bin/fuser -k -$sig -m $path/* >/dev/null 2>&1
		esac
	    done < /proc/mounts
	    [ $sig = TERM ] && sleep 2
	done
	/sbin/killproc -USR2 $DAEMON
    esac
    while [ $count -lt 15 ] ; do
	/sbin/killproc -t3 -TERM $DAEMON
	RETVAL=$?
	[ $RETVAL -eq 1 ] || break
	: $((count++))
    done

    return $RETVAL
}


RETVAL=0

case "$1" in
    start)
	echo -n "Starting $prog "
	# Check if already running
	if ! /sbin/checkproc $DAEMON; then
	    start
	fi

	rc_status -v
	;;
    stop)
	echo -n "Shutting down $prog "
	stop

	rc_status -v
	;;
    try-restart|condrestart)
	## Do a restart only if the service was active before.
	## Note: try-restart is now part of LSB (as of 1.9).
	## RH has a similar command named condrestart.
	if test "$1" = "condrestart"; then
	    echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
	fi
	$0 status
	if test $? = 0; then
	    $0 restart
	else
	    rc_reset	# Not running is not a failure.
	fi
	# Remember status and be quiet
	rc_status
	;;
    restart)
	$0 stop
	$0 start

	rc_status
	;;
    force-reload)
	echo -n "Reload service $prog "
	/sbin/killproc -HUP $DAEMON
	rc_status -v

	;;
    reload)
	echo -n "Reload service $prog "
	/sbin/killproc -HUP $DAEMON
	rc_status -v

	;;
    status)
	echo -n "Checking for service $prog "
	/sbin/checkproc $DAEMON
	# NOTE: rc_status knows that we called this init script with
	# "status" option and adapts its messages accordingly.
	rc_status -v
	;;
    *)
	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
	exit 1
	;;
esac
rc_exit
