# or stopping ossec-hids
# Author: Daniel B. Cid <daniel.cid@gmail.com>
-
LOCAL=`dirname $0`;
cd ${LOCAL}
PWD=`pwd`
DIR=`dirname $PWD`;
-### Do not modify bellow here ###
+
+### Do not modify below here ###
NAME="OSSEC HIDS"
-VERSION="v2.5.1"
-AUTHOR="Trend Micro Inc."
+VERSION="v3.3.0"
DAEMONS="ossec-logcollector ossec-syscheckd ossec-agentd ossec-execd"
+[ -f /etc/ossec-init.conf ] && . /etc/ossec-init.conf
## Locking for the start/stop
LOCK="${DIR}/var/start-script-lock"
LOCK_PID="${LOCK}/pid"
-
# This number should be more than enough (even if it is
# started multiple times together). It will try for up
# to 10 attempts (or 10 seconds) to execute.
MAX_ITERATION="10"
-
-
-# Check pid
checkpid()
{
for i in ${DAEMONS}; do
if [ ! $? = 0 ]; then
echo "Deleting PID file '${DIR}/var/run/${i}-${j}.pid' not used..."
rm ${DIR}/var/run/${i}-${j}.pid
- fi
- done
- done
+ fi
+ done
+ done
}
-
-
-# Lock function
lock()
{
i=0;
-
+
# Providing a lock.
while [ 1 ]; do
mkdir ${LOCK} > /dev/null 2>&1
MSL=$?
if [ "${MSL}" = "0" ]; then
- # Lock aquired (setting the pid)
+ # Lock acquired (setting the pid)
echo "$$" > ${LOCK_PID}
return;
fi
if [ ! $? = 0 ]; then
# Pid is not present.
i=`expr $i + 1`;
- fi
+ fi
# We tried 10 times to acquire the lock.
if [ "$i" = "${MAX_ITERATION}" ]; then
done
}
-
-# Unlock function
unlock()
{
rm -rf ${LOCK}
}
-
-# Help message
help()
{
# Help message
- echo "Usage: $0 {start|stop|restart|status}";
+ echo "Usage: $0 {start|stop|reload|restart|status}";
exit 1;
}
-
-# Status function
status()
{
+ RETVAL=0
for i in ${DAEMONS}; do
pstatus ${i};
if [ $? = 0 ]; then
+ RETVAL=1
echo "${i} not running..."
else
echo "${i} is running..."
fi
- done
+ done
+ exit $RETVAL
}
testconfig()
{
- # We first loop to check the config.
+ # We first loop to check the config.
for i in ${SDAEMONS}; do
${DIR}/bin/${i} -t;
if [ $? != 0 ]; then
echo "${i}: Configuration error. Exiting"
unlock;
exit 1;
- fi
+ fi
done
}
start()
{
SDAEMONS="ossec-execd ossec-agentd ossec-logcollector ossec-syscheckd"
-
- echo "Starting $NAME $VERSION (by $AUTHOR)..."
+
+ echo "Starting $NAME $VERSION..."
lock;
checkpid;
-
# We actually start them now.
for i in ${SDAEMONS}; do
pstatus ${i};
if [ $? = 0 ]; then
${DIR}/bin/${i};
if [ $? != 0 ]; then
+ echo "${i} did not start";
unlock;
exit 1;
- fi
+ fi
- echo "Started ${i}..."
+ echo "Started ${i}..."
else
- echo "${i} already running..."
- fi
-
- done
+ echo "${i} already running..."
+ fi
+ done
# After we start we give 2 seconds for the daemons
# to internally create their PID files.
echo "Completed."
}
-# Process status
pstatus()
{
pfile=$1;
-
+
# pfile must be set
if [ "X${pfile}" = "X" ]; then
return 0;
fi
-
+
ls ${DIR}/var/run/${pfile}*.pid > /dev/null 2>&1
if [ $? = 0 ]; then
for j in `cat ${DIR}/var/run/${pfile}*.pid 2>/dev/null`; do
rm -f ${DIR}/var/run/${pfile}-$j.pid
continue;
fi
-
+
kill -0 $j > /dev/null 2>&1
if [ $? = 0 ]; then
return 1;
- fi
- done
+ fi
+ done
fi
-
- return 0;
-}
+ return 0;
+}
-# Stop all
stopa()
{
lock;
pstatus ${i};
if [ $? = 1 ]; then
echo "Killing ${i} .. ";
-
+
kill `cat ${DIR}/var/run/${i}*.pid`;
else
- echo "${i} not running ..";
+ echo "${i} not running ..";
fi
-
+
rm -f ${DIR}/var/run/${i}*.pid
-
- done
-
+ done
+
unlock;
echo "$NAME $VERSION Stopped"
}
-
### MAIN HERE ###
case "$1" in
- start)
+start)
testconfig
- start
- ;;
- stop)
- stopa
- ;;
- restart)
+ start
+ ;;
+stop)
+ stopa
+ ;;
+restart)
testconfig
- stopa
- start
- ;;
- status)
+ stopa
+ sleep 1;
+ start
+ ;;
+reload)
+ DAEMONS="ossec-logcollector ossec-syscheckd ossec-agentd"
+ stopa
+ start
+ ;;
+status)
status
- ;;
- help)
+ ;;
+help)
help
;;
- *)
+*)
help
esac
+