+#!/bin/bash
+#
+# ntpd This shell script takes care of starting and stopping
+# trust_router.
+#
+# chkconfig: - 58 74
+# description: trust_router is the GSS-EAP trust routing daemon. \
+# GSS-EAP is an IETF standard for providing authentication across \
+# an insecure WAN. \
+
+### BEGIN INIT INFO
+# Provides: trust_router
+# Required-Start: $network $local_fs $remote_fs
+# Required-Stop: $network $local_fs $remote_fs
+# Should-Start: $syslog $named ntpdate
+# Should-Stop: $syslog $named
+# Short-Description: start and stop trust_router
+# Description: trust_router is the GSS-EAP trust routing daemon.
+# GSS-EAP is an IETF standard for providing authentication
+# across an insecure WAN.
+### END INIT INFO
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source networking configuration.
+. /etc/sysconfig/network
+
+# Load the instance configuration
+[ -f /etc/sysconfig/trust_router ] || exit 6
+. /etc/sysconfig/trust_router
+
+# Create the pidfile directory
+mkdir -p /var/run/trust_router
+chown trustrouter:trustrouter /var/run/trust_router
+
+# Does the trust router and wrapper exist
+[ -x /usr/bin/trust_router ] || exit 5
+[ -x /usr/bin/trust_router-wrapper ] || exit 5
+
+# Does the tidc client exist
+[ -x /usr/bin/tidc ] || exit 5
+[ -x /usr/bin/tidc-wrapper ] || exit 5
+
+prog="trust_router-wrapper"
+
+array_contains() {
+ local i
+
+ for i in "${@:2}" ;
+ do
+ [ "${i}" == "${1}" ] && return 0
+ done
+
+ return 1
+}
+
+execute-tidc() {
+ echo -n "Attempting to authenticate to instance ${current_instance}:${current_port}"
+
+ daemon --user="${current_user}" /usr/bin/tidc-wrapper "${current_test_acceptor}" "${current_test_rprealm}" "${current_test_community}" "${current_test_realm}" "${current_port}"
+ tidc_ret=$?
+
+ echo
+
+ return ${tidc_ret}
+}
+
+get-config() {
+ current_instance=${1}
+
+ if [ "${TR_CONFIG_USER[${current_instance}]+abc}" ] ;
+ then
+ current_user=${TR_CONFIG_USER[${current_instance}]}
+ else
+ current_user=${TR_DEFAULT_USER}
+ fi
+
+ if [ "${TR_CONFIG_PIDDIR[${current_instance}]+abc}" ] ;
+ then
+ current_piddir=${TR_CONFIG_PIDDIR[${current_instance}]}
+ else
+ current_piddir=${TR_DEFAULT_PIDDIR}
+ fi
+
+ if [ "${TR_CONFIG_CFGDIR[${current_instance}]+abc}" ] ;
+ then
+ current_cfgdir=${TR_CONFIG_CFGDIR[${current_instance}]}
+ else
+ current_cfgdir=${TR_DEFAULT_CFGDIR}
+ fi
+
+ if [ "${TR_CONFIG_LOGDIR[${current_instance}]+abc}" ] ;
+ then
+ current_logdir=${TR_CONFIG_LOGDIR[${current_instance}]}
+ else
+ current_logdir=${TR_DEFAULT_LOGDIR}
+ fi
+
+ if [ "${TR_CONFIG_PORT[${current_instance}]+abc}" ] ;
+ then
+ current_port=${TR_CONFIG_PORT[${current_instance}]}
+ else
+ current_port=${TR_DEFAULT_PORT}
+ fi
+
+ if [ "${TR_CONFIG_AUTOSTART[${current_instance}]+abc}" ] ;
+ then
+ current_autostart=${TR_CONFIG_AUTOSTART[${current_instance}]}
+ else
+ current_autostart=${TR_DEFAULT_AUTOSTART}
+ fi
+
+ if [ "${TR_CONFIG_ACCEPTOR[${current_instance}]+abc}" ] ;
+ then
+ current_test_acceptor=${TR_CONFIG_TEST_ACCEPTOR[${current_instance}]}
+ else
+ current_test_acceptor=${TR_DEFAULT_TEST_ACCEPTOR}
+ fi
+
+ if [ "${TR_CONFIG_RPREALM[${current_instance}]+abc}" ] ;
+ then
+ current_test_rprealm=${TR_CONFIG_TEST_RPREALM[${current_instance}]}
+ else
+ current_test_rprealm=${TR_DEFAULT_TEST_RPREALM}
+ fi
+
+ if [ "${TR_CONFIG_TEST_COMMUNITY[${current_instance}]+abc}" ] ;
+ then
+ current_test_community=${TR_CONFIG_TEST_COMMUNITY[${current_instance}]}
+ else
+ current_test_community=${TR_DEFAULT_TEST_COMMUNITY}
+ fi
+
+ if [ "${TR_CONFIG_TEST_REALM[${current_instance}]+abc}" ] ;
+ then
+ current_test_realm=${TR_CONFIG_TEST_REALM[${current_instance}]}
+ else
+ current_test_realm=${TR_DEFAULT_TEST_REALM}
+ fi
+}
+
+get-pidfile() {
+ echo "${current_piddir}/${current_instance}.pid"
+}
+
+start() {
+ [ "${EUID}" != "0" ] && exit 4
+ [ "${NETWORKING}" = "no" ] && exit 1
+
+ start_ret=0
+
+ for i in "${TR_INSTANCES[@]}"
+ do
+ get-config "${i}"
+
+ if ${current_autostart} ;
+ then
+ start-instance
+ let "start_ret+=$?"
+ else
+ echo "Skipping instance ${current_instance}"
+ fi
+ done
+
+ return "${start_ret}"
+}
+
+start-single() {
+ if array_contains "${1}" "${TR_INSTANCES[@]}" ;
+ then
+ get-config "${1}"
+
+ start-instance
+ return $?
+ else
+ echo "Instance ${1} not found..."
+
+ return 1
+ fi
+}
+
+start-instance() {
+ pidfile=$(get-pidfile)
+ logfile="${current_logdir}/${current_instance}.log"
+ cfgdir="${current_cfgdir}/${current_instance}/"
+
+ OPTIONS="${pidfile} ${cfgdir} ${logfile}"
+
+ if [ -f "${pidfile}" ] ;
+ then
+ local OLD_PID=$(cat "${pidfile}")
+
+ if [ -d "/proc/${OLD_PID}" ] ;
+ then
+ echo "Instance ${current_instance} is already running..."
+ else
+ echo "Removing stale PID file..."
+ rm "${pidfile}"
+
+ start-instance
+ return $?
+ fi
+ else
+ echo -n "Starting instance ${current_instance}..."
+ daemon --user="${current_user}" --pidfile="${pidfile}" "${prog}" "${OPTIONS}"
+ echo
+ fi
+
+ # Give it a few seconds for things to settle
+ sleep 2
+
+ execute-tidc
+ return $?
+}
+
+stop() {
+ [ "${EUID}" != "0" ] && exit 4
+ [ "${NETWORKING}" = "no" ] && exit 1
+
+ for i in "${TR_INSTANCES[@]}"
+ do
+ get-config "${i}"
+
+ pidfile=$(get-pidfile)
+
+ if [ -f "${pidfile}" ] ;
+ then
+ stop-instance
+ else
+ echo "Instance ${i} does not appear to be running..."
+ fi
+ done
+}
+
+stop-single() {
+ if array_contains "${1}" "${TR_INSTANCES[@]}" ;
+ then
+ get-config "${1}"
+
+ stop-instance
+ else
+ echo "Instance ${1} not found..."
+
+ return 1
+ fi
+
+ return 0
+}
+
+stop-instance() {
+ if [ -f "$(get-pidfile)" ] ;
+ then
+ echo -n "Stopping instance ${current_instance}..."
+
+ killproc -p "$(get-pidfile)" "${prog}"
+ echo
+ else
+ echo "Instance ${current_instance} does not appear to be running..."
+ fi
+}
+
+status() {
+ [ "${EUID}" != "0" ] && exit 4
+ [ "${NETWORKING}" = "no" ] && exit 1
+
+ start_ret=0
+
+ for i in "${TR_INSTANCES[@]}"
+ do
+ get-config "${i}"
+
+ execute-tidc
+ let "exec_ret+=$?"
+ done
+
+ return "${exec_ret}"
+}
+
+
+# See how we were called.
+case "${1}" in
+ start)
+ start
+ ;;
+ start-single)
+ start-single "${2}"
+ ;;
+ stop)
+ stop
+ ;;
+ stop-single)
+ stop-single "${2}"
+ ;;
+ status)
+ status "${prog}"
+ ;;
+ restart|force-reload)
+ stop
+ start
+ ;;
+ reload)
+ exit 3
+ ;;
+ *)
+ echo "Usage: ${0} {start|start-single|stop|stop-single|status|restart|force-reload}"
+ exit 2
+esac