From 3f29a9cc8c7ff836534c08117c0f449a30153bbb Mon Sep 17 00:00:00 2001
From: Tomas Plesnik <plesnik@ics.muni.cz>
Date: Thu, 26 Sep 2013 17:19:40 +0200
Subject: [PATCH] zapracovany poznamky z #628

---
 src/warden-server/sh/install.sh | 149 ++++++++++++--------------------
 1 file changed, 55 insertions(+), 94 deletions(-)

diff --git a/src/warden-server/sh/install.sh b/src/warden-server/sh/install.sh
index 92fdd8b..c406af1 100755
--- a/src/warden-server/sh/install.sh
+++ b/src/warden-server/sh/install.sh
@@ -10,22 +10,21 @@
 VERSION="2.2"
 
 #-------------------------------------------------------------------------------
-#				FUNCTIONS
+#				Script functions
 #-------------------------------------------------------------------------------
 usage()
 {
-	echo "Usage: `basename $0` [-d <directory>] [-k <ssl_key_file>] [-c <ssl_cert_file>] [-a <ssl_ca_file>] [-hV]"
-	echo "-d <directory>            installation directory (default: /opt)"
+	echo "Usage: ${0##*/} -d <directory> -k <ssl_key_file> -c <ssl_cert_file> -a <ssl_ca_file> [-hV]"
+	echo "-d <directory>            installation directory"
 	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 "-h                        print this help"
 	echo "-V                        print script version number and exit"
 	echo
-	echo "Example: # ./`basename $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"
 	echo
-	echo "Note: You must be root for running this script."
-	echo "      For more information about installation process, see README file (section Installation)."
+	echo "For more information about installation process, see README file (section Installation)."
 	echo
 	exit 0
 }
@@ -33,7 +32,7 @@ usage()
 
 version()
 {
-	echo "`basename ${0}` - current version is $VERSION"
+	echo "${0##*/} - current version is $VERSION"
 	exit 0
 }
 
@@ -41,8 +40,8 @@ version()
 err()
 {
 	echo "FAILED!"
-	cat $err
-	rm -rf $err
+	cat "$err"
+	rm -f "$err"
 	echo
 	echo "Installation of $package_version package FAILED!!!"
 	exit 1
@@ -53,50 +52,45 @@ errClean()
 {
 	echo "FAILED!"
 	echo " -> Uninstalling server package ... OK"
-	rm -rf $server_path > /dev/null 2>&1
-	cat $err
-	rm -rf $err
+	rm -rf "$server_dir/"* > /dev/null 2>&1
+	cat "$err"
+	rm -f "$err"
 	echo
 	echo "Installation of $package_version package FAILED!!!"
 	exit 1
 }
 
 
-rootChck()
-{
-	if [ $UID -ne 0 ]; then
-		echo "You must be root for running this script!"
-		exit 1
-	fi
-}
-
-
 paramsChck()
 {
-	if [ -z $prefix ]; then
+	if [ -z "$server_dir" ]; then
 		echo "Parameter -d <directory> is not set!"
 		exit 1
 	fi
-	if [ -z $key ]; then
+	if [ -z "$key_file" ]; then
 		echo "Parameter -k <ssl_key_file> is not set!"
 		exit 1
 	fi
-	if [ -z $cert ]; then
+	if [ -z "$cert_file" ]; then
 		echo "Parameter -c <ssl_cert_file> is not set!"
 		exit 1
 	fi
-	if [ -z $ca_file ]; then
+	if [ -z "$ca_file" ]; then
 		echo "Parameter -a <ssl_ca_file> is not set!"
 		exit 1
 	fi
 }
 
 
+#-------------------------------------------------------------------------------
+#				Installation functions
+#-------------------------------------------------------------------------------
+
 oldPackageChck()
 {
 	old_package_version_file="${etc}/package_version"
-	if [ -f $old_package_version_file ]; then
-		old_package_version=`cat $old_package_version_file`
+	if [ -f "$old_package_version_file" ]; then
+		old_package_version=$(< "$old_package_version_file") || err
 		echo "Sorry, but $old_package_version package is installed!"
 		echo "For update of warden server package please use update.sh"
 		exit 1
@@ -118,31 +112,23 @@ perlChck()
 
 modulesChck()
 {
-	for module in ${modules[@]};
+	sed '/^use [A-Z]/!d; /Warden/d' `find "${dirname}/warden-server" -type f` 2>/dev/null | cut -f 2 -d " " | sed 's/;//' | sort -u > "$modules_file"
+	for module in $(<"$modules_file");
 	do
 		echo -n "Checking $module module ... "
-		if perl -e "use $module" 2> $err; then
-			echo "OK"
-		else
-			err
-		fi
+		perl -e "use $module" 2> "$err" && echo "OK" || err
 	done
 }
 
 
-makeWardenDir()
+createWardenDir()
 {
 	echo -n "Creating Warden server directory ... "
-	test -d $prefix || mkdir -p $prefix
-	if cp -R ${dirname}/warden-server $prefix 2> $err; then
-		echo "OK"
-	else
-		errClean
-	fi
-	cp ${dirname}/uninstall.sh $server_path
+	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"
 }
 
-
 makeServerConf()
 {
 	echo -n "Creating server configuration file ... "
@@ -153,7 +139,7 @@ makeServerConf()
 #-------------------------------------------------------------------------------
 # BASEDIR - base directory of Warden server
 #-------------------------------------------------------------------------------
-\$BASEDIR = \"${server_path}\";
+\$BASEDIR = \"${server_dir}\";
 
 #-------------------------------------------------------------------------------
 # SYSLOG - enable/disable syslog logging
@@ -202,13 +188,7 @@ makeServerConf()
 %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; ret_val=`echo $?`
-
-	if [ $ret_val -eq 0 ]; then
-		echo "OK"
-	else
-		errClean
-	fi
+);" > "$server_conf" 2> "$err" && echo "OK" || errClean
 }
 
 makeApacheConf()
@@ -227,8 +207,8 @@ SSLOptions +StdEnvVars +ExportCertData
 
 SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
 
-SSLCertificateFile    $cert
-SSLCertificateKeyFile $key
+SSLCertificateFile    $cert_file
+SSLCertificateKeyFile $key_file
 SSLCACertificateFile  $ca_file
 
 PerlOptions +Parent
@@ -238,23 +218,17 @@ PerlSwitches -I $lib
         SetHandler perl-script
         PerlHandler Warden::ApacheDispatch
         SSLOptions +StdEnvVars
-</Location>" > $apache_conf 2> $err; ret_val=`echo $?`
-
-	if [ $ret_val -eq 0 ]; then
-		echo "OK"
-	else
-		errClean
-	fi
+</Location>" > "$apache_conf" 2> "$err" && echo "OK" || errClean
 }
 
 
 createSymlinks()
 {
-	echo "Creating symbolic links ..."
-	for file in `ls -1 $bin`
+	echo "Creating symbolic links to local bin path..."
+	for file in "${bin}/"*
 	do
-		echo "- making symlink: ${local_bin}/$file -> ${bin}/$file"
-		ln -s ${bin}/$file ${local_bin}/$file
+		echo "- making symlink: ${local_bin}/${file##*/} -> $file"
+		ln -s "$file" "${local_bin}/${file##*/}"
 	done
 }
 
