#!/bin/bash
#
# mde_netfilter Startup script for Microsft Defender Netfilter Platform
#
# chkconfig: 35 60 20
# description: Microsft Defender Netfilter Platform
# processname: mde_netfilter
#
### BEGIN INIT INFO
# Provides: mde_netfilter
# Required-Start: $network $local_fs
# Required-Stop: $network $local_fs
# Default-Stop: 0 1 2 6
# Default-Start: 3 5
# Short-Description: Microsft Defender Netfilter Platform
# Description: Microsft Defender Netfilter Platform
#
### END INIT INFO

# Source function library.
# shellcheck source=/dev/null
. /etc/rc.d/init.d/functions

SERVICENAME="mde_netfilter"
WORKING_DIRECTORY="/opt/microsoft/mde_netfilter/sbin"
DAEMON="$WORKING_DIRECTORY/$SERVICENAME"
MDE_SOCK_FILE="/var/run/mde_netfilter.sock"
RETVAL=0

check() {
    # Check that we're a privileged user
    [ "$(id -u)" = 0 ] || exit 4

    # Check if the daemon is executable
    test -x "$DAEMON" || chmod +x "$DAEMON"
}

checkpid() {
    PIDS=$(pidof $DAEMON)
    echo "$PIDS"
}

start() {
    # Sanity check for root user
    check

    # Only one instance of daemon should be running at any give time
    CHECKPID_SUCCESS=$(checkpid)
    if [ ! -z "$CHECKPID_SUCCESS" ]; then
        echo "MDE Netfilter process is already running: $CHECKPID_SUCCESS"
        exit 0
    fi

    echo -n $"Starting daemon: "
    logger MDE_NETFILTER: Starting $DAEMON

    rm -f $MDE_SOCK_FILE
    cd "$WORKING_DIRECTORY" || exit 3
    initctl start $SERVICENAME
    RETVAL=$?

    return $RETVAL
}

stop() {
    # Sanity check for root user
    check

    echo -n $"Stopping daemon: "
    logger MDE_NETFILTER: Stopping "$DAEMON"

    CHECKPID_SUCCESS=$(checkpid)
    if [ "$CHECKPID_SUCCESS" = "0" ]; then
        echo "Already stopped!"
        exit 0
    fi

    initctl stop $SERVICENAME
    RETVAL=$?
    if [ $RETVAL = "1" ]; then
        pkill $SERVICENAME
    fi

    rm -f $MDE_SOCK_FILE
}

restart() {
    stop
    start
}

reload() {
    restart
}

case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
reload)
    reload
    ;;
restart)
    restart
    ;;
status)
    initctl status $SERVICENAME
    RETVAL=$?
    ;;
*)
    echo "Usage: $0 {start|stop|status|restart|reload}"
    RETVAL=2
esac

exit $RETVAL
