#! /bin/sh
#
# afs-server	Start/Stop the OpenAFS server
# 
# chkconfig: 345 59 21
# description:  OpenAFS is a distributed filesystem.

. /etc/rc.d/init.d/functions

SYSCNF=/etc/sysconfig/afs
[ -f $SYSCNF ] && . $SYSCNF

on_network() {
    ADDRS=`LANG=C ifconfig -a | grep 'inet addr' | grep -v 127.0.0.1 | wc -l`
    if [ "$ADDRS" = "" ]; then
	echo afs: No interfaces with IP address 1>&2
	return 1
    elif [ $ADDRS = 0 ]; then
	echo afs: No interfaces with IP address 1>&2
	return 1
    fi
    return 0
}

rhstatus() {
    status bosserver
    RETVAL=$?
}

RETVAL=0

case "$1" in 
    start)
	echo -n "Starting AFS server..... "
	rhstatus >/dev/null 2>&1
	if [ $RETVAL -ne  0 ]; then
	    on_network || {
		echo -n "no network"
		failure
		echo
		exit 1
	    }
	    /usr/afs/bin/bosserver && {
		touch /var/lock/subsys/afs-server
		RETVAL=0
		success
		echo
	    } || {
		RETVAL=$?
		failure
		echo
	    }
	else
	    echo -n "already running"
	    RETVAL=1
	    failure
	    echo
	fi
	;;

    stop)
	echo -n "Stopping AFS server..... "
	rhstatus >/dev/null 2>&1
	if [ $RETVAL -eq 0 ]; then
  	    # Stop AFS
	    /usr/bin/bos shutdown localhost -localauth -wait
	    RETVAL=$?
	    killall -HUP bosserver

	    [ $RETVAL -eq 0 ] && success || failure
	    echo
	else
	    echo -n "not running"
	    failure
	    echo
	    RETVAL=1
	fi
	rm -f /var/lock/subsys/afs-server
	;;

    status)
	rhstatus
	;;

    restart)
	# Restart AFS
	$0 stop
	$0 start
	;;

    condrestart)
        [ -f /var/lock/subsys/afs-server ] && restart || :
        ;;

  *)
	echo Usage: 'afs <start|stop|status|restart|condrestart>'
	RETVAL=1

esac

exit $RETVAL
