From f68030eb8e163299e2b7ef1c4e9401dd7b678170 Mon Sep 17 00:00:00 2001
From: Tomas Plesnik <plesnik@ics.muni.cz>
Date: Fri, 27 Sep 2013 20:04:28 +0200
Subject: [PATCH] pridano generovani konfiguracnich souboru z sablon; pridan
 parametr -s pro vyber adresare pro symlinky na bin adresar serveru; uprava
 helpu; pridano mazani tmp souboru pri zjistovani zavislych perl modulu ve
 funkci err; zmena nazvu server_dir na basedir

---
 src/warden-server/sh/install.sh | 186 +++++++++++---------------------
 1 file changed, 65 insertions(+), 121 deletions(-)

diff --git a/src/warden-server/sh/install.sh b/src/warden-server/sh/install.sh
index c406af1..0bb6e67 100755
--- a/src/warden-server/sh/install.sh
+++ b/src/warden-server/sh/install.sh
@@ -14,15 +14,16 @@ VERSION="2.2"
 #-------------------------------------------------------------------------------
 usage()
 {
-	echo "Usage: ${0##*/} -d <directory> -k <ssl_key_file> -c <ssl_cert_file> -a <ssl_ca_file> [-hV]"
-	echo "-d <directory>            installation directory"
+	echo "Usage: ${0##*/} -d <directory> -k <ssl_key_file> -c <ssl_cert_file> -a <ssl_ca_file> [-s <directory>] [-hV]"
+	echo "-d <directory>            installation directory of Warden server"
 	echo "-k <ssl_key_file>         path to SSL certificate key file"
 	echo "-c <ssl_cert_file>        path to SSL certificate file"
 	echo "-a <ssl_ca_file>          path to CA certificate file"
+	echo "-s <directory>            directory for symlinks to Warden server control scripts (optional)"
 	echo "-h                        print this help"
 	echo "-V                        print script version number and exit"
 	echo
-	echo "Example: # ./${0##*/} -d /opt -k /etc/ssl/private/server.key -c /etc/ssl/certs/server.pem -a /etc/ssl/certs/tcs-ca-bundle.pem"
+	echo "Example: # ./${0##*/} -d /opt -k /etc/ssl/private/server.key -c /etc/ssl/certs/server.pem -a /etc/ssl/certs/tcs-ca-bundle.pem -s /usr/local/bin"
 	echo
 	echo "For more information about installation process, see README file (section Installation)."
 	echo
@@ -41,7 +42,7 @@ err()
 {
 	echo "FAILED!"
 	cat "$err"
-	rm -f "$err"
+	rm -f "$err" "$modules_file"
 	echo
 	echo "Installation of $package_version package FAILED!!!"
 	exit 1
@@ -52,9 +53,9 @@ errClean()
 {
 	echo "FAILED!"
 	echo " -> Uninstalling server package ... OK"
-	rm -rf "$server_dir/"* > /dev/null 2>&1
+	rm -rf "$basedir/"* > /dev/null 2>&1	# BUG: smaze vse na co ma USER pravo
 	cat "$err"
-	rm -f "$err"
+	rm -f "$err" "$modules_file"
 	echo
 	echo "Installation of $package_version package FAILED!!!"
 	exit 1
@@ -63,7 +64,7 @@ errClean()
 
 paramsChck()
 {
-	if [ -z "$server_dir" ]; then
+	if [ -z "$basedir" ]; then
 		echo "Parameter -d <directory> is not set!"
 		exit 1
 	fi
@@ -88,13 +89,17 @@ paramsChck()
 
 oldPackageChck()
 {
+	echo -n "Checking previous Warden server installation ... "
 	old_package_version_file="${etc}/package_version"
 	if [ -f "$old_package_version_file" ]; then
-		old_package_version=$(< "$old_package_version_file") || err
+		echo "FAILED!"
+		echo
+		old_package_version=$(< "$old_package_version_file")
 		echo "Sorry, but $old_package_version package is installed!"
 		echo "For update of warden server package please use update.sh"
 		exit 1
 	fi
+	echo "OK"
 }
 
 
@@ -105,6 +110,7 @@ perlChck()
 		echo "OK"
 	else
 		echo "FAILED!"
+		echo
 		echo "Error: Perl interpreter is not installed!"
 		exit 1
 	fi
@@ -124,111 +130,31 @@ modulesChck()
 createWardenDir()
 {
 	echo -n "Creating Warden server directory ... "
-	test -d "$server_dir" && test -w "$server_dir" || mkdir -p "$server_dir" 2> "$err" || err
-	cp -R "${dirname}/warden-server/"* "$server_dir" 2> "$err" && echo "OK" || errClean
-	cp "${dirname}/uninstall.sh" "$server_dir"
+	test -d "$basedir" && test -w "$basedir" || mkdir -p "$basedir" 2> "$err" || err
+	cp -R "${dirname}/warden-server/"* "$basedir" 2> "$err" && echo "OK" || errClean
+	rm -f "${etc}/${server_conf_tmpl##*/}" "${etc}/${apache_conf_tmpl##*/}"
+	cp "${dirname}/uninstall.sh" "$basedir"
 }
 
-makeServerConf()
-{
-	echo -n "Creating server configuration file ... "
-	echo "# 
-# warden-server.conf - configuration file for Warden server
-#
-
-#-------------------------------------------------------------------------------
-# BASEDIR - base directory of Warden server
-#-------------------------------------------------------------------------------
-\$BASEDIR = \"${server_dir}\";
-
-#-------------------------------------------------------------------------------
-# SYSLOG - enable/disable syslog logging
-#-------------------------------------------------------------------------------
-\$SYSLOG = 1;
-
-#-------------------------------------------------------------------------------
-# SYSLOG_VERBOSE - enable/disable logging in verbose mode (stack info added)
-#-------------------------------------------------------------------------------
-\$SYSLOG_VERBOSE = 1;
-
-#-------------------------------------------------------------------------------
-# SYSLOG_FACILITY - syslog facility
-#-------------------------------------------------------------------------------
-\$SYSLOG_FACILITY = \"local7\";
-
-#-------------------------------------------------------------------------------
-# DB_NAME - MySQL database name of Warden server
-#-------------------------------------------------------------------------------
-\$DB_NAME = \"warden\";
-
-#-------------------------------------------------------------------------------
-# DB_USER - MySQL database user of Warden server
-#-------------------------------------------------------------------------------
-\$DB_USER = \"warden\";
-
-#-------------------------------------------------------------------------------
-# DB_PASS - MySQL database password of Warden server
-#-------------------------------------------------------------------------------
-\$DB_PASS = \"\";
-
-#-------------------------------------------------------------------------------
-# DB_HOST - MySQL database host
-#-------------------------------------------------------------------------------
-\$DB_HOST = \"localhost\";
 
-#-------------------------------------------------------------------------------
-# MAX_EVENTS_LIMIT - server limit of maximum number of events that can be
-#                    delivered to one client in one batch
-#-------------------------------------------------------------------------------
-\$MAX_EVENTS_LIMIT = 1000000;
-
-#-------------------------------------------------------------------------------
-# VALID_STRINGS - validation hash containing allowed event attributes
-#-------------------------------------------------------------------------------
-%VALID_STRINGS = (
-  \"type\" => [\"portscan\", \"bruteforce\", \"probe\", \"spam\", \"phishing\", \"botnet_c_c\", \"dos\", \"malware\", \"copyright\", \"webattack\", \"test\", \"other\", \"_any_\"],
-  \"source_type\" => [\"IP\", \"URL\", \"Reply-To:\"]
-);" > "$server_conf" 2> "$err" && echo "OK" || errClean
-}
-
-makeApacheConf()
+doTemplate()
 {
-	echo -n "Creating Apache configuration file ... "
-	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
-
-SSLCertificateFile    $cert_file
-SSLCertificateKeyFile $key_file
-SSLCACertificateFile  $ca_file
-
-PerlOptions +Parent
-PerlSwitches -I $lib
-
-<Location /Warden>
-        SetHandler perl-script
-        PerlHandler Warden::ApacheDispatch
-        SSLOptions +StdEnvVars
-</Location>" > "$apache_conf" 2> "$err" && echo "OK" || errClean
+        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}"
 }
 
 
 createSymlinks()
 {
-	echo "Creating symbolic links to local bin path..."
+	echo "Creating symbolic links to $symbin ..."
 	for file in "${bin}/"*
 	do
-		echo "- making symlink: ${local_bin}/${file##*/} -> $file"
-		ln -s "$file" "${local_bin}/${file##*/}"
+		echo "- making symlink: ${symbin}/${file##*/} -> $file"
+		ln -s "$file" "${symbin}/${file##*/}"
 	done
 }
 
@@ -237,40 +163,46 @@ createSymlinks()
 #				MAIN
 #-------------------------------------------------------------------------------
 # read input
-while getopts "d:k:c:a:Vh" options; do
+while getopts "d:k:c:a:s:Vh" options; do
 	case "$options" in
-		d ) server_dir="$OPTARG";;
+		d ) basedir="$OPTARG";;
 		k ) key_file="$OPTARG";;
 		c ) cert_file="$OPTARG";;
 		a ) ca_file="$OPTARG";;
