#!/bin/sh
#
# rpcsvcgssd    Start up and shut down RPCSEC GSS daemon
#
# chkconfig: 345 19 69
# description: Starts user-level daemon that manages RPCSEC GSS contexts \
#	       for the NFSv4 server.
#
### BEGIN INIT INFO
# Provides: rpcsvcgssd
# Required-Start: $network rpcidmapd
# Required-Stop: $network rpcidmapd
# Default-Start: 3 4 5
# Short-Description: RPCSEC GSS daemon
# Description: Starts user-level daemon that manages RPCSEC GSS contexts
#	       for the NFSv4 server.
### END INIT INFO

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

# Source networking configuration.
. /etc/sysconfig/network

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

# Check for and source configuration file otherwise set defaults
NAME=rpc.svcgssd
BINARY=$NAME
LOCKFILE=/var/lock/subsys/$NAME
SECURE_NFS_MODS="des rpcsec_gss_krb5"
RPCSVCGSSD_OPTIONS=
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs

start() {
    res=0
    if [ ! -f $LOCKFILE ]; then
	echo -n "Starting $NAME:"

	# Load rpcsec modules
	for mod in $SECURE_NFS_MODS; do 
	     /sbin/modprobe $mod || exit 1
	done

	# don't try to start if the config file is missing
	if ! [ -f /etc/krb5.keytab ]; then
	    echo "Error: /etc/krb5.keytab does not exist."
	    exit 1
	fi

	# Start daemon.
	daemon $BINARY RPCSVCGSSD_OPTIONS
	res=$?
	echo
	[ $res -eq 0 ] && touch $LOCKFILE
    fi
    return $res
}

stop() {
    echo -n "Stopping $NAME:"
    killproc $BINARY
    res=$?
    echo
    [ $res -eq 0 ] && rm -f $LOCKFILE
    return $res
}

reload() {
    echo -n "Reloading $NAME: "
    killproc $BINARY -HUP
    res=$?
    echo
    return $res
}


case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    status)
	status $BINARY
	;;
    reload)
	reload
	;;
    restart)
	stop
	start
	;;
    condrestart)
	if [ -f $LOCKFILE ]; then
	    stop
	    start
	fi
	;;
    *)
	echo "Usage: $0 {start|stop|status|reload|restart|condrestart}"
	exit 1
	;;
esac

exit $?
