#!/bin/bash
#
# netfs         Mount network filesystems.
#
# Authors:	Bill Nottingham <notting@redhat.com>
# 		Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#
# chkconfig: 345 25 75
# description: Mounts and unmounts all Network File System (NFS), \
#	       SMB (Lan Manager/Windows), and NCP (NetWare) mount points.

# Source networking configuration.
if [ ! -f /etc/sysconfig/network ]; then
    exit 0
fi

# Source function library.
. /etc/rc.d/init.d/functions

. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

NFSFSTAB=`grep -v '^#' /etc/fstab | awk '{ if ($3 ~ /^nfs$/ && $4 !~ /noauto/) print $2}'`
SMBFSTAB=`grep -v '^#' /etc/fstab | awk '{ if ($3 ~ /^smbfs$/ && $4 !~ /noauto/) print $2}'`
NCPFSTAB=`grep -v '^#' /etc/fstab | awk '{ if ($3 ~ /^ncpfs$/ && $4 !~ /noauto/) print $2}'`
NFSMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^nfs$/ ) print $2}'`
SMBMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^smbfs$/ ) print $2}'`
NCPMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^ncpfs$/ ) print $2}'`

# See how we were called.
case "$1" in
  start)
        [ -n "$NFSFSTAB" ] && action "Mounting NFS filesystems" mount -a -t nfs
        [ -n "$SMBFSTAB" ] && action "Mounting SMB filesystems" mount -a -t smbfs
        [ -n "$NCPFSTAB" ] && action "Mounting NCP filesystems" mount -a -t ncpfs
	touch /var/lock/subsys/netfs
	action "Mounting other filesystems" mount -a -t nonfs,smbfs,ncpfs
	;;
  stop)
  	[ -n "$NFSMTAB" ] && {
		sig=
		retry=3
		remaining=`awk '!/^#/ && $3 ~ /^nfs/ {print $2}' /proc/mounts`
		while [ -n "$remaining" -a "$retry" -gt 0 ]
		do
			if [ "$retry" -lt 3 ]; then
				action "Unmounting NFS filesystems (retry)" umount -f -a -t nfs
			else
				action "Unmounting NFS filesystems" umount -f -a -t nfs
			fi
			sleep 2
			remaining=`awk '!/^#/ && $3 ~ /^nfs/ {print $2}' /proc/mounts`
			[ -z "$remaining" ] && break
			/sbin/fuser -k -m $sig $remaining >/dev/null
			sleep 5
			retry=$(($retry - 1))
			sig=-9
		done
	}
	[ -n "$SMBMTAB" ] && action "Unmounting SMB filesystems" umount -a -t smbfs
	[ -n "$NCPMTAB" ] && action "Unmounting NCP filesystems" umount -a -t ncpfs
	rm -f /var/lock/subsys/netfs
	;;
  status)
	if [ -f /proc/mounts ] ; then
	        [ -n "$NFSFSTAB" ] && {
		     echo "Configured NFS mountpoints:"
		     for fs in $NFSFSTAB; do echo $fs ; done
		}
	        [ -n "$SMBFSTAB" ] && {
		     echo "Configured SMB mountpoints:"
		     for fs in $SMBFSTAB; do echo $fs ; done
		}
	        [ -n "$NCPFSTAB" ] && {
		     echo "Configured NCP mountpoints:"
		     for fs in $NCPFSTAB; do echo $fs ; done
		}
		[ -n "$NFSMTAB" ] && {
                      echo "Active NFS mountpoints:"
		      for fs in $NFSMTAB; do echo $fs ; done
		}
		[ -n "$SMBMTAB" ] && {
                      echo "Active SMB mountpoints:"
		      for fs in $SMBMTAB; do echo $fs ; done
		}
		[ -n "$NCPMTAB" ] && {
                      echo "Active NCP mountpoints:"
		      for fs in $NCPMTAB; do echo $fs ; done
		}
	else
		echo "/proc filesystem unavailable"
	fi
	;;
  restart)
	$0 stop
	$0 start
	;;
  reload)
        $0 start
	;;
  *)
	echo "Usage: netfs {start|stop|restart|reload|status}"
	exit 1
esac

exit 0