Blob Blame History Raw
#!/bin/bash
#
# rpcgssd       Start up and shut down RPCSEC GSS daemon
#
# chkconfig: 345 19 85
# description: Starts user-level daemon that manages RPCSEC GSS contexts \
#	       for the NFS client.

### BEGIN INIT INFO
# Provides: rpcgssd
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts the RPCSEC GSS client daemon
# Description: NFS is a popular protocol for file sharing across \
#          networks. This deamon manages RPCSEC GSS contexts on the
#          client used by secure NFS mounts
### END INIT INFO

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

# Source networking configuration.
[ -f /etc/sysconfig/network ]&&  . /etc/sysconfig/network

# Check for and source configuration file otherwise set defaults
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs

# Try to use machine credentials by default
RETVAL=0
uid=`id | cut -d\( -f1 | cut -d= -f2`

prog="rpc.gssd"
LOCKFILE=/var/lock/subsys/$prog

case "$1" in
  start|condstart)
	# Check that networking is up.
	[ "${NETWORKING}" != "yes" ] && exit 6
	[ ! -x /usr/sbin/rpc.gssd ] && exit 5
	# Only root can start the service
	[ $uid -ne 0 ] && exit 4

	# Make sure the daemon is not already running.
	if status $prog > /dev/null ; then
		exit 0
	fi

	# During condstart need to check again to see 
	# if we are configured to start
	[ "${SECURE_NFS}" != "yes" ] && exit 6

	rm -f $LOCKFILE
	echo -n $"Starting RPC gssd: "

	# List of kernel modules to load
	[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"

	# Make sure the rpc_pipefs filesystem is available
	[ "${RPCMTAB}" != "noload" ] && {
		RPCMTAB=`grep -v '^#' /proc/mounts | \
			awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'`
		[ -z "${RPCMTAB}" ] && {
			[ -x /sbin/lsmod -a -x /sbin/modprobe ] && {
				if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
				 	/sbin/modprobe sunrpc
				fi
			}
			RPCMTAB=`grep -v '^#' /proc/mounts | \
				awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'`
			[ -z "${RPCMTAB}" ] && { \
				echo "Error: RPC MTAB does not exist."
				exit 6
			}
		}
	}
	[ "${SECURE_NFS_MODS}" != "noload" ] && {
		[ -x /sbin/lsmod -a -x /sbin/modprobe ] && {
			for i in ${SECURE_NFS_MODS}; do 
				if ! /sbin/lsmod | grep $i > /dev/null ;  then
				 	/sbin/modprobe $i || {
						echo "Error: Unable to load '$i' security module."
						exit 6;
					}
				fi
			done
		}
	}

	# Start daemon.
	daemon $prog ${RPCGSSDARGS}
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch $LOCKFILE
	;;
  stop)
	# Just exit if not configured
	[ "${SECURE_NFS}" != "yes" ] && exit 6

	# Only root can stop the service
	[ $uid -ne 0 ] && exit 4

	# Stop daemon.
	echo -n $"Stopping RPC gssd: "
	killproc $prog
	RETVAL=$?
	echo
	rm -f $LOCKFILE
	;;
  status)
	status rpc.gssd
	RETVAL=$?
	;;
  restart|reload|force-reload)
	$0 stop
	$0 start
	RETVAL=$?
	;;
  condrestart|try-restart)
	if [ -f $LOCKFILE ]; then
		$0 restart
		RETVAL=$?
	fi
	;;
  condstop)
	if [ -f $LOCKFILE ]; then
		$0 stop
		RETVAL=$?
	fi
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|force-reload|condstart|condrestart|try-restart|status|condstop}"
	RETVAL=2
	;;
esac

exit $RETVAL