#!/bin/sh
#
# $Id: netfs,v 1.6 2002/04/15 13:50:43 ldv Exp $
#
# 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 function library.
. /etc/init.d/functions

# Source networking configuration.
# Check that networking is up.
SourceIfNotEmpty /etc/sysconfig/network && [ "$NETWORKING" != no ] || exit

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$/) && ($2 != "/")) print $2}'`
SMBMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^smbfs$/ ) print $2}'`
NCPMTAB=`grep -v '^#' /proc/mounts | awk '{ if ($3 ~ /^ncpfs$/ ) print $2}'`

start()
{
	if [ -n "$NFSFSTAB" ]; then
		[ -f /var/lock/subsys/portmap ] ||
			service portmap start
		[ -f /var/lock/subsys/portmap ] &&
			action "Mounting NFS filesystems:" mount -a -t nfs
	fi
	[ -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 noproc,nfs,smbfs,ncpfs
}

stop()
{
	if [ -n "$NFSMTAB" ]; then
		UnmountFilesystems 3 5 \
			'$3 == "nfs" && $2 != "/" {print $2}' \
			"Unmounting NFS filesystem" \
			"Unmounting NFS filesystem (retry)"
	fi
	[ -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
		if [ -n "$NFSFSTAB" ]; then
			echo "Configured NFS mountpoints: "
			for fs in $NFSFSTAB; do echo $fs; done
		fi
		if [ -n "$SMBFSTAB" ]; then
			echo "Configured SMB mountpoints: "
			for fs in $SMBFSTAB; do echo $fs; done
		fi
		if [ -n "$NCPFSTAB" ]; then
			echo "Configured NCP mountpoints: "
			for fs in $NCPFSTAB; do echo $fs; done
		fi
		if [ -n "$NFSMTAB" ]; then
			echo "Active NFS mountpoints: "
			for fs in $NFSMTAB; do echo $fs; done
		fi
		if [ -n "$SMBMTAB" ]; then
			echo "Active SMB mountpoints: "
			for fs in $SMBMTAB; do echo $fs; done
		fi
		if [ -n "$NCPMTAB" ]; then
			echo "Active NCP mountpoints: "
			for fs in $NCPMTAB; do echo $fs; done
		fi
	else
		echo "/proc filesystem unavailable"
	fi
}

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	status)
		status
		;;
	restart)
		stop
		start
		;;
	reload)
		start
		;;
  *)
	echo "Usage: ${0##*/} {start|stop|restart|reload|status}"
	exit 1
esac

exit 0