+		s ) symbin="$OPTARG";;
 		h ) usage;;
 		V ) version;;
 		* ) usage;;
 	esac
 done
 
+# remove last char (slash) from name of directories
+[[ $basedir == */ ]] && basedir="${basedir%?}"
+[[ $symbin == */ ]] && symbin="${symbin%?}"
+
 # params test
 paramsChck
 
 # set variables
+err="/tmp/warden-err"
+modules_file="/tmp/warden-modules.txt"
 dirname=${0%/*}
-package_version=$(< "${dirname}/warden-server/etc/package_version") || err
-bin="${server_dir}/bin"
-local_bin="/usr/local/bin"
-etc="${server_dir}/etc"
+bin="${basedir}/bin"
+lib="${basedir}/lib"
+doc="${basedir}/doc"
+etc="${basedir}/etc"
 server_conf="${etc}/warden-server.conf"
 apache_conf="${etc}/warden-apache.conf"
-lib="${server_dir}/lib"
-doc="${server_dir}/doc"
-err="/tmp/warden-err"
-modules_file="/tmp/warden-modules.txt"
+server_conf_tmpl="${dirname}/warden-server/etc/warden-server.conf.tmpl"
+apache_conf_tmpl="${dirname}/warden-server/etc/warden-apache.conf.tmpl"
+package_version=$(< "${dirname}/warden-server/etc/package_version")
+
+echo
+echo "----------------------- Checking for Dependencies -----------------------"
 
 # check if warden-server is installed
 oldPackageChck
 
-echo
-echo "------------------------- Dependencies check-in -------------------------"
-
 # Perl interpreter test
 perlChck
 
@@ -284,25 +216,37 @@ echo "------------------------- Installation process --------------------------"
 createWardenDir
 
 # create server configuration file
-makeServerConf
+echo -n "Creating server configuration file ... "
+doTemplate \
+        _BASEDIR_       "$basedir" \
+        < $server_conf_tmpl \
+        > $server_conf && echo "OK" || errClean
 
 # create Apache configuration file
-makeApacheConf
-
-# crate symlinks from warden server bin directory to /usr/local/bin
-createSymlinks
+echo -n "Creating 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
+
+# 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 configuration files:"
 echo " - $server_conf"
 echo " - $apache_conf"
 echo
-echo "Warden server directory: $server_dir"
+echo "Warden server directory: $basedir"
 echo
 echo "Please follow post-installation steps in ${doc}/INSTALL!"
 echo
 echo "Installation of $package_version package was SUCCESSFUL!!!"
 echo
+
 # cleanup section
 rm -f "$err" "$modules_file"
 
-- 
GitLab