#!/bin/sh

# Script that stops the ns-slapd server.
# Exit status can be:
#       0: Server stopped successfully
#       1: Server could not be stopped
#       2: Server was not running

stop_instance() {
    SERV_ID=$1

    # source env. for this instance
    if [ "$SERV_ID" = "admin" ] ; then
        # ignore admin
        return 0 
    elif [ -f $initconfig_dir/dirsrv-$SERV_ID ] ; then
        echo Stopping instance \"$SERV_ID\"
        . $initconfig_dir/dirsrv-$SERV_ID
    else
        echo Instance $SERV_ID not found.
        return 1
    fi

    PIDFILE=$RUN_DIR/$PRODUCT_NAME-$SERV_ID.pid
    if test ! -f $PIDFILE ; then
        echo No ns-slapd PID file found. Server is probably not running
        return 2
    fi
    PID=`cat $PIDFILE`
    # see if the server is already stopped
    kill -0 $PID > /dev/null 2>&1 || {
        echo Server not running
        if test -f $PIDFILE ; then
            rm -f $PIDFILE
        fi
        return 2
    }
    # server is running - kill it
    kill $PID
    loop_counter=1
    # wait for 10 minutes (600 times 1 second)
    max_count=600
    while test $loop_counter -le $max_count; do
        loop_counter=`expr $loop_counter + 1`
        if kill -0 $PID > /dev/null 2>&1 ; then
            sleep 1;
        else
            if test -f $PIDFILE ; then
                rm -f $PIDFILE
            fi
            return 0
        fi
    done
    if test -f $PIDFILE ; then
        echo Server still running!! Failed to stop the ns-slapd process: $PID.  Please check the errors log for problems.
    fi
    return 1
}

while getopts "d:" flag
do
    case "$flag" in
        d) initconfig_dir="$OPTARG";;
    esac
done
shift $(($OPTIND-1))

if [ "$initconfig_dir" = "" ]; then
    if [ $USER = root ] ; then
        initconfig_dir=/etc/sysconfig
    else
        initconfig_dir=$HOME/.dirsrv
    fi
fi

if [ "$#" -eq 0 ]; then
    # We're stopping all instances.
    ret=0
    for i in $initconfig_dir/dirsrv-*; do
        if [ ! -f "$i" ] ; then break ; fi
        regex=s,$initconfig_dir/dirsrv-,,g
        inst=`echo $i | sed -e $regex`
        stop_instance $inst
        if [ "$?" -ne 0 ]; then
            ret=$?
        fi
    done
    exit $ret
else
    # We're stopping a single instance.
    stop_instance $@
    exit $?
fi
