#!/bin/sh
# Begin /etc/init.d/netfs

### BEGIN INIT INFO
# Provides:            $remote_fs
# Required-Start:      $network
# Should-Start:
# Required-Stop:       $network
# Should-Stop:         
# Default-Start:       3 4 5
# Default-Stop:        0 1 2 6
# Short-Description:   Starts/Stops the Gnome Display Manager (GUI Login). 
# Description:         Starts and stops the Gnome Display Manager.
# X-LFS-Provided-By:   BLFS
### END INIT INFO

. /lib/lsb/init-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.
        MESSAGE="Mounting network volumes..."
        /bin/mount -a -O _netdev
        evaluate_retval generic
    ;;

    stop)
        MESSAGE="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 -af -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 -af -t coda,ncpfs,nfs,smbfs
            if [ $? = 0 ]
            then
                [ -z $NERRVAL ]
                evaluate_retval generic
            else
                # make certain that we return an error
                /bin/false              
                evaluate_retval generic
            fi
        else
            # There is nothing mounted
            MESSAGE="${MESSAGE} No network volumes mounted!"
            /bin/true
            evaluate_retval generic
        fi
    ;;

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

# End /etc/init.d/netfs