@@ -262,47 +236,34 @@ createSymlinks()
 #-------------------------------------------------------------------------------
 #				MAIN
 #-------------------------------------------------------------------------------
-
-# list of used Perl modules
-modules=(SOAP::Lite SOAP::Transport::HTTP DBI DBD::mysql Format::Human::Bytes Sys::Syslog File::Basename Net::CIDR::Lite DateTime Getopt::Std Switch IO::Socket::SSL MIME::Base64 Crypt::X509 Carp FindBin)
-
 # read input
 while getopts "d:k:c:a:Vh" options; do
-	case $options in
-		d ) prefix=$OPTARG;;
-		k ) key=$OPTARG;;
-		c ) cert=$OPTARG;;
-		a ) ca_file=$OPTARG;;
+	case "$options" in
+		d ) server_dir="$OPTARG";;
+		k ) key_file="$OPTARG";;
+		c ) cert_file="$OPTARG";;
+		a ) ca_file="$OPTARG";;
 		h ) usage;;
 		V ) version;;
 		* ) usage;;
 	esac
 done
 
-# root test
-rootChck
-
 # params test
 paramsChck
 
-# create variables
-dirname=`dirname $0`
-hostname=`hostname -f`
-key_file=`basename $key`
-cert_file=`basename $cert`
-package_version=`cat ${dirname}/warden-server/etc/package_version`
-
-[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix
-server_path="${prefix}/warden-server"
-bin="${server_path}/bin"
+# set variables
+dirname=${0%/*}
+package_version=$(< "${dirname}/warden-server/etc/package_version") || err
+bin="${server_dir}/bin"
 local_bin="/usr/local/bin"
-etc="${server_path}/etc"
+etc="${server_dir}/etc"
 server_conf="${etc}/warden-server.conf"
 apache_conf="${etc}/warden-apache.conf"
-var="${server_path}/var"
-lib="${server_path}/lib"
-doc="${server_path}/doc"
+lib="${server_dir}/lib"
+doc="${server_dir}/doc"
 err="/tmp/warden-err"
+modules_file="/tmp/warden-modules.txt"
 
 # check if warden-server is installed
 oldPackageChck
@@ -320,7 +281,7 @@ echo
 echo "------------------------- Installation process --------------------------"
 
 # make warden server directory
-makeWardenDir
+createWardenDir
 
 # create server configuration file
 makeServerConf
@@ -333,16 +294,16 @@ createSymlinks
 
 echo
 echo "Please check configuration files:"
-echo " - ${server_conf}"
-echo " - ${apache_conf}"
+echo " - $server_conf"
+echo " - $apache_conf"
 echo
-echo "Warden server directory: $server_path"
+echo "Warden server directory: $server_dir"
 echo
 echo "Please follow post-installation steps in ${doc}/INSTALL!"
 echo
 echo "Installation of $package_version package was SUCCESSFUL!!!"
 echo
 # cleanup section
-rm -rf $err
+rm -f "$err" "$modules_file"
 
 exit 0
-- 
GitLab