#! /bin/sh

exit

CFG_FILE=/etc/daemon.conf
CFG_FILE=daemon.conf #DEBUG

MY_name=`basename "$0"`
ACTION="$1"

if ! grep -E "^\[$MY_name\]" $CFG_FILE > /dev/null
then
    echo "Cannot $ACTION daemon $MY_name which is not configured in $CFG_FILE"
    exit 1
fi


while read ITEM SIGN VALUE
do
      # ignore comments and blank lines
    case "$ITEM" in
        \#* | "")      continue;;
	\[$MY_name\]) is_item="t"; continue;;
	\[*)           is_item=""; continue;;
    esac
    [ "$is_item" ] || continue

      # split line in case there was no space around the equal sign
    if [ "$SIGN" != "=" ]
    then
	IFS="="
	if [ "$VALUE" = "" ]
	then
	    set -- $ITEM
	    ITEM="$1"
	else
	    set -- $VALUE
	fi
	VALUE="$2"
    fi

    case "$ITEM" in
	type)           MY_type="$VALUE";;
	inetd_options)  MY_inetd_options="$VALUE";;
	xinetd_options) MY_xinetd_options="$VALUE";;
	user)           MY_user="$VALUE";;
	restart_signal) MY_restart_signal="$VALUE";;
	reload_signal)  MY_reload_signal="$VALUE";;
	pidfile_hack)   MY_pidfile_hack="$VALUE";;
	pseudo_daemon)  MY_pseudo_daemon="$VALUE";;
	port)           MY_port="$VALUE";;
	server)         MY_server="$VALUE";;
	title)          MY_title="$VALUE";;
    esac
done < $CFG_FILE

exit

if [ "$MY_type" = "standalone" ]
then
    case "$ACTION" in
	start)
	    su --shell="/bin/sh" --command="exec $MY_server"  $MY_user &
	    CHILD=$!
	    [ "$MY_pseudo_daemon" = "yes" ] || CHILD=$[$CHILD+1]

	      # check if we got the right pid
	    GUESSED_PID=`pidof `"$MY_server"` # fails for several running servers
	    if [ "$GUESSED_PID" =! "$CHILD" ]
	    then
#		if [ -f "/var/run/${MY_server}.pid" ]
#		then
#		    read FILE_PID < "/var/run/${MY_server}.pid"
#		    if [ "$GUESSED_PID" =! "$FILE_PID" ]
#		    if [ "$CHILD" =! "$FILE_PID" ]
#		fi
		echo "Something went wrong while guessing the PID of the child."
                exit 1
	    fi

	      # check if child is running (dirty hack)
    	    if ! kill -0 $CHILD
	    then
		echo "Something went wrong while starting $MY_server."
		exit 1
	    fi

	      # create an artificial pidfile
	    if [ "$MY_pidfile_hack" = "yes" ]
	    then
		echo "$CHILD" > "/var/run/${MY_server}.pid"
	    fi
	stop)
	    if [ -f "/var/run/${MY_server}.pid" ]
	    then
		read FILE_PID < "/var/run/${MY_server}.pid"
		kill -TERM $FILE_PID
		sleep 1
		if kill -0 $FILE_PID
		then
		    sleep 5
		    kill -9 $FILE_PID &> /dev/null
		fi
	    else
		killall -TERM "$MY_server"
		sleep 1
		if killall -0 "$MY_server"
		then
		    sleep 5
		    kill -9 "$MY_server" &> /dev/null
		fi
	    fi
	restart)
	      # to rotate the logfile
	    if [ -f "/var/run/${MY_server}.pid" ]
	    then
		read FILE_PID < "/var/run/${MY_server}.pid"
		kill -$MY_restart_signal $FILE_PID
	    else
		killall -$MY_restart_signal "$MY_server"
	    fi
	reload)
	      # to re-read the configuration file
	    if [ -f "/var/run/${MY_server}.pid" ]
	    then
		read FILE_PID < "/var/run/${MY_server}.pid"
		kill -$MY_reload_signal $FILE_PID
	    else
		killall -$MY_reload_signal "$MY_server"
	    fi
    esac

elif [ "$MY_type" = "inetd" ]
    MY_type="inetlike"
    local INETD_CFG="/etc/inetd.conf"
    local INETD_PIDFILE="/var/run/inetd.pid"

    INETD_CFG="inetd.conf" #DEBUG
    touch $INETD_CFG       #DEBUG
    INETD_PIDFILE="inetd.pid"  #DEBUG
    echo $$ > $INETD_PIDFILE   #DEBUG

    ENTRY="$MY_name $MY_inetd_options $MY_user $MY_server"

elif [ "$MY_type" = "xinetd" ]
    MY_type="inetlike"
    local INETD_CFG="/etc/xinetd.conf"
    local INETD_PIDFILE="/var/run/xinetd.pid"

    INETD_CFG="xinetd.conf" #DEBUG
    touch $INETD_CFG       #DEBUG
    INETD_PIDFILE="xinetd.pid"  #DEBUG
    echo $$ > $INETD_PIDFILE   #DEBUG

#    ENTRY="$MY_name $MY_inetd_options $MY_user $MY_server"
    ENTRY=""
else
    exit 1
fi


  # append to or remove from /etc/inetd.conf, reread configuration afterwards
if [ "$MY_type" = "inetlike" ]
then
    if [ ! -w "$INETD_CFG" ]
    then
	echo "Configuration file $INETD_CFG not writable, skipping service $MY_name"
	exit 1
    fi
    if [ ! -f "$INETD_PIDFILE" ]
    then
	echo "Don't know PID of inetd, skipping service $MY_name"
	exit 1
    fi
    if [ ! -O "$INETD_PIDFILE" ]
    then
	echo "PID-file $INETD_PIDFILE is not owned by $LOGNAME, skipping service $MY_name"
	exit 1
    fi
    read INETD_PID < $INETD_PIDFILE
    if ! kill -0 "$INETD_PID" &> /dev/null
    then
	echo "Inetd not running, skipping service $MY_name"
	rm -f "$INETD_PID"
	exit 1
    fi


    case "$action" in
	add)
	    if grep -E "^$MY_name" $INETD_CFG &> /dev/null
	    then
		echo "Warning: $MY_name already configured in $INETD_CFG. Skipping"
	    else
		echo "Activating service $MY_name trough $INETD_CFG"
		echo "#Service $MY_name dynamically added by inet_plugin
$MY_entry
#Deletion mark for service $MY_name" >> $INETD_CFG
	    fi
	    ;;
	remove)
	    if grep -E "^$MY_name" $INETD_CFG &> /dev/null
	    then
		echo "De-activating service $MY_name trough $INETD_CFG"
		sed -e "/^#Service $MY_name dynamically added/,\
			/^#Deletion mark for service $MY_name/ d" \
		    $INETD_CFG > $INETD_CFG.tmp \
		&& mv $INETD_CFG.tmp "$INETD_CFG"
	    else
		echo "Warning: $MY_name not configured in $INETD_CFG. Skipping"
	    fi

	;;
    esac

      # re-read the configuration file
    kill -HUP $INETD_PID
fi

