#!/bin/sh
# Tripwire Event Generator
#
# chkconfig: 2345 89 1
# description: Event Generator service which reads events from the Driver.
# processname: tesvc
# pidfile: /var/run/tesvc.pid
#

### BEGIN INIT INFO
# Provides: tw-eg-service
# Required-Start:
# Should-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Tripwire Event Generator
# Description: Event Generator service which reads events from the Driver.
### END INIT INFO

NAME=tesvc
SERVICE="Tripwire Event Generator"

# the three following values are edited by the postinstall script if the install is relocated
OPT_DIR="/opt/tripwire"
VAR_DIR="/var"
ETC_DIR="/etc/tripwire"

EG_DIR="${OPT_DIR}/event-generator/service"
DAEMON="${EG_DIR}/${NAME}"
LOGFILE="${VAR_DIR}/log/tripwire/tesvc.log"
# PID_FILE="${VAR_DIR}/run/tesvc.pid"
PID_FILE=/var/run/tesvc.pid

TWNOTIFY=twnotify
RETVAL=0

set_SUSE_locale_environment()
{
    # /etc/sysconfig/language contains all locale settings on SUSE
    # all locale variables in the "language" have format "RC_..."
    # source the file and update the locale settings
    . /etc/sysconfig/language
    # Restore system language environment
    if [ "X$ROOT_USES_LANG" != "Xno" ] ; then
        locale_vars="     \
        LANG              \
        LC_CTYPE          \
        LC_NUMERIC        \
        LC_TIME           \
        LC_COLLATE        \
        LC_MONETARY       \
        LC_MESSAGES       \
        LC_PAPER          \
        LC_NAME           \
        LC_ADDRESS        \
        LC_TELEPHONE      \
        LC_MEASUREMENT    \
        LC_IDENTIFICATION \
        LC_ALL"


        unset LC_ALL
        for lc in $locale_vars
        do
            eval val="\$RC_$lc"
            if test -n "$val"; then
                eval $lc="\$RC_$lc"
                export $lc
            fi
        done
        unset lc val
         
        # LC_CTYPE needs to be set to if ROOT_USES_LANG = ctype
        if [ "X$ROOT_USES_LANG" = "Xctype" -a -n "${LANG}" ] ; then
            LC_CTYPE="${LANG}"
            export LC_CTYPE
        fi
    fi

    # Make sure LC_CTYPE is set
    # LC_CTYPE needs a value, so mblrlen() etc. will work properly
    # under multibyte character encodings.
    if [ -z "${LC_CTYPE}" -a -n "${LANG}" ]; then
        LC_CTYPE="${LANG}"
        export LC_CTYPE
    fi

}

set_RHEL_locale_environment()
{
    # /etc/sysconfig/i18n contains all locale settings on REDHAT (in particular LANG variable)
    if [ -s "/etc/sysconfig/i18n" ]; then
        . /etc/sysconfig/i18n
    fi
}

if [ -f /lib/lsb/init-functions ]; then
    . /lib/lsb/init-functions
    if grep -Rqs "SUSE" /etc/*release; then
        set_SUSE_locale_environment
    elif grep -Rqs "Red Hat" /etc/*release || grep -Rqs "CentOS" /etc/*release; then 
        set_RHEL_locale_environment
    fi

    alias START_DAEMON=start_daemon
    alias STATUS=pidofproc_status
    alias LOG_SUCCESS=log_success_msg
    alias LOG_FAILURE=log_failure_msg
    alias LOG_WARNING=log_warning_msg
elif [ -f /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions

    if grep -Rqs "Red Hat" /etc/*release || grep -Rqs "CentOS" /etc/*release; then
        set_RHEL_locale_environment
    fi

    alias START_DAEMON=daemon
    alias STATUS=status
    alias LOG_SUCCESS=success
    alias LOG_FAILURE=failure
    alias LOG_WARNING=passed
else
    echo "Error: Your platform is not supported by $0" > /dev/stderr
    exit 1
fi

if [ ! -x "${DAEMON}" ]; then
    LOG_FAILURE "Error: ${DAEMON} is not executable"
    exit 1
fi

pidofproc_status() {
    pidofproc -p "${PID_FILE}" "${NAME}" 2>&1 > /dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        LOG_SUCCESS "${NAME} is running"
    else
        LOG_SUCCESS "${NAME} is not running"
    fi
    return $RETVAL
}

createPseudoDevice() {
    if [ ! -c "/dev/$TWNOTIFY" ]; then
        mknod "/dev/$TWNOTIFY" c 32 0
        chmod 600 "/dev/$TWNOTIFY"
    fi
}

removePseudoDevice() {
    if [ -c "/dev/$TWNOTIFY" ]; then
        rm -f "/dev/$TWNOTIFY"
    fi
}

case "$1" in
    start)
        echo -n "Starting $SERVICE ..."
        createPseudoDevice
        "${OPT_DIR}/event-generator/driver/tw-eg-driver-loader.sh" load "${OPT_DIR}/event-generator/driver" >> "${LOGFILE}" 2>&1
        START_DAEMON "${DAEMON}" -logfile "${LOGFILE}"
        RETVAL=$?
        echo
        ;;
    stop)
        echo -n "Stopping $SERVICE daemon: "
        killproc -p "${PID_FILE}" "${NAME}"
        RETVAL=$?
        rm -f "${PID_FILE}"
        removePseudoDevice
        echo
        ;;
    status)
        STATUS "${NAME}"
        RETVAL=$?
        ;;
    restart)
        "$0" stop
        "$0" start
        RETVAL=$?
        ;;
    *)
        echo "Usage: $(basename "$0") {start|stop|status|restart}"
        exit 1
        ;;
esac

exit ${RETVAL}

