#! /bin/sh
# /etc/init.d/sysklogd: start the system log daemon.

### BEGIN INIT INFO
# Provides:             sysklogd
# Required-Start:       $remote_fs $time
# Required-Stop:        $remote_fs $time
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         1
# Short-Description:    System logger
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

pidfile=/var/run/syslogd.pid
binpath=/sbin/syslogd

test -x $binpath || exit 0

# syslogd options should be set in /etc/default/syslogd
SYSLOGD=""

# user to run syslogd as - this can overriden in /etc/default/syslogd
USER="syslog"

test ! -r /etc/default/syslogd || . /etc/default/syslogd

# allow ltsp to override
test ! -r /etc/ltsp/syslogd || . /etc/ltsp/syslogd

# Add unbound chroot if it's installed
test ! -r /etc/unbound/syslogd || . /etc/unbound/syslogd

# Figure out under which user syslogd should be running as
if echo ${SYSLOGD} | grep -q '^.*-u[[:space:]]*\([[:alnum:]]*\)[[:space:]]*.*$'
then
	# A specific user has been set on the command line, try to extract it.
	USER=$(echo ${SYSLOGD} | sed -e 's/^.*-u[[:space:]]*\([[:alnum:]]*\)[[:space:]]*.*$/\1/')
else
	# By default, run syslogd under the syslog user
	SYSLOGD="${SYSLOGD} -u ${USER}"
fi

# Unable to get the user under which syslogd should be running, stop.
if [ -z "${USER}" ]
then
	log_failure_msg "Unable to get syslog user"
	exit 1
fi

. /lib/lsb/init-functions

create_xconsole()
{
    # Only proceed if /dev/xconsole is used at all
    if ! grep -q '^[^#].*/dev/xconsole' /etc/syslog.conf
    then
	return
    fi

    if [ ! -e /dev/xconsole ]; then
	mknod -m 640 /dev/xconsole p
    else
	chmod 0640 /dev/xconsole
    fi

    chown ${USER}:adm /dev/xconsole
    test ! -x /sbin/restorecon || /sbin/restorecon /dev/xconsole

}

fix_log_ownership()
{
	for l in `syslogd-listfiles -a`
	do
		chown ${USER}:adm $l
	done
}

running()
{
    # No pidfile, probably no daemon present
    #
    if [ ! -f $pidfile ]
    then
	return 1
    fi

    pid=`cat $pidfile`

    # No pid, probably no daemon present
    #
    if [ -z "$pid" ]
    then
	return 1
    fi

    if [ ! -d /proc/$pid ]
    then
	return 1
    fi

    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1`

    # No syslogd?
    #
    if [ "$cmd" != "$binpath" ]
    then
	return 1
    fi

    return 0
}

case "$1" in
  start)
    log_begin_msg "Starting system log daemon..."
    create_xconsole
    fix_log_ownership
    start-stop-daemon --start --quiet --pidfile $pidfile --name syslogd --startas $binpath -- $SYSLOGD
    log_end_msg $?
    ;;
  stop)
    log_begin_msg "Stopping system log daemon..."
    start-stop-daemon --stop --quiet --pidfile $pidfile --name syslogd
    log_end_msg $?
    ;;
  reload|force-reload)
    log_begin_msg "Reloading system log daemon..."
    fix_log_ownership
    start-stop-daemon --stop --quiet --signal 1 --pidfile $pidfile --name syslogd
    log_end_msg $?
    ;;
  restart)
    log_begin_msg "Restarting system log daemon..."
    start-stop-daemon --stop --retry 5 --quiet --pidfile $pidfile --name syslogd
    fix_log_ownership
    start-stop-daemon --start --quiet --pidfile $pidfile --name syslogd --startas $binpath -- $SYSLOGD
    log_end_msg $?
    ;;
  reload-or-restart)
    if running
    then
	$0 reload
    else
	$0 start
    fi
    ;;
  status)
    status_of_proc -p $pidfile $binpath syslogd && exit 0 || exit $?
    ;;
  *)
    log_success_msg "Usage: /etc/init.d/sysklogd {start|stop|reload|restart|force-reload|reload-or-restart|status}"
    exit 1
esac

exit 0
