#!/bin/sh
#
# 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 NFS, SMB, CIFS and NCP mount points.

WITHOUT_RC_COMPAT=1

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

# Source networking configuration.
# Check that networking is up.
SourceIfNotEmpty /etc/sysconfig/network || exit 1

LOCKFILE=/var/lock/subsys/netfs

NFSFSTAB=`grep -vs '^#' /etc/fstab |awk '($3 == "nfs" || $3 == "nfs4") && ($4 !~ /noauto/) {print $2}'`
SMBFSTAB=`grep -vs '^#' /etc/fstab |awk '($3 == "smbfs" || $3 == "cifs") && ($4 !~ /noauto/) {print $2}'`
NCPFSTAB=`grep -vs '^#' /etc/fstab |awk '($3 == "ncp" || $3 == "ncpfs") && ($4 !~ /noauto/) {print $2}'`
PANFSTAB=`grep -vs '^#' /etc/fstab |awk '($3 == "panfs") && ($4 !~ /noauto/) {print $2}'`

NFSMTAB=`grep -vs '^#' /proc/mounts |awk '($3 == "nfs" || $3 == "nfs4") && ($2 != "/") {print $2}'`
SMBMTAB=`grep -vs '^#' /proc/mounts |awk '($3 == "smbfs" || $3 == "cifs") && ($2 != "/") {print $2}'`
NCPMTAB=`grep -vs '^#' /proc/mounts |awk '($3 == "ncp" || $3 == "ncpfs") && ($2 != "/") {print $2}'`
PANMTAB=`grep -vs '^#' /proc/mounts |awk '($3 == "panfs") && ($2 != "/") {print $2}'`

start()
{
	is_yes "$NETWORKING" || return 0

	[ -z "$NFSFSTAB" ] ||
		action "Mounting NFS filesystems:" mount -a -t nfs,nfs4
	[ -z "$SMBFSTAB" ] ||
		action "Mounting Samba filesystems:" mount -a -t smbfs,cifs
	[ -z "$NCPFSTAB" ] ||
		action "Mounting NCP filesystems:" mount -a -t ncp,ncpfs
	[ -z "$PANFSTAB" ] ||
		action "Mounting panfs filesystems:" mount -a -t panfs

	touch "$LOCKFILE"
}

stop()
{
	if [ -n "$NFSMTAB" ]; then
		UnmountFilesystems 3 5 \
			'($3 == "nfs" || $3 == "nfs4") && ($2 != "/") {print $2}' \
			"Unmounting NFS filesystem" \
			"Unmounting NFS filesystem (retry)"
	fi

	if [ -n "$SMBMTAB" ]; then
		UnmountFilesystems 3 5 \
			'($3 == "smbfs" || $3 == "cifs") && ($2 != "/") {print $2}' \
			"Unmounting Samba filesystem" \
			"Unmounting Samba filesystem (retry)"
	fi

	if [ -n "$NCPMTAB" ]; then
		UnmountFilesystems 3 5 \
			'($3 == "ncp" || $3 == "ncpfs") && ($2 != "/") {print $2}' \
			"Unmounting NCP filesystem" \
			"Unmounting NCP filesystem (retry)"
	fi

	if [ -n "$PANMTAB" ]; then
		UnmountFilesystems 3 5 \
			'($3 == "panfs") && ($2 != "/") {print $2}' \
			"Unmounting panfs filesystem" \
			"Unmounting panfs filesystem (retry)"
	fi

	rm -f "$LOCKFILE"
}

status()
{
	if [ -f /proc/mounts ]; then
		local fs
		if [ -n "$NFSFSTAB" ]; then
			echo "Configured NFS mountpoints: "
			for fs in $NFSFSTAB; do echo $fs; done
		fi
		if [ -n "$SMBFSTAB" ]; then
			echo "Configured Samba 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 "$PANFSTAB" ]; then
			echo "Configured panfs mountpoints: "
			for fs in $PANFSTAB; 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 Samba 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
		if [ -n "$PANMTAB" ]; then
			echo "Active panfs mountpoints: "
			for fs in $PANMTAB; 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
		;;
  *)
	msg_usage "${0##*/} {start|stop|restart|reload|status}"
	exit 1
esac

exit 0
