From b84b23a86f62ca476acfb8b1175130079651201a Mon Sep 17 00:00:00 2001
From: Tomas Plesnik <plesnik@ics.muni.cz>
Date: Fri, 21 Feb 2014 14:49:13 +0100
Subject: [PATCH] pridany funkce pro generovani konfiguracnich souboru,
 manifest file a vytvareni symlinku

---
 src/warden-server/sh/update.sh | 226 +++++++++++----------------------
 1 file changed, 72 insertions(+), 154 deletions(-)

diff --git a/src/warden-server/sh/update.sh b/src/warden-server/sh/update.sh
index 822088f..da38de6 100755
--- a/src/warden-server/sh/update.sh
+++ b/src/warden-server/sh/update.sh
@@ -72,6 +72,18 @@ paramsChck()
 #-------------------------------------------------------------------------------
 #                               Installation functions
 #-------------------------------------------------------------------------------
+wardenDirChck()
+{
+        echo -n "Checking Warden server directory ... "
+        if [[ ! -d "$basedir" ]] && [[ ! -w "$basedir" ]]; then
+                echo "FAILED!"
+                echo "No version of Warden server is not installed!"
+                exit 1
+        else
+                echo "OK"
+        fi  
+}
+
 
 oldPackageChck()
 {
@@ -117,19 +129,6 @@ modulesChck()
 }
 
 
-wardenDirChck()
-{
-        echo -n "Checking Warden server directory ... "
-        if [[ ! -d "$basedir" ]] && [[ ! -w "$basedir" ]]; then
-                echo "FAILED!"
-                echo "No version of Warden server is not installed!"
-                exit 1
-        else
-                echo "OK"
-        fi  
-}
-
-
 backup()
 {
 	echo -n "Making Warden server backup ... "
@@ -149,154 +148,45 @@ updateWardenDir()
 }
 
 
-updateConfFiles()
+doTemplate()
 {
-        echo -n "Updating $apache_conf_file ... "
-
-        ssl_certificate_file=`cat $apache_conf_file | grep 'SSLCertificateFile'`
-        ssl_certificate_key_file=`cat $apache_conf_file | grep 'SSLCertificateKeyFile'`
-        ssl_ca_certificate_file=`cat $apache_conf_file | grep 'SSLCACertificateFile'`
-        perl_switches=`cat $apache_conf_file | grep 'PerlSwitches'`
-
-        echo "#
-# warden-apache.conf - configuration file for the Apache server
-#
-
-SSLEngine on
-
-SSLVerifyDepth 3
-SSLVerifyClient require
-SSLOptions +StdEnvVars +ExportCertData
-
-SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-
-$ssl_certificate_file
-$ssl_certificate_key_file
-$ssl_ca_certificate_file
-
-PerlOptions +Parent
-$perl_switches
-
-<Location /Warden>
-        SetHandler perl-script
-        PerlHandler Warden::ApacheDispatch
-        SSLOptions +StdEnvVars
-</Location>" > $apache_conf_file 2> $err; ret_val=`echo $?`
-
-	if [ $ret_val -eq 0 ]; then
-		echo "OK"
-	else
-		errClean
-	fi
- 
-
-#-------------------------------------------------------------------------------
-
-        echo -n "Updating $server_conf_file ... "
-
-        basedir=`cat $server_conf_file | grep '$BASEDIR'`
-        syslog=`cat $server_conf_file | grep '$SYSLOG' | head -n1`
-        if [ -z "$syslog" ]; then
-                syslog='$SYSLOG = 1;'
-        fi
-        syslog_verbose=`cat $server_conf_file | grep '$SYSLOG_VERBOSE'`
-        if [ -z "$syslog_verbose" ]; then
-                syslog_verbose='$SYSLOG_VERBOSE = 1;'
-        fi
-        syslog_facility=`cat $server_conf_file | grep '$SYSLOG_FACILITY'`
-        if [ -z "$syslog_facility" ]; then
-                syslog_facility=`cat $server_conf_file | grep '$FACILITY'`
-        else
-                syslog_facility='$SYSLOG_FACILITY = "local7";'
-        fi
-        db_name=`cat $server_conf_file | grep '$DB_NAME'`
-        db_user=`cat $server_conf_file | grep '$DB_USER'`
-        db_pass=`cat $server_conf_file | grep '$DB_PASS'`
-        db_host=`cat $server_conf_file | grep '$DB_HOST'`
-        max_events_limit=`cat $server_conf_file | grep '$MAX_EVENTS_LIMIT'`
-        if [ -z "$max_events_limit" ]; then
-                max_events_limit='$MAX_EVENTS_LIMIT = 1000000;'
-        fi
-        valid_strings=`cat $server_conf_file | grep -A 3 '%VALID_STRINGS'`
-        if [ -z "$valid_strings" ]; then
-                valid_strings="%VALID_STRINGS = (
-  \"type\"        => [\"portscan\", \"bruteforce\", \"probe\", \"spam\", \"phishing\", \"botnet_c_c\", \"dos\", \"malware\", \"copyright\", \"webattack\", \"test\", \"other\"],
-  \"source_type\" => [\"IP\", \"URL\", \"Reply-To:\"]
-);"
-        fi
-
-        echo "#
-# warden-server.conf - configuration file for Warden server
-#
-
-#-------------------------------------------------------------------------------
-# BASEDIR - base directory of Warden server
-#-------------------------------------------------------------------------------
-$basedir
-
-#-------------------------------------------------------------------------------
-# SYSLOG - enable/disable syslog logging
-#-------------------------------------------------------------------------------
-$syslog
-
-#-------------------------------------------------------------------------------
-# SYSLOG_VERBOSE - enable/disable logging in verbose mode (stack info added)
-#-------------------------------------------------------------------------------
-$syslog_verbose
-
-#-------------------------------------------------------------------------------
-# SYSLOG_FACILITY - syslog facility
-#-------------------------------------------------------------------------------
-$syslog_facility
-
-#-------------------------------------------------------------------------------
-# DB_NAME - MySQL database name of Warden server
-#-------------------------------------------------------------------------------
-$db_name
-
-#-------------------------------------------------------------------------------
-# DB_USER - MySQL database user of Warden server
-#-------------------------------------------------------------------------------
-$db_user
-
-#-------------------------------------------------------------------------------
-# DB_PASS - MySQL database password of Warden server
-#-------------------------------------------------------------------------------
-$db_pass
+        vars=""
+        while (($#)); do
+                vars="'$1'=>'$2', $vars"
+                shift 2
+        done
+        perl -e "my %repl=($vars); foreach my \$l (<>) {\$l =~ s/\$_/\$repl{\$_}/g for keys %repl; print \$l}"
+}
 
-#-------------------------------------------------------------------------------
-# DB_HOST - MySQL database host
-#-------------------------------------------------------------------------------
-$db_host
 
-#-------------------------------------------------------------------------------
-# MAX_EVENTS_LIMIT - server limit of maximum number of events that can be
-#                    delivered to one client in one batch
-#-------------------------------------------------------------------------------
-$max_events_limit
+createManifest()
+{
+        echo -n "Creating MANIFEST file ... "
+        cd "$basedir" && find . -mindepth 2 -type f | sed 's/.\///' | sort > "${doc}/MANIFEST" && cd $OLDPWD 2> "$err" || errClean
+        echo "OK"
+}
 
-#-------------------------------------------------------------------------------
-# VALID_STRINGS - validation hash containing allowed event attributes
-#-------------------------------------------------------------------------------
-$valid_strings" > $server_conf_file 2> $err; ret_val=`echo $?`
 
-        if [ $ret_val -eq 0 ]; then
-                echo "OK"
-        else
-                errClean
-        fi
+createSymlinks()
+{
+        echo "Creating symbolic links to $symbin ..."
+        for file in "${bin}/"*
+        do
+                echo "- making symlink: ${symbin}/${file##*/} -> $file"
+                ln -s "$file" "${symbin}/${file##*/}"
+        done
 }
 
 
-
 #-------------------------------------------------------------------------------
 #				MAIN
 #-------------------------------------------------------------------------------
 
 # read input
-while getopts "d:Vh" options; do
+while getopts "d:s:Vh" options; do
 	case "$options" in
 		d ) basedir="$OPTARG";;
