#! /bin/sh
# Copyright (c) 2002, The EROS Group, LLC and Johns Hopkins
# University. All rights reserved.
# 
# This software was developed to support the EROS secure operating
# system project (http://www.eros-os.org). The latest version of
# the OpenCM software can be found at http://www.opencm.org.
# 
# Redistribution and use in source and binary forms, with or
# without modification, are permitted provided that the following
# conditions are met:
# 
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 
# 2. Redistributions in binary form must reproduce the above
#    copyright notice, this list of conditions and the following
#    disclaimer in the documentation and/or other materials
#    provided with the distribution.
# 
# 3. Neither the name of the The EROS Group, LLC nor the name of
#    Johns Hopkins University, nor the names of its contributors
#    may be used to endorse or promote products derived from this
#    software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

#
# opencm	Start/Stop OpenCM server
#
# chkconfig: - 35 65 65
# description: A configuration managment system. See http://www.opencm.org for details

# processname: opencm
# pidfile: /var/run/opencm.pid
# config: /etc/opencm.conf

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

# Get config.
. /etc/sysconfig/network

# Get config, or quit
if [ -f /etc/opencm.conf ]
then
    . /etc/opencm.conf
else
    exit 0
fi

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

# Make sure the binary is there
if [ ! -x /usr/bin/cm ]
then
    exit 0
fi

# Is there a repository to use?
if [ "${OPENCM_REPOSITORY}" = "" ]
then
    exit 0
fi

if [ "${OPENCM_NOTIFY}" = "" ]
then
    OPENCM_NOTIFY="/dev/null"
fi

if [ "${OPENCM_LOGDIR}" != "" ]
then
    
    if [ ! -d ${OPENCM_LOGDIR} ]
    then
	mkdir ${OPENCM_LOGDIR}
	touch ${OPENCM_LOGDIR}/error_log
	touch ${OPENCM_LOGDIR}/access_log
	touch ${OPENCM_LOGDIR}/trace_log

	chown opencm ${OPENCM_LOGDIR} ${OPENCM_LOGDIR}/*
        chgrp opencm ${OPENCM_LOGDIR} ${OPENCM_LOGDIR}/*
    fi

    OPENCM_LOGOPT="--logdir ${OPENCM_LOGDIR}"
fi

RETVAL=0
prog="opencm"

start() {
        echo -n $"Starting $prog: "
        daemon --user opencm cm ${OPENCM_LOGOPT} --notify "${OPENCM_NOTIFY}" server "${OPENCM_REPOSITORY}"
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/opencm
	return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: " 
        killproc cm
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/opencm
	return $RETVAL
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
	status opencm
	;;
  restart|reload)
	stop
	sleep 2
	start
	;;
  condrestart)
	if [ -f /var/lock/subsys/opencm ]; then
            stop
            start
        fi
	;;
  *)
	echo  $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
	exit 1
esac

exit $RETVAL
