slis-slim-node: restructure source package to conform to new layout
authorRaphael Hertzog <raphael@freexian.com>
Tue, 16 Feb 2010 17:30:42 +0000 (17:30 +0000)
committerRaphael Hertzog <raphael@freexian.com>
Tue, 16 Feb 2010 17:30:42 +0000 (17:30 +0000)
bin/slim-monitor [new file with mode: 0755]
debian/slis-slim-node.install
scripts/slim-monitor [deleted file]

diff --git a/bin/slim-monitor b/bin/slim-monitor
new file mode 100755 (executable)
index 0000000..7185d84
--- /dev/null
@@ -0,0 +1,398 @@
+#!/bin/bash
+# référence: monitor,v 3.10 2006/04/11 09:30:55 bzizou Exp $ #
+# $Id: monitor, SLIS4 2006/10/03 09:30:55 alban Exp $ #
+
+# This script is part of the SLIS Project initiated by the CARMI-Internet
+# (Académie de Grenoble - France 38).
+# Ce script fait partie du projet SLIS démarré par le CARMI-Internet
+# (Académie de Grenoble - France 38).
+#
+# SLIS : Serveur de communications Linux pour l'Internet Scolaire.
+# Copyright (C) 1998-2006 Bruno Bzeznik
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#    You should have received a copy of the GNU General Public License
+#    along with this program (For example ./COPYING);
+#    if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+#    Cambridge, MA 02139, USA.
+#
+# Please send all comments and bug reports by electronic mail to:
+# to <slis@ac-grenoble.fr>
+#
+# Envoyez vos suggestions et reports de bugs par e-mail à
+# à <slis@ac-grenoble.fr>
+#
+# Contact: Olivier.LeCam@crdp.ac-versailles.fr
+# Modified by: alban.chazot [in domain] ac-grenoble.fr
+#
+# Comments:
+# This script is run by the crontab for supervising 
+#
+# Updates:
+# olecam: Dec 13, 2005: script rewritten for SLIS v4
+# olecam: Dec 15, 2005: added a check which restarts vtun it seems to be down
+# olecam: Dec 22, 2005: tested with SLIM
+# olecam: Jan 6, 2006: cosmetic changes
+# olecam: Jan 10, 2006: small cosmetic changes
+# bzizou: May 31, 2006: added standalone (without slis-core) capability
+# act   : Oct 03, 2006: synchronize Slis 4 dev and Slis 3.2 changes
+# act   : Oct 03, 2006: Check wget instead of slis version to add NOCHECK option (cause standalone)
+# act   : Oct 03, 2006: remove -r option on LOCKFILE rm (no need ?)
+# act   : Oct 03, 2006: replace HOST variable by MACHINENAME (HOST could be a reserved word)
+# plb   : Apr 02, 2008: see debian/changelog
+
+LOGTAG="monitor[$$]"
+PRE_MONITOR_SCRIPT="/usr/local/etc/pre-monitor.sh"
+POST_MONITOR_SCRIPT="/usr/local/etc/post-monitor.sh"
+SLIM_PUBKEY_FILE="slimpubkey.pem"
+SLIM_PUBKEY_PATH="/var/lib/slis-slim-node"
+SLIS_SYS_BASH="/usr/share/slis/slis-common.sh"
+LOCKFILE="/var/lock/slis-slim-node"
+SLIM_NODE_CONF="/etc/slis/slis-slim-node.conf"
+MONITORING_HOSTNAME=""
+MONITORING_HOSTTYPE=""
+MONITORING_ENABLED="true"
+
+logfile=/var/log/slis-slim-node/slim-monitor.log
+
+[ ! -d `dirname $logfile` ] && mkdir -p `dirname $logfile`
+[ ! -e $logfile ] && touch $logfile
+
+report_to_slismaster() {
+    cat $logfile | mail "$SLISMASTER" -s "$MONITORING_HOSTTYPE : $@"
+}
+
+log() {
+    DT=`date +%Y.%m.%d\ %H:%M`
+    echo "$DT slim-monitor: $@" | tee -a $logfile
+}
+
+log_error() {
+    logger -t "$LOGTAG" "$@"
+    log $@
+    report_to_slismaster "$LOGTAG $@"
+}
+
+log_warning() {
+    logger -t "$LOGTAG" "$@"
+    log $@
+}
+
+
+#
+# Some common RSYNC options
+#
+RSYNC_OPTIONS=" --timeout=30 "
+
+#
+# Some options depending on the WGET version
+#
+WGET_VERSION=`wget --version | head -n 1 | sed "s/GNU Wget //"`
+NOCHECK=""
+if dpkg --compare-versions "$WGET_VERSION" ge "1.10.2" ; then
+  NOCHECK="--no-check-certificate "
+fi
+
+WGET_OPTIONS=" -T 20 $NOCHECK"
+
+if [ ! -e $SLIM_NODE_CONF ]; then
+   log_error "slis-slim-node config not found!" 
+   log "Abording !" 
+   exit 1
+fi
+
+# Load config for slis-slim-node
+. $SLIM_NODE_CONF
+
+if [ "$MONITORING_HOSTTYPE" = "" ]; then
+    if [ -e /etc/lcs/lcs.conf ]; then
+        . /etc/lcs/lcs.conf 
+        MONITORING_HOSTTYPE=lcs$VERSION_NUM
+    elif [ -e /etc/slis/slis.conf ]; then
+        . /etc/slis/slis.conf
+        RES=`ip addr show | grep "inet $IP_DOM0"`
+        if [ "$RES" = "" ]; then
+            MONITORING_HOSTTYPE=slis$VERSION_NUM
+        else
+            MONITORING_HOSTTYPE=host$VERSION_NUM
+        fi
+    fi
+fi
+
+# Autodetect hostname
+if [ "$MONITORING_HOSTNAME" = "" ]; then
+    case "$MONITORING_HOSTTYPE" in
+        slis*)        MONITORING_HOSTNAME=`hostname | cut -d. -f 2`;;
+        lcs*)         MONITORING_HOSTNAME=`hostname | cut -d. -f 2`;;
+        host*)        MONITORING_HOSTNAME=`hostname`;;
+        *)            MONITORING_HOSTNAME=`hostname`;;
+    esac
+fi
+
+#
+# if monitoring disabled, exit
+#
+if [ "$MONITORING_ENABLED" != "true" ]; then
+    exit 0
+fi
+log "Info: Starting the monitoring..."
+
+#
+# If the SLIS uses a VTUN, one starts to check if the tunnel is up
+#
+if [ "$VTUN" = "1" -a -e "/usr/sbin/slis-test-tunnel.sh" ];
+then
+  /usr/sbin/slis-test-tunnel.sh >/dev/null
+  RC=$?
+  if [ $RC != 0 ]
+  then
+         log_warning "Warning: vtun is down, I try to open it again!"
+         /etc/init.d/slis-vtun restart >/dev/null 2>&1
+         sleep 10
+  fi
+fi
+
+#
+# Check the slis variables
+#
+if [ "$SLIM_HOST" = "" ]
+then
+       log_error "ERROR: SLIM_HOST variable not defined. Aborting"
+       exit 1
+fi
+if [ "$SLIM_MONITOR_PATH" = "" ]
+then
+       SLIM_MONITOR_PATH="slim/scripts/monitor/get"
+       log_warning "Warning: SLIM_MONITOR_PATH variable not defined, using slim/scripts/monitor/get"
+fi
+
+# Updates can be freezed because of rsync or psql waiting infinetely
+# for the end of a dead request. So, there's a locking system a bit particular.
+
+if [ "$SLIM_MAX_AGE" = "" ]
+then
+       # This is the maximum number of seconds you think
+       # a monitor must leave before suspecting it to be
+       # freezed.
+       SLIM_MAX_AGE=36000
+fi
+if [ "$SLIM_RETRY_TIME" = "" ]
+then
+    # This is the max number of seconds the script will try
+        # to relock when already locked
+       SLIM_RETRY_TIME=360
+fi
+
+#
+# Add $RSYNC_HOST variable : Maybe rsync server is not the SLIM server
+#                            Maybe not
+#
+if [ "$RSYNC_HOST" = "" ]
+then
+   RSYNC_HOST=$SLIM_HOST
+fi
+
+#
+# Locks
+#
+# 
+# Intelligent locking if procmail lockfile is present
+LOCK_OUTPUT=`lockfile -1 -r 3 -l $SLIM_MAX_AGE -s 0 $LOCKFILE 2>&1`; LOCK_RC=$?
+
+#
+# If unable to lock (recent lock file found)
+#
+if [ "$LOCK_RC" != "0" ]
+then
+    log_error "Error: Unable to lock. Is another monitor running?"
+    exit 1
+fi
+
+#
+# If a very old lock file is found
+#
+if echo $LOCK_OUTPUT | grep -qi 'forcing lock'
+then
+    log "Warning: forcing lock and killing possibly sleeping processes."
+
+    # Perhaps rsync or psql is freezed?
+    killall rsync 2> /dev/null
+    killall psql 2> /dev/null
+    killall wget 2> /dev/null
+
+    # Try to lock another time while waiting for the previous monitor to finish
+    lockfile -5 -r $SLIM_RETRY_TIME $LOCKFILE ; LOCK_RC=$?
+    if [ "$LOCK_RC" != "0" ]
+    then
+       log_error "Second try for locking failed"
+       exit 1
+    fi
+fi
+
+#
+# Pre custom script
+#
+if [ -f $PRE_MONITOR_SCRIPT ]
+then
+       bash $PRE_MONITOR_SCRIPT 2>&1 | tee -a $logfile
+fi
+
+#
+# Let's go!
+#
+pattern=$(basename $0)-tmp.XXXXXX
+tmp=$(mktemp -d /tmp/$pattern)
+cd $tmp
+
+echo "Let's go"
+#
+# Download the public key of the slim host if not already installed
+#
+mkdir -p $SLIM_PUBKEY_PATH
+
+SECURE=0       #initiate Secure Mode to NON SECURE
+
+if [ ! \( -f $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE \) ]
+then
+       log "Server's public key not found. Getting it..."
+       wget -t 1 $WGET_OPTIONS -q -O $tmp/slimcert.pem https://$SLIM_HOST/$SLIM_MONITOR_PATH/slimcert.pem
+       if [ "$?" != "0" ]
+       then
+       log_warning "WARNING: Could not download the public key from https://$SLIM_HOST/$SLIM_MONITOR_PATH/slimcert.pem. Trying to download it by rsync."
+               rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/slimcert.pem . 2>/dev/null >/dev/null
+               if [ "$?" != "0" ]
+               then
+                       log_warning "ERROR downloading rsync://$RSYNC_HOST/$RSYNC_MODULE/slimcert.pem. Could not download the server's certificate!"
+               else
+                       log_warning "WARNING: Trusting the public key obtained from the rsync server."
+                       /usr/bin/openssl x509 -pubkey -in slimcert.pem > $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE
+                       mv slimcert.pem $SLIM_PUBKEY_PATH
+                       SECURE=1
+               fi
+       else
+               log_warning "WARNING: Trusting the public key obtained from the https SLIM server."
+               /usr/bin/openssl x509 -pubkey -in slimcert.pem > $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE
+               mv slimcert.pem $SLIM_PUBKEY_PATH
+               SECURE=1
+       fi
+else
+       log "SLIM public key found. We're in secure mode."
+       SECURE=1
+fi
+
+#
+# Get the monitor script from SLIM and revert to the rsync script if SLIM is not found
+#
+
+
+wget -t 1 $WGET_OPTIONS -q -O $tmp/monitor_rawfile https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_getscript.php?slis_name=$MONITORING_HOSTNAME\&slis_version=$MONITORING_HOSTTYPE
+if [ $? != 0 ]
+then
+       log_warning "unable to get https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_getscript.php?slis_name=$MONITORING_HOSTNAME"
+       log_warning "Reverting to the old rsync monitoring script."
+       cd $tmp
+       rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor . 2>/dev/null >/dev/null
+       if [ "$?" != "0" ]
+       then
+               log_warning "ERROR getting rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor. Aborting."
+               rm -f $LOCKFILE
+               rm -rf $tmp
+               exit 3
+       else
+               if [ "$SECURE" = "1" ]
+               then
+                       rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor.sighash . 2>/dev/null >/dev/null
+                       if [ "$?" != "0" ]
+                       then
+                                       log_error "ERROR: Signature rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor.sighash can not be downloaded. Aborting."
+                               rm -f $LOCKFILE
+                               rm -rf $tmp
+                               exit 4
+                       else
+                               VERIFY=`/usr/bin/openssl md5 -verify $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE -signature monitor.sighash < monitor`
+                               if [ "$VERIFY" != "Verified OK" ]
+                               then
+                                       log_error "ERROR: INVALID SIGNATURE! Server cannot be trusted, monitoring aborted."
+                                       rm -f $LOCKFILE
+                                       rm -rf $tmp
+                                       exit 5
+                               fi
+                       fi
+               else
+                       log_warning "Warning: will start the rsync monitor script in NON SECURE MODE (old method)"
+               fi
+               log_warning "Warning: Starting the rsync monitoring script (not SLIM)"
+               /bin/bash ./monitor 2>&1 | tee -a $logfile
+               rm -f $LOCKFILE
+               rm -rf $tmp
+               exit 0
+       fi
+fi
+
+#
+# Extract sign and timestamp, then suppress sign from the monitoring script
+#
+cat $tmp/monitor_rawfile | grep \#SIGN: | cut -d: -f2 > $tmp/monitor.sig.base64
+TIMESTAMP=`cat $tmp/monitor_rawfile | grep \#TIMESTAMP: | cut -d: -f2`
+awk '{if (NR > 2) print}' $tmp/monitor_rawfile  > $tmp/monitor_script
+
+#
+# Decode the signature
+#
+perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)' < $tmp/monitor.sig.base64 > $tmp/monitor.sig
+
+#
+# Verify the signature
+#
+if [ -s $tmp/monitor.sig.base64 ]
+then
+       VERIFY=`/usr/bin/openssl sha1 -verify  $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE -signature $tmp/monitor.sig < $tmp/monitor_script `
+       if [ "$VERIFY" != "Verified OK" ]
+       then
+               log_error "ERROR: INVALID SIGNATURE! Server cannot be trusted, monitoring aborted."
+               rm -f $LOCKFILE
+               rm -rf $tmp
+               exit 3
+       else
+               export TIMESTAMP
+
+               #
+               # Start the monitoring script
+               #
+               log "Starting the monitoring script..."
+               /bin/bash $tmp/monitor_script 2>&1 | tee -a $logfile
+                RET=$?
+               if [ $RET != 0 ]; then
+                       wget -t 1 $WGET_OPTIONS -q -O /dev/null https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_ackscript.php?slis_name=$MONITORING_HOSTNAME\&timestamp=$TIMESTAMP\&status=KO
+                        log_error "Error: Monitor script badly terminated (exit status : $RET)"
+               else
+                       wget -t 1 $WGET_OPTIONS -q -O /dev/null https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_ackscript.php?slis_name=$MONITORING_HOSTNAME\&timestamp=$TIMESTAMP\&status=OK
+                       log "Monitoring script ended successfully."
+               fi
+       fi
+else
+       log_error "ERROR: Signature could not be extracted! Aborting."
+fi
+
+#
+# Post custom script
+#
+if [ -f $POST_MONITOR_SCRIPT ]
+then
+       bash $POST_MONITOR_SCRIPT 2>&1 | tee -a $logfile
+fi
+
+
+#
+# Remove temporary files/dirs
+#
+rm -f $LOCKFILE
+rm -rf $tmp
index 265ceb6..0fba49e 100644 (file)
@@ -1 +1 @@
-scripts/* usr/bin/
+bin/* usr/bin/
diff --git a/scripts/slim-monitor b/scripts/slim-monitor
deleted file mode 100755 (executable)
index 7185d84..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-#!/bin/bash
-# référence: monitor,v 3.10 2006/04/11 09:30:55 bzizou Exp $ #
-# $Id: monitor, SLIS4 2006/10/03 09:30:55 alban Exp $ #
-
-# This script is part of the SLIS Project initiated by the CARMI-Internet
-# (Académie de Grenoble - France 38).
-# Ce script fait partie du projet SLIS démarré par le CARMI-Internet
-# (Académie de Grenoble - France 38).
-#
-# SLIS : Serveur de communications Linux pour l'Internet Scolaire.
-# Copyright (C) 1998-2006 Bruno Bzeznik
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#    You should have received a copy of the GNU General Public License
-#    along with this program (For example ./COPYING);
-#    if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-#    Cambridge, MA 02139, USA.
-#
-# Please send all comments and bug reports by electronic mail to:
-# to <slis@ac-grenoble.fr>
-#
-# Envoyez vos suggestions et reports de bugs par e-mail à
-# à <slis@ac-grenoble.fr>
-#
-# Contact: Olivier.LeCam@crdp.ac-versailles.fr
-# Modified by: alban.chazot [in domain] ac-grenoble.fr
-#
-# Comments:
-# This script is run by the crontab for supervising 
-#
-# Updates:
-# olecam: Dec 13, 2005: script rewritten for SLIS v4
-# olecam: Dec 15, 2005: added a check which restarts vtun it seems to be down
-# olecam: Dec 22, 2005: tested with SLIM
-# olecam: Jan 6, 2006: cosmetic changes
-# olecam: Jan 10, 2006: small cosmetic changes
-# bzizou: May 31, 2006: added standalone (without slis-core) capability
-# act   : Oct 03, 2006: synchronize Slis 4 dev and Slis 3.2 changes
-# act   : Oct 03, 2006: Check wget instead of slis version to add NOCHECK option (cause standalone)
-# act   : Oct 03, 2006: remove -r option on LOCKFILE rm (no need ?)
-# act   : Oct 03, 2006: replace HOST variable by MACHINENAME (HOST could be a reserved word)
-# plb   : Apr 02, 2008: see debian/changelog
-
-LOGTAG="monitor[$$]"
-PRE_MONITOR_SCRIPT="/usr/local/etc/pre-monitor.sh"
-POST_MONITOR_SCRIPT="/usr/local/etc/post-monitor.sh"
-SLIM_PUBKEY_FILE="slimpubkey.pem"
-SLIM_PUBKEY_PATH="/var/lib/slis-slim-node"
-SLIS_SYS_BASH="/usr/share/slis/slis-common.sh"
-LOCKFILE="/var/lock/slis-slim-node"
-SLIM_NODE_CONF="/etc/slis/slis-slim-node.conf"
-MONITORING_HOSTNAME=""
-MONITORING_HOSTTYPE=""
-MONITORING_ENABLED="true"
-
-logfile=/var/log/slis-slim-node/slim-monitor.log
-
-[ ! -d `dirname $logfile` ] && mkdir -p `dirname $logfile`
-[ ! -e $logfile ] && touch $logfile
-
-report_to_slismaster() {
-    cat $logfile | mail "$SLISMASTER" -s "$MONITORING_HOSTTYPE : $@"
-}
-
-log() {
-    DT=`date +%Y.%m.%d\ %H:%M`
-    echo "$DT slim-monitor: $@" | tee -a $logfile
-}
-
-log_error() {
-    logger -t "$LOGTAG" "$@"
-    log $@
-    report_to_slismaster "$LOGTAG $@"
-}
-
-log_warning() {
-    logger -t "$LOGTAG" "$@"
-    log $@
-}
-
-
-#
-# Some common RSYNC options
-#
-RSYNC_OPTIONS=" --timeout=30 "
-
-#
-# Some options depending on the WGET version
-#
-WGET_VERSION=`wget --version | head -n 1 | sed "s/GNU Wget //"`
-NOCHECK=""
-if dpkg --compare-versions "$WGET_VERSION" ge "1.10.2" ; then
-  NOCHECK="--no-check-certificate "
-fi
-
-WGET_OPTIONS=" -T 20 $NOCHECK"
-
-if [ ! -e $SLIM_NODE_CONF ]; then
-   log_error "slis-slim-node config not found!" 
-   log "Abording !" 
-   exit 1
-fi
-
-# Load config for slis-slim-node
-. $SLIM_NODE_CONF
-
-if [ "$MONITORING_HOSTTYPE" = "" ]; then
-    if [ -e /etc/lcs/lcs.conf ]; then
-        . /etc/lcs/lcs.conf 
-        MONITORING_HOSTTYPE=lcs$VERSION_NUM
-    elif [ -e /etc/slis/slis.conf ]; then
-        . /etc/slis/slis.conf
-        RES=`ip addr show | grep "inet $IP_DOM0"`
-        if [ "$RES" = "" ]; then
-            MONITORING_HOSTTYPE=slis$VERSION_NUM
-        else
-            MONITORING_HOSTTYPE=host$VERSION_NUM
-        fi
-    fi
-fi
-
-# Autodetect hostname
-if [ "$MONITORING_HOSTNAME" = "" ]; then
-    case "$MONITORING_HOSTTYPE" in
-        slis*)        MONITORING_HOSTNAME=`hostname | cut -d. -f 2`;;
-        lcs*)         MONITORING_HOSTNAME=`hostname | cut -d. -f 2`;;
-        host*)        MONITORING_HOSTNAME=`hostname`;;
-        *)            MONITORING_HOSTNAME=`hostname`;;
-    esac
-fi
-
-#
-# if monitoring disabled, exit
-#
-if [ "$MONITORING_ENABLED" != "true" ]; then
-    exit 0
-fi
-log "Info: Starting the monitoring..."
-
-#
-# If the SLIS uses a VTUN, one starts to check if the tunnel is up
-#
-if [ "$VTUN" = "1" -a -e "/usr/sbin/slis-test-tunnel.sh" ];
-then
-  /usr/sbin/slis-test-tunnel.sh >/dev/null
-  RC=$?
-  if [ $RC != 0 ]
-  then
-         log_warning "Warning: vtun is down, I try to open it again!"
-         /etc/init.d/slis-vtun restart >/dev/null 2>&1
-         sleep 10
-  fi
-fi
-
-#
-# Check the slis variables
-#
-if [ "$SLIM_HOST" = "" ]
-then
-       log_error "ERROR: SLIM_HOST variable not defined. Aborting"
-       exit 1
-fi
-if [ "$SLIM_MONITOR_PATH" = "" ]
-then
-       SLIM_MONITOR_PATH="slim/scripts/monitor/get"
-       log_warning "Warning: SLIM_MONITOR_PATH variable not defined, using slim/scripts/monitor/get"
-fi
-
-# Updates can be freezed because of rsync or psql waiting infinetely
-# for the end of a dead request. So, there's a locking system a bit particular.
-
-if [ "$SLIM_MAX_AGE" = "" ]
-then
-       # This is the maximum number of seconds you think
-       # a monitor must leave before suspecting it to be
-       # freezed.
-       SLIM_MAX_AGE=36000
-fi
-if [ "$SLIM_RETRY_TIME" = "" ]
-then
-    # This is the max number of seconds the script will try
-        # to relock when already locked
-       SLIM_RETRY_TIME=360
-fi
-
-#
-# Add $RSYNC_HOST variable : Maybe rsync server is not the SLIM server
-#                            Maybe not
-#
-if [ "$RSYNC_HOST" = "" ]
-then
-   RSYNC_HOST=$SLIM_HOST
-fi
-
-#
-# Locks
-#
-# 
-# Intelligent locking if procmail lockfile is present
-LOCK_OUTPUT=`lockfile -1 -r 3 -l $SLIM_MAX_AGE -s 0 $LOCKFILE 2>&1`; LOCK_RC=$?
-
-#
-# If unable to lock (recent lock file found)
-#
-if [ "$LOCK_RC" != "0" ]
-then
-    log_error "Error: Unable to lock. Is another monitor running?"
-    exit 1
-fi
-
-#
-# If a very old lock file is found
-#
-if echo $LOCK_OUTPUT | grep -qi 'forcing lock'
-then
-    log "Warning: forcing lock and killing possibly sleeping processes."
-
-    # Perhaps rsync or psql is freezed?
-    killall rsync 2> /dev/null
-    killall psql 2> /dev/null
-    killall wget 2> /dev/null
-
-    # Try to lock another time while waiting for the previous monitor to finish
-    lockfile -5 -r $SLIM_RETRY_TIME $LOCKFILE ; LOCK_RC=$?
-    if [ "$LOCK_RC" != "0" ]
-    then
-       log_error "Second try for locking failed"
-       exit 1
-    fi
-fi
-
-#
-# Pre custom script
-#
-if [ -f $PRE_MONITOR_SCRIPT ]
-then
-       bash $PRE_MONITOR_SCRIPT 2>&1 | tee -a $logfile
-fi
-
-#
-# Let's go!
-#
-pattern=$(basename $0)-tmp.XXXXXX
-tmp=$(mktemp -d /tmp/$pattern)
-cd $tmp
-
-echo "Let's go"
-#
-# Download the public key of the slim host if not already installed
-#
-mkdir -p $SLIM_PUBKEY_PATH
-
-SECURE=0       #initiate Secure Mode to NON SECURE
-
-if [ ! \( -f $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE \) ]
-then
-       log "Server's public key not found. Getting it..."
-       wget -t 1 $WGET_OPTIONS -q -O $tmp/slimcert.pem https://$SLIM_HOST/$SLIM_MONITOR_PATH/slimcert.pem
-       if [ "$?" != "0" ]
-       then
-       log_warning "WARNING: Could not download the public key from https://$SLIM_HOST/$SLIM_MONITOR_PATH/slimcert.pem. Trying to download it by rsync."
-               rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/slimcert.pem . 2>/dev/null >/dev/null
-               if [ "$?" != "0" ]
-               then
-                       log_warning "ERROR downloading rsync://$RSYNC_HOST/$RSYNC_MODULE/slimcert.pem. Could not download the server's certificate!"
-               else
-                       log_warning "WARNING: Trusting the public key obtained from the rsync server."
-                       /usr/bin/openssl x509 -pubkey -in slimcert.pem > $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE
-                       mv slimcert.pem $SLIM_PUBKEY_PATH
-                       SECURE=1
-               fi
-       else
-               log_warning "WARNING: Trusting the public key obtained from the https SLIM server."
-               /usr/bin/openssl x509 -pubkey -in slimcert.pem > $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE
-               mv slimcert.pem $SLIM_PUBKEY_PATH
-               SECURE=1
-       fi
-else
-       log "SLIM public key found. We're in secure mode."
-       SECURE=1
-fi
-
-#
-# Get the monitor script from SLIM and revert to the rsync script if SLIM is not found
-#
-
-
-wget -t 1 $WGET_OPTIONS -q -O $tmp/monitor_rawfile https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_getscript.php?slis_name=$MONITORING_HOSTNAME\&slis_version=$MONITORING_HOSTTYPE
-if [ $? != 0 ]
-then
-       log_warning "unable to get https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_getscript.php?slis_name=$MONITORING_HOSTNAME"
-       log_warning "Reverting to the old rsync monitoring script."
-       cd $tmp
-       rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor . 2>/dev/null >/dev/null
-       if [ "$?" != "0" ]
-       then
-               log_warning "ERROR getting rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor. Aborting."
-               rm -f $LOCKFILE
-               rm -rf $tmp
-               exit 3
-       else
-               if [ "$SECURE" = "1" ]
-               then
-                       rsync $RSYNC_OPTIONS rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor.sighash . 2>/dev/null >/dev/null
-                       if [ "$?" != "0" ]
-                       then
-                                       log_error "ERROR: Signature rsync://$RSYNC_HOST/$RSYNC_MODULE/monitor.sighash can not be downloaded. Aborting."
-                               rm -f $LOCKFILE
-                               rm -rf $tmp
-                               exit 4
-                       else
-                               VERIFY=`/usr/bin/openssl md5 -verify $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE -signature monitor.sighash < monitor`
-                               if [ "$VERIFY" != "Verified OK" ]
-                               then
-                                       log_error "ERROR: INVALID SIGNATURE! Server cannot be trusted, monitoring aborted."
-                                       rm -f $LOCKFILE
-                                       rm -rf $tmp
-                                       exit 5
-                               fi
-                       fi
-               else
-                       log_warning "Warning: will start the rsync monitor script in NON SECURE MODE (old method)"
-               fi
-               log_warning "Warning: Starting the rsync monitoring script (not SLIM)"
-               /bin/bash ./monitor 2>&1 | tee -a $logfile
-               rm -f $LOCKFILE
-               rm -rf $tmp
-               exit 0
-       fi
-fi
-
-#
-# Extract sign and timestamp, then suppress sign from the monitoring script
-#
-cat $tmp/monitor_rawfile | grep \#SIGN: | cut -d: -f2 > $tmp/monitor.sig.base64
-TIMESTAMP=`cat $tmp/monitor_rawfile | grep \#TIMESTAMP: | cut -d: -f2`
-awk '{if (NR > 2) print}' $tmp/monitor_rawfile  > $tmp/monitor_script
-
-#
-# Decode the signature
-#
-perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)' < $tmp/monitor.sig.base64 > $tmp/monitor.sig
-
-#
-# Verify the signature
-#
-if [ -s $tmp/monitor.sig.base64 ]
-then
-       VERIFY=`/usr/bin/openssl sha1 -verify  $SLIM_PUBKEY_PATH/$SLIM_PUBKEY_FILE -signature $tmp/monitor.sig < $tmp/monitor_script `
-       if [ "$VERIFY" != "Verified OK" ]
-       then
-               log_error "ERROR: INVALID SIGNATURE! Server cannot be trusted, monitoring aborted."
-               rm -f $LOCKFILE
-               rm -rf $tmp
-               exit 3
-       else
-               export TIMESTAMP
-
-               #
-               # Start the monitoring script
-               #
-               log "Starting the monitoring script..."
-               /bin/bash $tmp/monitor_script 2>&1 | tee -a $logfile
-                RET=$?
-               if [ $RET != 0 ]; then
-                       wget -t 1 $WGET_OPTIONS -q -O /dev/null https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_ackscript.php?slis_name=$MONITORING_HOSTNAME\&timestamp=$TIMESTAMP\&status=KO
-                        log_error "Error: Monitor script badly terminated (exit status : $RET)"
-               else
-                       wget -t 1 $WGET_OPTIONS -q -O /dev/null https://$SLIM_HOST/$SLIM_MONITOR_PATH/monitor_ackscript.php?slis_name=$MONITORING_HOSTNAME\&timestamp=$TIMESTAMP\&status=OK
-                       log "Monitoring script ended successfully."
-               fi
-       fi
-else
-       log_error "ERROR: Signature could not be extracted! Aborting."
-fi
-
-#
-# Post custom script
-#
-if [ -f $POST_MONITOR_SCRIPT ]
-then
-       bash $POST_MONITOR_SCRIPT 2>&1 | tee -a $logfile
-fi
-
-
-#
-# Remove temporary files/dirs
-#
-rm -f $LOCKFILE
-rm -rf $tmp