#!/bin/bash
########################################################################
# Begin autofs
#
# Description : Start daemon for automounting file systems
#
# Author      : Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS 7.2
#
# Notes       : Updates to autofs distributed start script to make
#               compatible with BLFS
#
########################################################################

### BEGIN INIT INFO
# Provides: autofs
# Required-Start: $network ypbind
# Required-Stop: $network ypbind
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Automounts filesystems on demand
# Description: Automounts filesystems on demand
### END INIT INFO

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

test -e $DAEMON || exit 0

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

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

. /lib/lsb/init-functions

function start() {
   log_info_msg "Starting $prog: "

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

   # Check misc device
   if [ -n "$USE_MISC_DEVICE" -a "x$USE_MISC_DEVICE" = "xyes" ]; then
      sleep 1
      if [ -e "/proc/misc" ]; then
         MINOR=`awk "/$DEVICE/ {print \\$1}" /proc/misc`
         if [ -n "$MINOR" -a ! -c "/dev/$DEVICE" ]; then
            mknod -m 0600 /dev/$DEVICE c 10 $MINOR
         fi
      fi
      if [ -x /sbin/restorecon -a -c /dev/$DEVICE ]; then
         /sbin/restorecon /dev/$DEVICE
      fi
   else
      if [ -c /dev/$DEVICE ]; then
         rm /dev/$DEVICE
      fi
   fi

   $prog $OPTIONS 
   evaluate_retval
}

function stop() {
   log_info_msg $"Stopping $prog: "
   count=0
   while [ -n "`pidof $prog`" -a $count -lt 15 ] ; do
      killall -TERM $prog >& /dev/null
      RETVAL=$?
      [ $RETVAL = 0 -a -z "`pidof $prog`" ] || sleep 3
      count=`expr $count + 1`
   done
   if [ -z "`pidof $prog`" ] ; then
      log_success_msg2
   else
      log_failure_msg2
   fi
   return $RETVAL
}

function restart() {
   stop
   start
}

function reload() {
   pid=`pidof $prog`
   if [ -z $pid ]; then
      log_failure_msg2 $"$prog not running"
      RETVAL=1
   else
      kill -HUP $pid 2> /dev/null
      log_success_msg2 $"Reloading maps"
      RETVAL=0
   fi
   return $RETVAL
}

RETVAL=0

case "$1" in
   start)
      start
      ;;
   forcestart)
      OPTIONS="$OPTIONS --force"
      start
      ;;
   stop)
      stop
      ;;
   restart)
      restart
      ;;
   forcerestart)
      OPTIONS="$OPTIONS --force"
      restart
      ;;
   reload)
      reload
      ;;
   *)
      echo $"Usage: $0 {start|forcestart|stop|restart|forcerestart|reload}"
      exit 1;
      ;;
esac

exit $?