+                s ) symbin="$OPTARG";;
 		h ) usage;;
 		V ) version;;
 		* ) usage;;
@@ -305,6 +195,7 @@ done
 
 # remove last char (slash) from name of directories
 [[ "$basedir" == */ ]] && basedir="${basedir%?}"
+[[ "$symbin" == */ ]] && symbin="${symbin%?}"
 
 # params test
 paramsChck
@@ -332,7 +223,7 @@ echo "------------------------- Dependencies check-in -------------------------"
 # check warden server directory
 wardenDirChck
 
-# 
+# check previous Warden server instalation
 oldPackageChck
 
 # Perl interpreter test
@@ -344,22 +235,49 @@ modulesChck
 echo
 echo "------------------------- Update process --------------------------------"
 
-
 # backup old warden server installation
 backup
 
 # make warden server directory
 updateWardenDir
 
-# create conf files
-updateConfFiles
+# create server configuration file
+echo -n "Updating Warden server configuration file ... "
+doTemplate \
+        _BASEDIR_       "$basedir" \
+        < $server_conf_tmpl \
+        > $server_conf && echo "OK" || errClean
+
+# create Apache configuration file
+echo -n "Updating Apache configuration file ... "
+doTemplate \
+        _CERT_FILE_     "$cert_file" \
+        _KEY_FILE_      "$key_file" \
+        _CA_FILE_       "$ca_file" \
+        _LIB_           "$lib" \
+        < $apache_conf_tmpl \
+        > $apache_conf && echo "OK" || errClean
+
+# create wardenWatchdog configuration file
+echo -n "Updating Warden Watchdog configuration file ... "
+doTemplate \
+        _HOSTNAME_      "$hostname" \
+        < $watchdog_conf_tmpl \
+        > $watchdog_conf && echo "OK" || errClean
+
+# create MANIFEST file
+createManifest
+
+# crate symlinks from warden server bin to user path (if -s option is set)
+[[ ! -z "$symbin" ]] && [[ -d "$symbin" ]] && [[ -w "$symbin" ]] && createSymlinks
 
 echo
 echo "Please check updated configuration files:"
-echo " - $apache_conf_file"
-echo " - $server_conf_file"
+echo " - $server_conf"
+echo " - $server_conf"
+echo " - $watchdog_conf"
 echo
-echo "Warden server directory: $server_path"
+echo "Warden server directory: $basedir"
 echo
 echo "Update from $old_package_version to $package_version package was SUCCESSFUL!!!"
 echo
@@ -367,6 +285,6 @@ echo "Please follow post-update steps in ${doc}/UPDATE!"
 echo
 
 # cleanup section
-rm -rf $err $backup
+rm -f "$err" "$backup"
 
 exit 0
-- 
GitLab