#!/bin/bash
# Begin $rc_base/init.d/netfs

# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten by Gerard Beekmans  - gerard@linuxfromscratch.org
# netfs script written by Nathan Coulson - conathan@conet.dyndns.org
# and by DJ Lucas - dj@lucasit.com

#$LastChangedBy: bdubbs $
#$Date: 2006-04-11 02:14:41 -0500 (Tue, 11 Apr 2006) $

. /etc/sysconfig/rc
. $rc_functions

case "$1" in
	start)
		# The following line mounts all entries in fstab that
		# have the _netdev option.  This is required for network
		# filesystems to be mounted at boot time.
		boot_mesg "Mounting network volumes..."
		/bin/mount -a -O _netdev
		evaluate_retval
		;;

	stop)
		boot_mesg -n "Unmounting network volumes..."

		# The following line obtains a list from the output of
		# mount for all netfs types and anything that was
		# mounted with the _netdev option.
		NETMOUNTS=`/bin/mount \
			| /bin/grep '_netdev\|smbfs\|ncpfs\|coda\|nfs' \
			| /usr/bin/cut -d " " -f 3 | /bin/sed ':a;$!N;s/\n/ /;ta'`

		# Check to see if anything was listed from above
		# (see if anything is actually needs to be unmounted)
		if [ x"$NETMOUNTS" != x ]
		then
			# There is something mounted
			# terminate the echo -n above
			echo ""

			# Try and stop processes the nice way
			# (probably won't work in most cases)
			/bin/fuser -SIGTERM -km $NETMOUNTS > /dev/null

			# Check and see if it found anything.  If it
			# did, then give 3 seconds for things to exit
			# the nice way before killing them off.
			# This one will work all of the time!
			if [ $? = 0 ]
			then
				/bin/sleep 3
				/bin/fuser -km $NETMOUNTS > /dev/null
			fi

			# We now need to unmount all network filesystems.
			# We will do this with two umount commands to allow
			# for broken behavior of smbmount, and also to make
			# certain that netmounts without the _netdev option
			# will still get unmounted.
			/bin/umount -a -O _netdev
			# save the retval
			if [ $? != 0 ]
			then
				NERRVAL=1
			fi

			# Now catch the rest of the network filesystems
			# by fstype.  This list can be extended later as
			# more network filesystems are supported by mount.
			/bin/umount -a -t coda,ncpfs,nfs,smbfs
			if [ $? = 0 ]
			then
				[ -z $NERRVAL ]
				evaluate_retval
			else
				# make certain that we return an error
				/bin/false              
				evaluate_retval
			fi
		else
			# There is nothing mounted
			boot_mesg "No network volumes mounted!"
			# print a nice '[  OK  ]' message
			echo_ok
		fi
		;;

*)
                echo "Usage: $0 {start|stop}"
                exit 1
                ;;
esac

# End $rc_base/init.d/netfs
