#!/bin/sh
# This script is written by DirectAdmin and Martynas Bendorius (smtalk)

BUILDSCRIPT_VER=1.2.43
NAME=custombuild

OS=`uname`
WORKDIR=/usr/local/directadmin/${NAME}
OPTIONS_CONF=${WORKDIR}/options.conf
VERSIONS_FILE=${WORKDIR}/versions.txt
VERSIONS_FILE_CL=${WORKDIR}/versions_cl.txt
LOCKFILE=${WORKDIR}/.custombuild
LOGFILE=${WORKDIR}/custombuild.log
PROFTPD_PREFIX=/usr
B64=0
CPU_CORES=1

LANG=C

LOG_IP=localhost
if [ `who | wc -l` -gt 0 ]; then
	if [ ${OS} = "FreeBSD" ]; then
		LOG_IP=`env | grep REMOTEHOST | cut -d= -f2`
	else
		LOG_IP=`echo $SSH_CLIENT | cut -d' ' -f1`
	fi
fi

if [ ! -d ${WORKDIR}/patches ]; then
	mkdir -p ${WORKDIR}/patches
	chmod 700 ${WORKDIR}/patches
fi

if [ ! -e ${LOGFILE} ]; then
	touch ${LOGFILE}
	chmod 600 ${LOGFILE}
else
	if [ ${OS} = "FreeBSD" ]; then
		LOGSIZE=`stat -f %z ${LOGFILE}`
	else
		LOGSIZE=`stat -c %s ${LOGFILE}`
	fi
	
	#Rotate the logfile if the size is >10MB
	if [ ${LOGSIZE} -gt 10485760 ]; then
		rm -f ${LOGFILE}.1
		mv ${LOGFILE} ${LOGFILE}.1
		touch ${LOGFILE}
		chmod 600 ${LOGFILE}
	fi
fi

showVersion(){
	echo "${BUILDSCRIPT_VER}";
}

B64COUNT=`uname -m | grep -c 64`
if [ "$B64COUNT" -eq 1 ]; then
	B64=1
	LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/lib64:/lib
	export LD_LIBRARY_PATH
fi

if [ ${OS} = "FreeBSD" ]; then
	#if [ "`sysctl -a | grep kern.threads.virtual_cpu | cut -d' ' -f2`" -gt 1 ]; then
	#	CPU_CORES="`sysctl -a | grep kern.threads.virtual_cpu | cut -d' ' -f2`"
	#fi
	CPU_CORES=`/sbin/sysctl hw.ncpu | cut -d\  -f2`
	PROFTPD_PREFIX=/usr/local
else
	if [ "`cat /proc/cpuinfo | grep 'model name' | wc -l`" -gt 0 ]; then
		CPU_CORES="`cat /proc/cpuinfo | grep 'model name' | wc -l`"
	fi
fi

#check path for /usr/local/bin
COUNT=`echo "${PATH}" | grep -c /usr/local/bin:`
if [ "${COUNT}" -eq 0 ]; then
	export PATH=/usr/local/bin:$PATH
fi

DA_MYSQL=/usr/local/directadmin/conf/mysql.conf
#Set MySQL host
if [ -s $DA_MYSQL ] && [ `grep -c -e "^host=" ${DA_MYSQL}` -gt "0" ]; then
	MYSQLHOST=`grep "^host=" ${DA_MYSQL} | cut -d= -f2`
else
	MYSQLHOST=localhost
fi

# Main variables
HTTPDDIR=/etc/httpd
HTTPDCONF=/etc/httpd/conf
HTTPD_CONF=${HTTPDCONF}/httpd.conf

DEBIAN_VERSION=/etc/debian_version
WWWDIR=/var/www/html

# Variables for jailed shell
SHELLS=/etc/shells
JAIL_DIR=${WORKDIR}/jail

DACONF_FILE=/usr/local/directadmin/conf/directadmin.conf
DACONF_TEMPLATE_FILE=/usr/local/directadmin/data/templates/directadmin.conf
SERVICES=/usr/local/directadmin/data/admin/services.status

#CWD=`pwd`
CWD=${WORKDIR}
FORCE=0
HIDE_CHANGES=0

# Applications variables
APPUSER=webapps
APPGROUP=${APPUSER}
APP_TMP=/var/www/tmp

ECHO=echo
if [ "${OS}" = "FreeBSD" ]; then
        WGET=/usr/local/bin/wget
        TAR=/usr/bin/tar
        CHOWN=/usr/sbin/chown
	MYSQL_DATA=/home/mysql
	MYSQL_BIN=/usr/local/mysql/bin/mysql
else
        WGET=/usr/bin/wget
        TAR=/bin/tar
        CHOWN=/bin/chown
	if [ -e /etc/debian_version ]; then
		MYSQL_DATA=/home/mysql
		MYSQL_BIN=/usr/local/mysql/bin/mysql
		ECHO=/bin/echo
	else
		MYSQL_DATA=/var/lib/mysql
		MYSQL_BIN=/usr/bin/mysql
	fi
fi
WGET_CONNECT_OPTIONS="--connect-timeout=5 --read-timeout=10 --tries=3"

# Check if workdir exists
if [ ! -d ${WORKDIR} ]; then
	echo "Directory ${WORKDIR} does not exist."
	exit 1
fi

# Write options.conf
if [ ! -e ${OPTIONS_CONF} ]; then
	echo "Cannot find ${OPTIONS_CONF}, writing defaults."
	echo -n "" > ${OPTIONS_CONF}
	echo "#PHP settings. default_php possible values - 5 or 6, php5_ver - 5.2, 5.3, 5.4 or 5.5" >> ${OPTIONS_CONF}
	echo "default_php=5" >> ${OPTIONS_CONF}
	echo "php5_ver=5.3" >> ${OPTIONS_CONF}
	echo "php5_cli=yes" >> ${OPTIONS_CONF}
	echo "php5_cgi=no" >> ${OPTIONS_CONF}
	echo "php6_cli=no" >> ${OPTIONS_CONF}
	echo "php6_cgi=no" >> ${OPTIONS_CONF}
	echo "php_ini=no" >> ${OPTIONS_CONF}
	echo "#Possible values - recommended or dist" >> ${OPTIONS_CONF}
	echo "php_ini_type=recommended" >> ${OPTIONS_CONF}
	echo "ioncube=no" >> ${OPTIONS_CONF}
	echo "zend=no" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Possible values - 5.0, 5.1, 5.5, 5.6" >> ${OPTIONS_CONF}
	echo "mysql=5.5" >> ${OPTIONS_CONF}
	echo "mysql_inst=no" >> ${OPTIONS_CONF}
	echo "mysql_backup=yes" >> ${OPTIONS_CONF}
	echo "mysql_backup_dir=/usr/local/directadmin/custombuild/mysql_backups" >> ${OPTIONS_CONF}
	if [ -s ${DEBIAN_VERSION} ]; then
		echo "mysql_force_compile=no" >> ${OPTIONS_CONF}
	fi
	echo "" >> ${OPTIONS_CONF}
	echo "#Possible values - 1.3, 2.0, 2.2, 2.4" >> ${OPTIONS_CONF}
	echo "apache_ver=2.2" >> ${OPTIONS_CONF}
	echo "secure_htaccess=no" >> ${OPTIONS_CONF}
	echo "harden-symlinks-patch=yes" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Web applications" >> ${OPTIONS_CONF}
	echo "phpmyadmin=yes" >> ${OPTIONS_CONF}
	echo "phpmyadmin_ver=3" >> ${OPTIONS_CONF}
	echo "atmail=no" >> ${OPTIONS_CONF}
	echo "squirrelmail=yes" >> ${OPTIONS_CONF}
	echo "roundcube=yes" >> ${OPTIONS_CONF}
	echo "uebimiau=no" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Mail options" >> ${OPTIONS_CONF}
	echo "exim=no" >> ${OPTIONS_CONF}
	echo "eximconf=no" >> ${OPTIONS_CONF}
	echo "clamav=no" >> ${OPTIONS_CONF}
	echo "mailman=no" >> ${OPTIONS_CONF}
	echo "spamassassin=no" >> ${OPTIONS_CONF}
	echo "mail-header-patch=no" >> ${OPTIONS_CONF}
	echo "dovecot=yes" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Statistics" >> ${OPTIONS_CONF}
	echo "awstats=no" >> ${OPTIONS_CONF}
	echo "webalizer=yes" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#FTP options" >> ${OPTIONS_CONF}
	echo "proftpd=yes" >> ${OPTIONS_CONF}
	echo "pureftpd=no" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Jailed shell" >> ${OPTIONS_CONF}
	echo "jail=no" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Autoconf/automake/libtool options" >> ${OPTIONS_CONF}
	echo "autoconf=yes" >> ${OPTIONS_CONF}
	echo "automake=yes" >> ${OPTIONS_CONF}
	echo "libtool=yes" >> ${OPTIONS_CONF}
	echo "curl=yes" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#new version of zlib and libxml2 (experts only)" >> ${OPTIONS_CONF}
	echo "new_zlib=no" >> ${OPTIONS_CONF}
	echo "new_xml2=no" >> ${OPTIONS_CONF}
	echo "new_pcre=no" >> ${OPTIONS_CONF}
	echo "new_suphp=no" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Custombuild options" >> ${OPTIONS_CONF}
	echo "custombuild=1.2" >> ${OPTIONS_CONF}
	echo "autover=no" >> ${OPTIONS_CONF}
	echo "bold=yes" >> ${OPTIONS_CONF}
	echo "clean=yes" >> ${OPTIONS_CONF}
	echo "cleanapache=no" >> ${OPTIONS_CONF}
	echo "clean_old_tarballs=no" >> ${OPTIONS_CONF}
	echo "clean_old_webapps=yes" >> ${OPTIONS_CONF}
	echo "downloadserver=files.directadmin.com" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Cron settings" >> ${OPTIONS_CONF}
	echo "cron=no" >> ${OPTIONS_CONF}
	echo "cron_frequency=daily" >> ${OPTIONS_CONF}
	echo "email=email@domain.com" >> ${OPTIONS_CONF}
	echo "notifications=yes" >> ${OPTIONS_CONF}
	echo "da_autoupdate=no" >> ${OPTIONS_CONF}
	echo "updates=no" >> ${OPTIONS_CONF}
	echo "webapps_updates=yes" >> ${OPTIONS_CONF}
	echo "" >> ${OPTIONS_CONF}
	echo "#Cloudlinux settings" >> ${OPTIONS_CONF}
	echo "cloudlinux=no" >> ${OPTIONS_CONF}
	echo "cagefs=no" >> ${OPTIONS_CONF}
fi

# Check if options.conf exists
if [ ! -e ${OPTIONS_CONF} ]; then
	echo "Options file options.conf does not exist."
	exit 1
fi

####################################################

writeLog()
{
	echo "`date +'%Y-%m-%d %H:%m:%S'` ${LOG_IP}: $@" >> ${LOGFILE}
}

getVer()
{
        grep -m1 $1: ${VERSIONS_FILE} | cut -d ':' -f 2
}

getMD5()
{
        grep -m1 $1: ${VERSIONS_FILE} | cut -d ':' -f 3
}

removeLockfile()
{
	rm -f ${LOCKFILE}
	trap - INT TERM EXIT
}

do_exit()
{
	if [ "$2" != "" ]; then
		echo "$2";
	fi
	removeLockfile
	exit $1
}

getOpt()
{
		#$1 is option name
		#$2 is default value

		COUNT_OPT="`grep -c -e "^$1=" ${OPTIONS_CONF}`"
		if [ "${COUNT_OPT}" -eq 0 ]; then
			echo "$1=$2" >> ${OPTIONS_CONF}
		fi
		
		COUNT_OPT="`grep -c -e "^$1=" ${OPTIONS_CONF}`"
		if [ "${COUNT_OPT}" -ne 1 ]; then
			do_exit 1 "${OPTIONS_CONF} value $1 is damaged. Please check or delete it."
		fi
		
        grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2
}

have_php_system()
{
	#Checks to see if we can use system() based on the disable_functions
	if [ ! -s "${PHP_INI}" ]; then
		echo 1;
		return;
	fi
	
	C=`grep -c ^disable_functions ${PHP_INI}`
	if [ "${C}" -eq 0 ]; then
		echo 1;
		return;
	fi

	C=`grep ^disable_functions ${PHP_INI} | grep -c system`
	if [ "${C}" -eq 1 ]; then
		echo 0;
		return;
	fi

	echo 1;
	return;
}

secure_phpini(){
	if [ -e $1 ]; then
		COUNT_DISABLE_FUNCT="`grep -c -e disable_functions $1`"
		if [ "${COUNT_DISABLE_FUNCT}" -gt 0 ]; then
			CURRENT_DISABLE_FUNCT="`grep -m1 'disable_functions' $1`"
			NEW_DISABLE_FUNCT="exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source"
			perl -pi -e "s#${CURRENT_DISABLE_FUNCT}#disable_functions \= ${NEW_DISABLE_FUNCT}#" $1
		else
			echo "Unable to find disable_functions in $1"
		fi

		perl -pi -e 's/^register_globals = On/register_globals = Off/' $1
	fi
}

setOpt()
{
		#$1 is option name
		#$2 is value
		if [ "$1" = "email" ]; then
			OPT_VALUE1="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2 | cut -d\@ -f 1`"
			OPT_VALUE2="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2 | cut -d\@ -f 2`"
			OPT_NEW_VALUE1="`echo "$2" | cut -d\@ -f 1`"
			OPT_NEW_VALUE2="`echo "$2" | cut -d\@ -f 2`"
			perl -pi -e "s#$1=${OPT_VALUE1}\@${OPT_VALUE2}#$1=${OPT_NEW_VALUE1}\@${OPT_NEW_VALUE2}#" ${WORKDIR}/options.conf
			if [ "${HIDE_CHANGES}" = "0" ]; then
				echo "Changed ${boldon}$1${boldoff} option from ${boldon}${OPT_VALUE1}@${OPT_VALUE2}${boldoff} to ${boldon}$2${boldoff}"
			fi			
		else
			OPT_VALUE="`grep -m1 "^$1=" ${OPTIONS_CONF} | cut -d= -f2`"
			perl -pi -e "s#$1=${OPT_VALUE}#$1=$2#" ${WORKDIR}/options.conf
			if [ "${HIDE_CHANGES}" = "0" ]; then
				echo "Changed ${boldon}$1${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}$2${boldoff}"
			fi
		fi
}

#sets the value of $1 to $2 in the file $3
setVal()
{
        if [ ! -e $3 ]; then
                return;
        fi

        COUNT=`grep -c ${1}= ${3}`
        if [ "$COUNT" -eq 0 ]; then
                #ok, it's not there, add it.
                echo "$1=$2" >> $3
                return;
        else
                #ok, the value is already in the file $3, so use perl to regex it.
                perl -pi -e "s/`grep ${1}= ${3}`/${1}=${2}/" ${3}
        fi
}

#A > B: 1
#A = B: 0
#A < B: -1
#3rd option is descriptor
version_cmp()
{
	A=`echo $1 | cut -d- -f1`
	B=`echo $2 | cut -d- -f1`
	
	if [ "$A" = "" ] || [ "$B" = "" ]; then
		echo "version_cmp has a blank value when checking $3";
		return;
	fi

	A1=`echo $A | cut -d. -f1`
	B1=`echo $B | cut -d. -f1`

	if [ "$A1" -gt "$B1" ]; then
		echo  1;
		return;
	fi

	if [ "$A1" -lt "$B1" ]; then
		echo  -1;
		return;
	fi

	A2=`echo $A | cut -d. -f2`
	B2=`echo $B | cut -d. -f2`

	if [ "$A2" -gt "$B2" ]; then
		echo  1;
		return;
	fi

	if [ "$A2" -lt "$B2" ]; then
		echo  -1;
		return;
	fi

	A3=`echo $A | cut -d. -f3`
	B3=`echo $B | cut -d. -f3`

	if [ "$A3" = "" ] && [ "$B3" = "" ]; then
		echo 0;
		return;
	fi
	
	if [ "$A3" = "" ]; then
		if [ "$B3" = "0" ]; then
			echo 0;
		else
			echo 1
		fi
		return
	fi

	if [ "$B3" = "" ]; then
		if [ "$A3" = "0" ]; then
			echo 0;
		else
			echo -1
		fi
		return
	fi

	if [ "$A3" -gt "$B3" ]; then
		echo  1
		return
	fi

	if [ "$A3" -lt "$B3" ]; then
		echo  -1
		return
	fi

	echo 0;
}

####################################################

#CloudLinux
CLINUX_OPT=`getOpt cloudlinux no`
CAGEFS_OPT=`getOpt cagefs no`

# Read options.conf
APACHE_OPT=`getOpt apache_ver 2.2`
PROFTPD_OPT=`getOpt proftpd yes`
PUREFTPD_OPT=`getOpt pureftpd no`
JAIL_OPT=`getOpt jail no`
SPAMASSASSIN_OPT=`getOpt spamassassin no`
CLAMAV_OPT=`getOpt clamav no`
MAILMAN_OPT=`getOpt mailman no`

#Apache
SECURE_HTACCESS=`getOpt secure_htaccess no`
HARDEN_SYMLINK_PATCH=`getOpt harden-symlinks-patch yes`
OLD_APR_UTIL=`getOpt old_apr_util no`

#PHP
DEFPHP=`getOpt default_php 5`
PHP5_CLI_OPT=`getOpt php5_cli yes`
PHP5_CGI_OPT=`getOpt php5_cgi no`
PHP5_VER_OPT=`getOpt php5_ver 5.3`
PHP6_CLI_OPT=`getOpt php6_cli no`
PHP6_CGI_OPT=`getOpt php6_cgi no`
PHPINI_OPT=`getOpt php_ini no`
PHPINITYPE_OPT=`getOpt php_ini_type recommended`
ZEND_OPT=`getOpt zend no`
IONCUBE_OPT=`getOpt ioncube no`

#MySQL
MYSQLBACK_OPT=`getOpt mysql_backup yes`
MYSQL_OPT=`getOpt mysql 5.5`
MYSQLINST_OPT=`getOpt mysql_inst no`
MYSQLBACKDIR_OPT=`getOpt mysql_backup_dir /usr/local/directadmin/custombuild/mysql_backups`
if [ -s ${DEBIAN_VERSION} ]; then
	MYSQL_FORCE_COMPILE=`getOpt mysql_force_compile no`
else
	MYSQL_FORCE_COMPILE=no
fi

#Email
MAIL_HEADER_PATCH=`getOpt mail-header-patch no`
DOVECOT_OPT=`getOpt dovecot yes`
EXIM_OPT=`getOpt exim no`
EXIMCONF_OPT=`getOpt eximconf no`

#Applications
ATMAIL_OPT=`getOpt atmail no`
PHPMYADMIN_OPT=`getOpt phpmyadmin yes`
PHPMYADMIN_VER_OPT=`getOpt phpmyadmin_ver 3`
SQUIRRELMAIL_OPT=`getOpt squirrelmail yes`
ROUNDCUBE_OPT=`getOpt roundcube yes`
UEBIMIAU_OPT=`getOpt uebimiau no`

#Statistics software
AWSTATS_OPT=`getOpt awstats no`
WEBALIZER_OPT=`getOpt webalizer yes`

#Autoconf/automake/libtool
AUTOCONF_OPT=`getOpt autoconf yes`
AUTOMAKE_OPT=`getOpt automake yes`
LIBTOOL_OPT=`getOpt libtool yes`
CURL_OPT=`getOpt curl yes`

NEW_ZLIB_OPT=`getOpt new_zlib no`
NEW_XML2_OPT=`getOpt new_xml2 no`
NEW_SUPHP_OPT=`getOpt new_suphp no`

#this must be off by default.. since exim is linked against libpcre.so.0
NEW_PCRE_OPT=`getOpt new_pcre no`

#CustomBuild
AUTOVER_OPT=`getOpt autover no`
BOLD_OPT=`getOpt bold yes`
CLEAN_OPT=`getOpt clean yes`
CLEAN_OLD_TARBALLS_OPT=`getOpt clean_old_tarballs yes`
CLEAN_OLD_WEBAPPS_OPT=`getOpt clean_old_webapps yes`
CLEANAPACHE_OPT=`getOpt cleanapache yes`
#FILESERVER_OPT=`getOpt fileserver 1`
CUSTOMBUILD_OPT=`getOpt custombuild 1.2`
DOWNLOADSERVER_OPT=`getOpt downloadserver files.directadmin.com`

WEBPATH=http://${DOWNLOADSERVER_OPT}/services/custombuild
WEBPATH_SERVICES=http://${DOWNLOADSERVER_OPT}/services
WEBPATH_BACKUP=http://69.162.69.58/services/custombuild
WEBPATH_CL=http://repo.cloudlinux.com/cloudlinux/sources/da

#Cron
CRON_OPT=`getOpt cron no`
CRON_FREQUENCY_OPT=`getOpt cron_frequency daily`
EMAIL_OPT=`getOpt email email@domain.com`
NOTIFICATIONS_OPT=`getOpt notifications yes`
DA_AUTOUPDATE_OPT=`getOpt da_autoupdate no`
UPDATES_OPT=`getOpt updates no`
WEBAPPS_UPDATES_OPT=`getOpt webapps_updates yes`

####################################################

doRestartDA(){
	echo "action=directadmin&value=restart" >> /usr/local/directadmin/data/task.queue
	/usr/local/directadmin/dataskq
}

####################################################

doChecks()
{
		DA_BIN=/usr/local/directadmin/directadmin
		DA_VERSION_IS_INSECURE=false
		# Do some pre-definitions, so that we wouldn't output security in json if there are no security items
		if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
			DIRECTADMINV="`${DA_BIN} v | grep -m1 '^Version:' | grep -oE '[^ ]+$' | cut -d. -f2,3,4`"
			if [ "`version_cmp $DIRECTADMINV 1.52.0`" -lt 0 ]; then
				DA_VERSION_IS_INSECURE=true
				if /usr/local/directadmin/directadmin c | grep -m1 -q 'email_ftp_password_change=1'; then
					echo "Found DA version < 1.52.0. Setting email_ftp_password_change=0 in directadmin.conf for security purposes."
					setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE}
					setVal email_ftp_password_change 0 ${DACONF_FILE}
					doRestartDA
				fi
			fi
		fi

		if [ "${PHPINITYPE_OPT}" != "dist" ] && [ "${PHPINITYPE_OPT}" != "recommended" ]; then
		echo "Wrong php_ini_type set in options.conf."
		exit 1
		fi

		#if [ "${FILESERVER_OPT}" != "1" ] && [ "${FILESERVER_OPT}" != "2" ]; then
		#	echo "Wrong fileserver set in options.conf."
		#	exit 1
		#fi

		if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
			echo "Cannot install PHP6 and PHP5 as CLI."
			exit 1
		elif [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP6_CGI_OPT}" = "yes" ] || [ "${PHP5_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
			echo "Cannot install one PHP version as CLI and CGI."
			exit 1
		elif [ "${PHP6_CLI_OPT}" = "no" ] && [ "${PHP6_CGI_OPT}" = "no" ] && [ "${PHP5_CLI_OPT}" = "no" ] && [ "${PHP5_CGI_OPT}" = "no" ]; then
			echo "You do not have any PHP version set in options.conf."
			exit 1
		fi

		if [ "${PROFTPD_OPT}" = "yes" ] && [ "${PUREFTPD_OPT}" = "yes" ]; then
			echo "Cannot install both Pure-FTPd and ProFTPd. Please deselect one in options.conf file."
			exit 1
		fi

		if [ "${DEFPHP}" != "5" ] && [ "${DEFPHP}" != "6" ]; then
			echo "There is wrong default PHP in ${OPTIONS_CONF} set."
			exit 1
		fi

		if [ "${PHP5_VER_OPT}" != "5.2" ] && [ "${PHP5_VER_OPT}" != "5.3" ] && [ "${PHP5_VER_OPT}" != "5.4" ] && [ "${PHP5_VER_OPT}" != "5.5" ]; then
			echo "Wrong php5_ver value set in ${OPTIONS_CONF}."
			exit 1
		fi
		
		if [ "${APACHE_OPT}" != "1.3" ] && [ "${APACHE_OPT}" != "2.0" ] && [ "${APACHE_OPT}" != "2.2" ] && [ "${APACHE_OPT}" != "2.4" ]; then
			echo "Wrong apache_ver value set in ${OPTIONS_CONF}."
			exit 1
		fi

		if [ "${MYSQL_OPT}" != "5.0" ] && [ "${MYSQL_OPT}" != "5.1" ] && [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ] && [ "${MYSQL_OPT}" != "4.1" ]; then
			echo "Wrong mysql_ver value set in ${OPTIONS_CONF}."
			exit 1
		fi
		
		if [ "${PUREFTPD_OPT}" = "yes" ]; then
			if [ -s "$DACONF_FILE" ]; then
				UNIFIED_FTP=`/usr/local/directadmin/directadmin c | grep unified_ftp_password_file | cut -d= -f2`
				if [ "$UNIFIED_FTP" != "1" ]; then
					echo "unified_ftp_password_file is not set to 1.  You must convert before you can use pureftpd";
					echo "Please read this guide: http://www.directadmin.com/features.php?id=1134";
					echo "";
					echo "Simulation:";
					echo "     cd /usr/local/directadmin";
					echo "     echo 'action=convert&value=unifiedftp&simulate=yes' >> data/task.queue";
					echo "     ./dataskq d1";
					echo "";
					echo "Conversion:";
					echo "     cd /usr/local/directadmin";
					echo "     echo 'unified_ftp_password_file=1' >> conf/directadmin.conf";
					echo "     echo 'action=convert&value=unifiedftp' >> data/task.queue";
					echo "     ./dataskq d1";
					echo "";

					exit 1;
				fi
			fi
		fi
		
		if [ "${CRON_FREQUENCY_OPT}" != "daily" ] && [ "${CRON_FREQUENCY_OPT}" != "weekly" ] && [ "${CRON_FREQUENCY_OPT}" != "monthly" ]; then
			echo "Wrong cron_frequency value set in ${OPTIONS_CONF}";
			echo "Current value: ${CRON_FREQUENCY_OPT}";
			echo "Valid values: daily, weekly, or monthly";

			exit 1;
		fi
}

#Which PHP is the default one?
if [ "${DEFPHP}" = "5" ]; then
	ADDITPHP=6
elif [ "${DEFPHP}" = "6" ]; then
	ADDITPHP=5
fi

#Is the default PHP running as CGI?
DEFPHP_CGI="`grep php${DEFPHP}_cgi ${WORKDIR}/options.conf | cut -d= -f2`"

if [ "${DEFPHP_CGI}" = "no" ]; then
	APPGROUP=apache
fi

# Variables for bolded text
boldon=""
boldoff=""
if [ "${BOLD_OPT}" = "yes" ]; then
	boldon="`tput -Txterm bold`"
	boldoff="`tput -Txterm sgr0`"
fi

# Get apache version from directadmin.conf
DACONF_APACHE_VER=1.3
if [ -e ${DACONF_FILE} ]; then
	DACONF_APACHE_VER=`grep "^apache_ver=" ${DACONF_FILE} | cut -d= -f2`
fi

# Download versions.txt if AUTOVER_OPT is set to "yes"
if [ "${AUTOVER_OPT}" = "yes" ]; then
  wget ${WEBPATH}/versions.txt -O ${VERSIONS_FILE} 2> /dev/null
fi

# Check if ld.so.conf has /usr/local/lib
if [ ! -e /etc/ld.so.conf ] || [ "`grep -c -E '/usr/local/lib$' /etc/ld.so.conf`" = "0" ]; then
        echo "/usr/local/lib" >> /etc/ld.so.conf
        /sbin/ldconfig
fi

checkMD5()
{
	#$1 is the local file
	#$2 is the versions.txt variable
	#return values:
	#1 for error, try agian
	#0 for nothing to report.

	if [ ${OS} = "FreeBSD" ]; then
		MD5SUM=/sbin/md5
	else	
		MD5SUM=/usr/bin/md5sum
	fi
	
	if [ ! -e $MD5SUM ]; then
		echo 0;
		return;
	fi

	if [ ! -e "$1" ]; then
		echo 1;
	fi

	VMD5=`getMD5 $2`
	if [ "$VMD5" = "" ]; then
		echo 0;
		return;
	fi

	if [ ${OS} = "FreeBSD" ]; then
		FMD5=`$MD5SUM -q $1`
	else	
		FMD5=`$MD5SUM $1 | cut -d\  -f1`
	fi
	

	if [ "$FMD5" = "$VMD5" ]; then
		echo 0;
	else
		echo 1;
	fi
}

getFile() {
	cd ${CWD};

        if [ ! -s ${1} ]
        then
                $ECHO -e "Downloading\t\t$1...";
                if [ ${OS} = "FreeBSD" ]; then
                        fetch -o ${CWD}/${1} ${WEBPATH}/${1};
                else
                        ${WGET} ${WGET_CONNECT_OPTIONS} -O ${CWD}/${1} ${WEBPATH}/${1}
                fi

                if [ ! -s $1 ]
                then
			echo "Downloaded file ${CWD}/${1} does not exist or is empty after download";
			echo "cwd is: `pwd`";
	 		echo "Fileserver might be down, using the backup file server..";
                        if [ ${OS} = "FreeBSD" ]; then
                                fetch -o ${CWD}/${1} ${WEBPATH_BACKUP}/${1};
                        else
                                ${WGET} ${WGET_CONNECT_OPTIONS} -O ${CWD}/${1} ${WEBPATH_BACKUP}/${1};
                        fi
                fi

        else
                $ECHO -e "File already exists:\t${1}";
        fi

	if [ "$#" -eq 2 ]; then

		M=`checkMD5 ${1} ${2}`

		if [ "$M" != "0" ]; then
			echo "";
			echo "${boldon}*** MD5 Checksum for $1 Failed.  Redownloading...***${boldoff}";
			echo "";
			#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.

			rm -f $1
			getFile $1

			M=`checkMD5 ${1} ${2}`			

			if [ "$M" != "0" ]; then
				echo "";
				echo "";
				echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}";
				echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
				echo "Install continuing with this possibly corrupted file. (it may also be fine)";
				echo "";
				echo "";
			else
				echo "MD5 Checksum on $1 passed."
			fi

		else
			echo "MD5 Checksum on $1 passed."
		fi
	fi
}

getMD5CL()
{
        grep -m1 $1: ${VERSIONS_FILE_CL} | cut -d ':' -f 3
}

checkMD5CL()
{
	#$1 is the local file
	#$2 is the versions_cl.txt variable
	#return values:
	#1 for error, try agian
	#0 for nothing to report.

	MD5SUM=/usr/bin/md5sum
	
	if [ ! -e $MD5SUM ]; then
		echo 0;
		return;
	fi

	if [ ! -e "$1" ]; then
		echo 1;
	fi

	VMD5=`getMD5CL $2`
	if [ "$VMD5" = "" ]; then
		echo 0;
		return;
	fi

	FMD5=`$MD5SUM $1 | cut -d\  -f1`
	
	if [ "$FMD5" = "$VMD5" ]; then
		echo 0;
	else
		echo 1;
	fi
}

getFileCL() {
	cd ${CWD};

        if [ ! -s ${1} ]
        then
			$ECHO -e "Downloading\t\t$1...";
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${CWD}/${1} ${WEBPATH_CL}/${1}
			tar xzf ${1} --no-same-owner
        fi

	if [ "$#" -eq 2 ]; then

		M=`checkMD5CL ${1} ${2}`

		if [ "$M" != "0" ]; then
			echo "";
			echo "${boldon}*** MD5 Checksum for $1 Failed.  Redownloading...***${boldoff}";
			echo "";
			#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.

			rm -f $1
			getFileCL $1
            tar xzf ${1} --no-same-owner
			M=`checkMD5CL ${1} ${2}`			

			if [ "$M" != "0" ]; then
				echo "";
				echo "";
				echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}";
				echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
				echo "Install continuing with this possibly corrupted file. (it may also be fine)";
				echo "";
				echo "";
			fi
		fi
	fi
}

if [ "${CLINUX_OPT}" = "yes" ]; then
    ${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH_CL}/versions.txt -O ${VERSIONS_FILE_CL} 2> /dev/null
    getFileCL cl-apache-patches.tar.gz cl-apache-patches
	getFileCL mod_hostinglimits.tar.gz mod_hostinglimits
fi

####################################################

# Rewrite directadmin-vhosts.conf
doVhosts(){
	if [ ! -d ${HTTPDCONF}/extra ]; then
		mkdir -p ${HTTPDCONF}/extra
	fi
	echo -n '' > ${HTTPDCONF}/extra/directadmin-vhosts.conf
	#for i in `ls /usr/local/directadmin/data/users`; do { echo "Include /usr/local/directadmin/data/users/$i/httpd.conf" >> ${HTTPDCONF}/extra/directadmin-vhosts.conf; }; done;
	for i in `ls /usr/local/directadmin/data/users/*/httpd.conf`; do { echo "Include $i" >> ${HTTPDCONF}/extra/directadmin-vhosts.conf; }; done;
}

####################################################

# init.d scripts
if [ "${OS}" = "FreeBSD" ]; then
	INITDDIR=/usr/local/etc/rc.d
else
	INITDDIR=/etc/init.d
fi

# check if we have versions.txt
if [ ! -s ${VERSIONS_FILE} ]; then
	cd ${WORKDIR}
	getFile versions.txt
fi

if [ ! -s ${VERSIONS_FILE} ]; then
    echo "There is no versions.txt file. Unable to download."
    exit 0;
fi

#####################################################
# User Variables

DIRECTADMIN_VER=`getVer directadmin`
MODSSL_VER=`getVer mod_ssl`
if [ "${APACHE_OPT}" = "1.3" ]; then
	APACHE_VER=`getVer apache`
elif [ "${APACHE_OPT}" = "2.0" ]; then
	APACHE2_VER=`getVer apache2.0`
elif [ "${APACHE_OPT}" = "2.2" ]; then
	APACHE2_VER=`getVer apache2.2`
elif [ "${APACHE_OPT}" = "2.4" ]; then
	APACHE2_VER=`getVer apache2.4`
fi

APR_VER=`getVer apr`
APR_UTIL_VER=`getVer apr-util`
if [ "${OLD_APR_UTIL}" = "yes" ]; then
	APR_UTIL_VER=1.4.1

	#apache 2.4.7 requires apr-util 1.5.0
	#but with old_apr_util, we don't have it, so fall back.
	if [ "${APACHE_OPT}" = "2.4" ]; then
		AP2_MINOR_VER=`echo ${APACHE2_VER} | cut -d. -f3`
		if [ "${AP2_MINOR_VER}" -ge 7 ]; then
			echo "${boldon}old_apr_util=yes is set. Apache ${APACHE2_VER} requires apr-util 1.5.0 or newer.${boldoff}";
			echo "${boldon}Forcing the apache version back to 2.4.6${boldoff}";
			APACHE2_VER=2.4.6
		fi	
	fi
fi

PHP_INI_SOURCE=php.ini-dist
if [ "${PHP5_VER_OPT}" = "5.2" ]; then
	PHP5_VER=`getVer php5`
elif [ "${PHP5_VER_OPT}" = "5.3" ]; then
	PHP5_VER=`getVer php53`
	PHP_INI_SOURCE=php.ini-production
elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
	PHP5_VER=`getVer php54`
	PHP_INI_SOURCE=php.ini-production
elif [ "${PHP5_VER_OPT}" = "5.5" ]; then
	PHP5_VER=`getVer php55`
	PHP_INI_SOURCE=php.ini-production
fi
PHP6_VER=`getVer php6`

if [ "${MYSQL_OPT}" = "5.0" ]; then
	MYSQL_VER=`getVer mysql5.0`
	MYSQL_REL=`getVer mysql5.0_release`
elif [ "${MYSQL_OPT}" = "5.1" ]; then
	MYSQL_VER=`getVer mysql5.1`
	MYSQL_REL=`getVer mysql5.1_release`
elif [ "${MYSQL_OPT}" = "5.5" ]; then
	MYSQL_VER=`getVer mysql5.5`
	MYSQL_REL=`getVer mysql5.5_release`
elif [ "${MYSQL_OPT}" = "5.6" ]; then
	MYSQL_VER=`getVer mysql5.6`
	MYSQL_REL=`getVer mysql5.6_release`
elif [ "${MYSQL_OPT}" = "4.1" ]; then
	MYSQL_VER=`getVer mysql4.1`
	MYSQL_REL=`getVer mysql4.1_release`
fi

if [ "$MYSQL_REL" = "" ]; then
        MYSQL_REL=0;
fi

#http://choon.net/opensource/php/php-${PHP_VER}-mail-header.patch
APPLY_MAIL_HEADER_PATCH=${MAIL_HEADER_PATCH}
MAIL_HEADER_FILE_PHP5=php-${PHP5_VER}-mail-header.patch

if [ "${APPLY_MAIL_HEADER_PATCH}" = "yes" ]; then
	if [ "${PHP5_VER_OPT}" != "5.2" ]; then
		echo "mail-header-patch=yes is set in the options.conf, but is not required with this php version.";
		echo "To enable the X-Mail header, set mail.add_x_header to 1 in your php.ini";
	fi
fi

PCRE_VER=`getVer pcre`
if [ "$NEW_PCRE_OPT" = "yes" ]; then
	PCRE_VER=`getVer pcre_current`
fi

CURL_VER=`getVer curl`
ZLIB_VER=`getVer zlib`
MCRYPT_VER=`getVer mcrypt`

if [ "${APACHE_OPT}" = "1.3" ]; then
	MODPERL_VER=`getVer mod_perl`
	MODPERL_INDEX=mod_perl
elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
	MODPERL_VER=`getVer mod_perl2`
	MODPERL_INDEX=mod_perl2
fi

MHASH_VER=`getVer mhash`

SUPHP_VER=`getVer suphp`
if [ "$NEW_SUPHP_OPT" = "yes" ]; then
	SUPHP_VER=`getVer suphp_current`
fi

DOVECOT_VER=`getVer dovecot`
EXIM_VER=`getVer exim`
PROFTPD_VER=`getVer proftpd`
PUREFTPD_VER=`getVer pureftpd`
AUTOCONF_VER=`getVer autoconf`
AUTOMAKE_VER=`getVer automake`
M4_VER=`getVer m4`
LIBTOOL_VER=`getVer libtool`
LIBXML2_VER=`getVer libxml2`
LIBXSLT_VER=`getVer libxslt`
FREETYPE_VER=`getVer freetype`
ICONV_VER=`getVer iconv`
ICU_VER=`getVer icu4c`
CLAMAV_VER=`getVer clamav`
MAILMAN_VER=`getVer mailman`
AWSTATS_VER=`getVer awstats`
AWSTATS_PROCESS_VER=`getVer awstats_process`

if [ "$NEW_ZLIB_OPT" = "yes" ]; then
	ZLIB_VER=`getVer zlib-current`
	LIBXML2_VER=`getVer libxml2-current`
fi
if [ "$NEW_XML2_OPT" = "yes" ]; then
	LIBXML2_VER=`getVer libxml2-current`
fi

ZEND_VER=`getVer ZendOptimizer-linux-glibc23-i386`
FBSD4_ZEND_VER=`getVer ZendOptimizer-freebsd4.3-i386`
FBSD5_ZEND_VER=`getVer ZendOptimizer-freebsd5.4-i386`
FBSD6_64_ZEND_VER=`getVer ZendOptimizer-freebsd6.0-amd64`

IONCUBE_VER=`getVer ioncube_loaders_lin_x86`
FBSD4_IONCUBE_VER=`getVer ioncube_loaders_fre_4_x86`

if [ "${B64}" = "1" ]; then
	PNG_VER=`getVer libpng64`
else
	PNG_VER=`getVer libpng`
fi

# Applications versions
if [ "${PHPMYADMIN_VER_OPT}" = "4" ]; then
	PHPMYADMIN_VER=`getVer phpmyadmin4`
else
	PHPMYADMIN_VER=`getVer phpmyadmin3`
fi
ATMAIL_VER=`getVer atmail`
ROUNDCUBE_VER=`getVer roundcubemail`
ROUNDCUBE_MAJOR_VER=`echo ${ROUNDCUBE_VER} | cut -d. -f1`
SQUIRRELMAIL_VER=`getVer squirrelmail`
SQUIRRELMAIL_LOCALE_VER=`getVer squirrelmail_locale`
UEBIMIAU_VER=`getVer uebimiau`

roundcube_version()
{
	RCVERFILE=/var/www/html/roundcube/program/include/iniset.php
	if [ ! -e $RCVERFILE ]; then
		echo 0;
		return;
	fi
	grep RCMAIL_VERSION $RCVERFILE | cut -d\' -f4 | cut -d\  -f1
}

exim_version() {
	/usr/sbin/exim -bV 2>/dev/null | grep -m1 'built' | head -n1 | awk '{ print $3 }' | tr '_' '.'
}

# Jailed shell
JAIL_VER=`getVer jail`
COREUTILS_VER=`getVer coreutils`
NB_SMTP_VER=`getVer nbsmtp`

# More variables for jailed shell
SU_FILE=${JAIL_DIR}/ap${APACHE_OPT}/suexec.c

# SpamAssassin versions
SPAMASSASSIN_VER=`getVer spamassassin`

# Variable for proftpd
PROFTPD_CONFIGURE=configure/proftpd/configure.proftpd
if [ -e custom/proftpd/configure.proftpd ]; then
	PROFTPD_CONFIGURE=custom/proftpd/configure.proftpd
fi

# Variable for pureftpd
PUREFTPD_CONFIGURE=configure/pureftpd/configure.pureftpd
if [ -e custom/pureftpd/configure.pureftpd ]; then
	PUREFTPD_CONFIGURE=custom/pureftpd/configure.pureftpd
fi

EXIM_MAKEFILE=""
if [ -e custom/exim/Makefile ]; then
	EXIM_MAKEFILE=${CWD}/custom/exim/Makefile
fi

# Variables for apache
APACHE_SSL_CONFIGURE=configure/ap1/configure.apache_ssl
if [ -e custom/ap1/configure.apache_ssl ]; then
	APACHE_SSL_CONFIGURE=custom/ap1/configure.apache_ssl
fi
APACHE2_CONFIGURE=configure/ap2/configure.apache
if [ -e custom/ap2/configure.apache ]; then
	APACHE2_CONFIGURE=custom/ap2/configure.apache
fi
SUPHP_HTTPD=/etc/httpd/conf/extra/httpd-suphp.conf
PHP_HANDLERS_HTTPD=/etc/httpd/conf/extra/httpd-php-handlers.conf

if [ "${APACHE_OPT}" = "1.3" ]; then
	PHP5_CONFIGURE=configure/ap1/configure.php5
	if [ -e custom/ap1/configure.php5 ]; then
		PHP5_CONFIGURE=custom/ap1/configure.php5
	fi
	PHP6_CONFIGURE=configure/ap1/configure.php6
	if [ -e custom/ap1/configure.php6 ]; then
		PHP6_CONFIGURE=custom/ap1/configure.php6
	fi
elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
	PHP5_CONFIGURE=configure/ap2/configure.php5
	if [ -e custom/ap2/configure.php5 ]; then
		PHP5_CONFIGURE=custom/ap2/configure.php5
	fi
	PHP6_CONFIGURE=configure/ap2/configure.php6
	if [ -e custom/ap2/configure.php6 ]; then
		PHP6_CONFIGURE=custom/ap2/configure.php6
	fi
else
	echo "Cannot find Apache ${APACHE_OPT} configure files."
fi

AP1CONFDIR=${WORKDIR}/configure/ap1/conf
AP1CUSTOMCONFDIR=0
#custom/configure isn't supposed to be there
if [ -d ${WORKDIR}/custom/configure/ap1/conf ]; then
	AP1CUSTOMCONFDIR=${WORKDIR}/custom/configure/ap1/conf
fi
if [ -d ${WORKDIR}/custom/ap1/conf ]; then
        AP1CUSTOMCONFDIR=${WORKDIR}/custom/ap1/conf
fi

AP2CONFDIR=${WORKDIR}/configure/ap2/conf
AP2CUSTOMCONFDIR=0
if [ -d ${WORKDIR}/custom/configure/ap2/conf ]; then
	AP2CUSTOMCONFDIR=${WORKDIR}/custom/configure/ap2/conf
fi
if [ -d ${WORKDIR}/custom/ap2/conf ]; then
        AP2CUSTOMCONFDIR=${WORKDIR}/custom/ap2/conf
fi

AP2CERTCONF=configure/ap2/cert_config
if [ -e custom/configure/ap2/cert_config ]; then
    AP2CERTCONF=custom/configure/ap2/cert_config
fi
if [ -e custom/ap2/cert_config ]; then
    AP2CERTCONF=custom/ap2/cert_config
fi

# Variables for suPHP
PHP5_CONFIGURE_SUPHP=configure/suphp/configure.php5
if [ -e custom/suphp/configure.php5 ]; then
	PHP5_CONFIGURE_SUPHP=custom/suphp/configure.php5
fi
PHP6_CONFIGURE_SUPHP=configure/suphp/configure.php6
if [ -e custom/suphp/configure.php6 ]; then
	PHP6_CONFIGURE_SUPHP=custom/suphp/configure.php6
fi
SUPHP_CONFIGURE=configure/suphp/configure.suphp
if [ -e custom/suphp/configure.suphp ]; then
	SUPHP_CONFIGURE=custom/suphp/configure.suphp
fi
SUPHP_PATH=/usr/local/suphp
SUPHP_CONF_FILE=${SUPHP_PATH}/etc/suphp.conf
SUPHP_SO=/usr/lib/apache/mod_suphp.so
PHP_INI=/usr/local/lib/php.ini
PHP_INI_SUPHP5=/usr/local/etc/php5/cgi/php.ini
PHP_INI_SUPHP6=/usr/local/etc/php6/cgi/php.ini
PHP_BIN=/usr/local/bin/php
PHP_BIN_SUPHP5=/usr/local/php5/bin/php-cgi
PHP_BIN_SUPHP6=/usr/local/php6/bin/php-cgi

#custom script configs
PMA_CONFIG=${CWD}/custom/phpmyadmin/config.inc.php
PMA_THEMES=${CWD}/custom/phpmyadmin/themes
SQUIRREL_CONFIG=${CWD}/custom/squirrelmail/config.php
ROUNDCUBE_CONFIG=${CWD}/custom/roundcube/config.inc.php
ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG}
ROUNDCUBE_CONFIG_OLD=${CWD}/custom/roundcube/main.inc.php
ROUNDCUBE_CONFIG_DB_OLD=${CWD}/custom/roundcube/db.inc.php
if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
	ROUNDCUBE_CONFIG=${ROUNDCUBE_CONFIG_OLD}
	ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG_DB_OLD}
fi
ROUNDCUBE_PLUGINS=${CWD}/custom/roundcube/plugins
ROUNDCUBE_SKINS=${CWD}/custom/roundcube/skins

# Variables for frontpage
ROOT_GRP=root
if [ ${OS} = "FreeBSD" ]; then
	ROOT_GRP=wheel
fi

USER_INPUT=1
INPUT_VALUE=d

if [ ${OS} = "FreeBSD" ]; then
        OS_VER=`uname -r | cut -d- -f1`
elif [ -e /etc/fedora-release ]; then
        OS=fedora
 	if [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora Core" ]; then
        	OS_VER=`cat /etc/fedora-release | awk '{ print $4 }'`
	elif [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora release" ]; then
        	OS_VER=`cat /etc/fedora-release | awk '{ print $3 }'`
	fi
elif [ -e ${DEBIAN_VERSION} ]; then
	OS_VER=3.1
else
        OS_VER=`cat /etc/redhat-release | cut -d\  -f5`
	if [ "${OS_VER}" = "" ]; then
		OS_VER=`cat /etc/redhat-release | cut -d\  -f1`
	fi
fi

MAINVER=""
if [ "${OS}" = "FreeBSD" ]; then
        MAINVER=`echo ${OS_VER} | cut -d. -f1`
        case "${MAINVER}" in
		4)	ZEND_VER=$FBSD4_ZEND_VER
			ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd4.3-i386
			IONCUBE_VER=$FBSD4_IONCUBE_VER
			IONCUBENAME=ioncube_loaders_fre_4_x86
			;;
		5)	ZEND_VER=$FBSD5_ZEND_VER
			ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd5.4-i386
						IONCUBENAME=ioncube_loaders_fre_5_x86
			;;
		6)      ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd6.0-i386
					IONCUBENAME=ioncube_loaders_fre_6_x86
			;;
		7)      ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd6.0-i386
			IONCUBENAME=ioncube_loaders_fre_7_x86
			if [ ${B64} -eq 1 ]; then
			    IONCUBENAME=ioncube_loaders_fre_7_x86-64
			fi
			;;
		8)	IONCUBENAME=ioncube_loaders_fre_8_x86-64
			;;
		9|10)	IONCUBENAME=ioncube_loaders_fre_9_x86-64
			;;
	esac
else
	ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-i386
	IONCUBENAME=ioncube_loaders_lin_x86
	if [ "${PHP5_VER_OPT}" = "5.3" ]; then
		if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
			ZENDNAME=ZendGuardLoader-php-5.3-linux-glibc23-i386
		fi
	elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
		if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
			ZENDNAME=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-i386
		fi
	fi
fi

if [ ${B64} -eq 1 ]; then
	if [ "${OS}" = "FreeBSD" ]; then
		ZEND_VER=$FBSD6_64_ZEND_VER
		ZENDNAME=ZendOptimizer-${ZEND_VER}-freebsd6.0-amd64
	else
		ZENDNAME=ZendOptimizer-${ZEND_VER}-linux-glibc23-x86_64
		IONCUBENAME=ioncube_loaders_lin_x86-64
		if [ "${PHP5_VER_OPT}" = "5.3" ]; then
			if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
				ZENDNAME=ZendGuardLoader-php-5.3-linux-glibc23-x86_64
			fi
		elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
			if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
				ZENDNAME=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64
			fi
		fi
	fi
fi

ZENDFILE=${ZENDNAME}.tar.gz
IONCUBEFILE=${IONCUBENAME}.tar.gz

JPEGFILE=jpegsrc.v6b.tar.gz
JPEGDIR=jpeg-6b

WEBALIZER_VER=`getVer webalizer`
WEBALIZER=webalizer-${WEBALIZER_VER}
WEBALIZER_FILE=webalizer-${WEBALIZER_VER}-src.tgz

####################################################

ensureVersion() {

	PERL_VER=`perl -v | head -n2 | tail -n1 | cut -d\  -f4 | cut -dv -f2`
	NUM1=`echo $PERL_VER | cut -d. -f1`
	NUM2=`echo $PERL_VER | cut -d. -f2`
	NUM3=`echo $PERL_VER | cut -d. -f3`
	
	if [ $NUM1 -gt 5 ]; then
		return 1;
	fi
	if [ $NUM2 -gt 6 ]; then
		return 1;
	fi
	if [ $NUM3 -gt 0 ]; then
		return 1;
	fi

	echo "Your perl version is $PERL_VER. You require at least perl 5.6.1 for Mail-SpamAssassin-${SPAMASSASSIN_VER}.";
	exit 1;
}

####################################################

downloadMake() {
	cd $CWD

	VER=`getVer ${1}`
	NAME=${1}-${VER}
		
	getFile ${NAME}.tar.gz ${1}
	tar xzf ${NAME}.tar.gz --no-same-owner
	cd ${NAME}
	perl Makefile.PL
	make
	make install

	cd $CWD
}

####################################################

clean_tarball(){
	#clean_tarball name current_version extension
	if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then
		echo "Skipping $1 tarball, needs more arguments in doclean_old_tarballs()."
		return;
	fi
	for i in `ls ${WORKDIR} | grep "${1}-[0-9]" | grep -v "$2" | grep "$3"`; do { 
		rm -f ${WORKDIR}/$i; 
		if [ "${CLEAN_OPT}" = "no" ]; then
			echo "Removing ${WORKDIR}/$i..."; 
		fi
	};
	done;
}

doclean_old_tarballs() {
	if [ "${APACHE_OPT}" = "1.3" ]; then
		clean_tarball apache ${APACHE_VER} tar.gz
		clean_tarball mod_ssl ${MODSSL_VER}-${APACHE_VER} tar.gz;
	elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then 
		clean_tarball httpd ${APACHE2_VER} tar.gz;
		clean_tarball apr ${APR_VER} tar.gz;
		clean_tarball apr-util ${APR_UTIL_VER} tar.gz;
	fi
	clean_tarball mod_perl ${MODPERL_VER} tar.gz;
	clean_tarball clamav ${CLAMAV_VER} tar.gz;
	clean_tarball Mail-SpamAssassin ${SPAMASSASSIN_VER} tar.gz;
	clean_tarball curl ${CURL_VER} tar.gz;
	clean_tarball pcre ${PCRE_VER} tar.gz;
	clean_tarball zlib ${ZLIB_VER} tar.gz;
	clean_tarball libpng ${PNG_VER} tar.gz;
	clean_tarball libmcrypt ${MCRYPT_VER} tar.gz;
	clean_tarball mhash ${MHASH_VER} tar.gz;
	clean_tarball freetype ${FREETYPE_VER} tar.gz;
	clean_tarball libiconv ${ICONV_VER} tar.gz;
	clean_tarball libxslt ${LIBXSLT_VER} tar.gz;
	clean_tarball libxml2 ${LIBXML2_VER} tar.gz;
	clean_tarball icu4c ${ICU_VER}-src tgz;
	clean_tarball ZendOptimizer ${ZEND_VER} tar.gz;
	clean_tarball webalizer ${WEBALIZER_VER}-src tgz;
	clean_tarball proftpd ${PROFTPD_VER} tar.gz;
	clean_tarball pure-ftpd ${PUREFTPD_VER} tar.gz;
	clean_tarball ${MODPERL_INDEX} ${MODPERL_VER} tar.gz;
	clean_tarball exim ${EXIM_VER} tar.gz;
	clean_tarball dovecot ${DOVECOT_VER} tar.gz;
	clean_tarball suphp ${SUPHP_VER} tar.gz;
	clean_tarball autoconf ${AUTOCONF_VER} tar.gz;
	clean_tarball automake ${AUTOMAKE_VER} tar.gz;
	clean_tarball m4 ${M4_VER} tar.gz;
	clean_tarball libtool ${LIBTOOL_VER} tar.gz;
	clean_tarball coreutils ${COREUTILS_VER} tar.gz;
	clean_tarball roundcubemail ${ROUNDCUBE_VER} tar.gz;
	clean_tarball squirrelmail ${SQUIRRELMAIL_VER} tar.gz;
	clean_tarball awstats ${AWSTATS_VER} tar.gz;
	clean_tarball atmail ${ATMAIL_VER} tar.gz;
	clean_tarball phpMyAdmin ${PHPMYADMIN_VER} tar.gz;
	
	#PHP bit needs to be different
	for i in `ls ${WORKDIR} | grep '^php-' | grep -v "${PHP5_VER}" | grep -v "${PHP6_VER}"`; do {
		rm -f ${WORKDIR}/$i; 
		if [ "${CLEAN_OPT}" = "no" ]; then
			echo "Removing ${WORKDIR}/$i..."; 
		fi
	};
	done;
	
	#PHP bit for mail-header-patch needs to be different
	for i in `ls ${WORKDIR} | grep 'php' | grep -v "${PHP5}" | grep -v "${PHP4}" | grep 'patch'`; do {
		rm -f ${WORKDIR}/$i; 
		if [ "${CLEAN_OPT}" = "no" ]; then
			echo "Removing ${WORKDIR}/$i..."; 
		fi
	};
	done;
}

####################################################

doclean_old_webapps() {
	if [ "${CLEAN_OLD_WEBAPPS_OPT}" != "yes" ]; then
		echo "You cannot clean webapps, because you do not have it set in options.conf file.";
		exit 1;
	fi
	
	#Clean phpMyAdmin
	if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ -e /var/www/html/phpMyAdmin ]; then
		PHPMYADMIN_CUR=`ls -ld /var/www/html/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`
		for i in `ls /var/www/html/ | grep phpMyAdmin- | grep -v "${PHPMYADMIN_CUR}"`; do { 
			rm -rf /var/www/html/$i; 
			if [ "${CLEAN_OPT}" = "no" ]; then
				echo "Removing /var/www/html/$i..."; 
			fi
		};
		done;
	fi

	#Clean SquirrelMail
	if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ -e /var/www/html/squirrelmail ]; then
		SQUIRRELMAIL_CUR=`ls -ld /var/www/html/squirrelmail | cut -d\> -f2 | cut -d- -f2,3`
		for i in `ls /var/www/html/ | grep squirrelmail- | grep -v -e "${SQUIRRELMAIL_CUR}\$"`; do { 
			rm -rf /var/www/html/$i; 
			if [ "${CLEAN_OPT}" = "no" ]; then
				echo "Removing /var/www/html/$i..."; 
			fi
		};
		done;
	fi

	#Clean Atmail
	if [ "${ATMAIL_OPT}" = "yes" ] && [ -e /var/www/html/atmail ]; then
		ATMAIL_CUR=`ls -ld /var/www/html/atmail | cut -d\> -f2 | cut -d- -f2`
		for i in `ls /var/www/html/ | grep atmail- | grep -v "${ATMAIL_CUR}"`; do { 
			rm -rf /var/www/html/$i; 
			if [ "${CLEAN_OPT}" = "no" ]; then
				echo "Removing /var/www/html/$i..."; 
			fi
		};
		done;
	fi

	#Clean RoundCube
	if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ -e /var/www/html/roundcube ]; then
		#ROUNDCUBE_CUR=`ls -ld /var/www/html/roundcube | cut -d\> -f2 | cut -d- -f2`
		ROUNDCUBE_CUR=`roundcube_version`
		for i in `ls /var/www/html/ | grep roundcubemail- | grep -v "${ROUNDCUBE_CUR}"`; do { 
			rm -rf /var/www/html/$i; 
			if [ "${CLEAN_OPT}" = "no" ]; then
				echo "Removing /var/www/html/$i..."; 
			fi
		};
		done;
	fi

	#Clean AWstats
	if [ "${AWSTATS_OPT}" = "yes" ] && [ -e /usr/local/awstats ]; then
		AWSTATS_CUR=`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`
		for i in `ls /usr/local/ | grep awstats- | grep -v "${AWSTATS_CUR}"`; do { 
			rm -rf /usr/local/$i; 
			if [ "${CLEAN_OPT}" = "no" ]; then
				echo "Removing /usr/local/$i..."; 
			fi
		};
		done;
	fi
}

####################################################

doClean() {
	cd ${CWD}
	if [ -e .custombuild ]; then
	    return;
	fi
	if [ "${CLEANAPACHE_OPT}" = "yes" ]; then
		rm -rf apache_${APACHE_VER};
	fi
	rm -rf mod_ssl-${MODSSL_VER}-${APACHE_VER};
	rm -rf php-${PHP6_VER};
	rm -rf php-${PHP5_VER};
	rm -rf mod_perl-${MODPERL_VER};
	rm -rf curl-${CURL_VER};
	rm -rf pcre-${PCRE_VER};
	rm -rf zlib-${ZLIB_VER};
	rm -rf ${JPEGDIR}
	rm -rf libpng-${PNG_VER};
	rm -rf libmcrypt-${MCRYPT_VER};
	rm -rf mhash-${MHASH_VER};
	rm -rf freetype-${FREETYPE_VER};
	rm -rf libiconv-${ICONV_VER};
	rm -rf libxslt-${LIBXSLT_VER};
	rm -rf libxml2-${LIBXML2_VER};
	rm -rf icu4c-${ICU_VER}-src;
	rm -rf icu;
	rm -rf ${ZENDNAME};
	rm -rf ${WEBALIZER};
	rm -rf proftpd-${PROFTPD_VER};
	rm -rf pure-ftpd-${PUREFTPD_VER};
	rm -rf httpd-${APACHE2_VER}
	rm -rf ${MODPERL2_DIR};
	rm -rf exim-${EXIM_VER};
	rm -rf dovecot-${DOVECOT_VER};
	rm -rf suphp-${SUPHP_VER};
	rm -rf autoconf-${AUTOCONF_VER};
	rm -rf m4-${M4_VER};
	rm -rf automake-${AUTOMAKE_VER};
	rm -rf libtool-${LIBTOOL_VER};
	rm -rf Mail-SpamAssassin-${SPAMASSASSIN_VER};
	rm -rf clamav-${CLAMAV_VER};
	rm -rf mailman-${MAILMAN_VER};
	
	# Jailed shell
	rm -rf coreutils-${COREUTILS_VER}
	rm -f ${JAIL_DIR}/su
	rm -f ${JAIL_DIR}/jail
	rm -rf nbsmtp-${NB_SMTP_VER}
	rm -f nbsmtp

	if [ "${CLEAN_OLD_TARBALLS_OPT}" = "yes" ]; then
		doclean_old_tarballs;
	fi
	
	if [ "${CLEAN_OLD_WEBAPPS_OPT}" = "yes" ]; then
		doclean_old_webapps;
	fi
	
	if [ "${CLEAN_OPT}" = "no" ]; then
		echo "All clean!";
	fi
}

####################################################

if [ "${CLEAN_OPT}" = "yes" ]; then
	doClean;
fi

####################################################

showHelp() {
	echo " +--------------------------------------------------------+";
	echo " |                                                        |";
	echo " |            DirectAdmin WebServices Installer           |";
	echo " |     Written by Martynas Bendorius and DirectAdmin      |";
	echo " |                   Version: ${BUILDSCRIPT_VER}                      |";
	echo " |                                                        |";
	echo " +--------------------------------------------------------+";
	echo " |  To build everything run:                              |";
	echo " |     $0 all                                        |";
	echo " |                                                        |";
	echo " | ${boldon}NOTE${boldoff}: Command all will compile everything as it is set |";
	echo " |      in the options.conf file, please take a look at   |";
	echo " |      \"${boldon}$0 options${boldoff}\"!                                |";
	echo " +--------------------------------------------------------+";
	echo " |  Install/update server components:                     |";
	echo " |     $0 apache                                     |";
	echo " |     $0 autoconf                                   |";
	echo " |     $0 automake                                   |";
	echo " |     $0 awstats                                    |";
	echo " |     $0 clamav                                     |";
	echo " |     $0 curl                                       |";
	echo " |     $0 dovecot                                    |";
	echo " |     $0 exim                                       |";
	echo " |     $0 freetype                                   |";
	echo " |     $0 iconv                                      |";
	echo " |     $0 icu                                        |";
	echo " |     $0 ioncube                                    |";
	echo " |     $0 libjpeg                                    |";
	echo " |     $0 libpng                                     |";
	echo " |     $0 libtool                                    |";
	echo " |     $0 libxml2                                    |";
	echo " |     $0 libxslt                                    |";
	echo " |     $0 m4                                         |";
	echo " |     $0 mailman                                    |";
	echo " |     $0 mcrypt                                     |";
	echo " |     $0 mhash                                      |";
	echo " |     $0 mod_perl                                   |";
	echo " |     $0 mysql                                      |";
	echo " |     $0 pcre                                       |";
	echo " |     $0 php                                        |";
	echo " |     $0 proftpd                                    |";
	echo " |     $0 pureftpd                                   |";
	echo " |     $0 suphp                                      |";
	echo " |     $0 spamassassin                               |";
	echo " |     $0 webalizer                                  |";
	echo " |     $0 zend                                       |";
	echo " |     $0 zlib                                       |";
	echo " +--------------------------------------------------------+";
	echo " |  Components configuration options:                     |";
	echo " |     $0 exim_conf                                  |";
	echo " |     $0 php-ini                                    |";
	echo " |     $0 rewrite_confs                              |";
	echo " |     $0 secure_php                                 |";
	echo " +--------------------------------------------------------+";
	echo " |  Install/update web applications:                      |";
	echo " |     $0 phpmyadmin                                 |";
	echo " |     $0 atmail                                     |";
	echo " |     $0 roundcube                                  |";
	echo " |     $0 squirrelmail                               |";
	echo " |     $0 uebimiau                                   |";
	echo " +--------------------------------------------------------+";
	echo " |  CustomBuild related options/functions:                |";
	echo " |     $0 create_options                             |";
	echo " |     $0 cron                                       |";
	echo " |     $0 options                                    |";
	echo " |     $0 set option_name value                      |";
	echo " |     $0 set_fastest                                |";
	echo " |     $0 set_fastest_quiet                          |";
	echo " |     $0 update_da                                  |";
	echo " |     $0 update_versions                            |";
	echo " |     $0 update_webapps                             |";
	echo " |     $0 used_configs                               |";
	echo " |     $0 versions                                   |";
	echo " +--------------------------------------------------------+";
	echo " |  Jailed shell (beta):                                  |";
	echo " |     $0 all_jail                                   |";
	echo " |     $0 coreutils                                  |";
	echo " |     $0 shell                                      |";
	echo " |     $0 smtp_mail                                  |";
	echo " |     ./jail/jail_user.sh ${boldon}user${boldoff}                           |";
	echo " +--------------------------------------------------------+";
	echo " |  Remove old build data:                                |";
	echo " |     $0 clean                                      |";
	echo " |     $0 clean_old_webapps                          |";
	echo " +--------------------------------------------------------+";
	echo " |  Get latest build script or (and) data:                |";
	echo " |     $0 update                                     |";
	echo " |     $0 update_script                              |";
	echo " +--------------------------------------------------------+";
	echo " |  Get data for current build script:                    |";
	echo " |     $0 update_data                                |";
	echo " +--------------------------------------------------------+";
	echo " |  Recommended ${boldon}for experienced users only (!)${boldoff}:           |";
	echo " |     $0 php5-cli                                   |";
	echo " |     $0 php6-cli                                   |";
	echo " |     $0 php5-cgi                                   |";
	echo " |     $0 php6-cgi                                   |";
	echo " |     $0 todovecot                                  |";
	echo " +--------------------------------------------------------+";
	echo " |  You can pass a 2nd argument to automate the input:    |";
	echo " |     $0 <option> d : do the default action         |";
	echo " |     $0 <option> y : answer yes to all questions   |";
	echo " |     $0 <option> n : answer no to all questions    |";
	echo " +--------------------------------------------------------+";
}

checkFile() {
	if [ ! -s $1 ]
	then
		echo "*** Cannot find $1. Aborting ***";
		do_exit 0;
	else
		echo "Found $1";
	fi
}

quitIfLocked(){
	if [ -e ${LOCKFILE} ]; then
		echo "Another instance of custombuild is running (lockfile: ${LOCKFILE}."
		if [ "$1" != "" ]; then
			echo "Executing: $1";
		fi
		exit 1
	else
		trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
		touch ${LOCKFILE}
	fi
}

####################################################

options(){
	if [ "${APACHE_OPT}" = "1.3" ]; then
		O_APACHE=${APACHE_VER}
	elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		O_APACHE=${APACHE2_VER}
	fi
	echo "Apache: ${boldon}${O_APACHE}${boldoff}"

	if [ "${DOVECOT_OPT}" = "yes" ]; then
		echo "Dovecot: ${boldon}${DOVECOT_VER}${boldoff}"
	else
		echo "Dovecot: ${boldon}no${boldoff}"
	fi

	if [ "${AWSTATS_OPT}" = "yes" ]; then
		echo "AWstats: ${boldon}${AWSTATS_VER}${boldoff}"
	else
		echo "AWstats: ${boldon}no${boldoff}"
	fi
	
	if [ "${EXIM_OPT}" = "yes" ]; then
		echo "Exim: ${boldon}${EXIM_VER}${boldoff}"
	else
		echo "Exim: ${boldon}no${boldoff}"
	fi

	if [ "${EXIMCONF_OPT}" = "yes" ]; then
		echo "exim.conf update: ${boldon}yes${boldoff}"
	else
		echo "exim.conf update: ${boldon}no${boldoff}"
	fi

	if [ "${SPAMASSASSIN_OPT}" = "yes" ]; then
		echo "SpamAssassin: ${boldon}${SPAMASSASSIN_VER}${boldoff}"
	else
		echo "SpamAssassin: ${boldon}no${boldoff}"
	fi
	
	if [ "${CLAMAV_OPT}" = "yes" ]; then
		echo "ClamAV: ${boldon}${CLAMAV_VER}${boldoff}"
	else
		echo "ClamAV: ${boldon}no${boldoff}"
	fi
	
	if [ "${CLAMAV_OPT}" = "yes" ]; then
		echo "ClamAV: ${boldon}${CLAMAV_VER}${boldoff}"
	else
		echo "ClamAV: ${boldon}no${boldoff}"
	fi
	
	if [ "${MYSQLINST_OPT}" = "yes" ]; then
		echo "MySQL: ${boldon}${MYSQL_VER}${boldoff}"
	else
		echo "MySQL: ${boldon}no${boldoff}"
	fi

	echo "MySQL backup: ${boldon}${MYSQLBACK_OPT}${boldoff}"
	
	if [ "${MYSQLBACK_OPT}" = "yes" ]; then
		echo "MySQL backup directory: ${boldon}${MYSQLBACKDIR_OPT}${boldoff}"
	fi

	if [ "${DEFPHP}" = "6" ]; then
		DEFPHPVER="${PHP6_VER}"
	else
		DEFPHPVER="${PHP5_VER}"
	fi

	if [ "${MAIL_HEADER_PATCH}" = "yes" ]; then
		MHP_OPT="with ${boldon}mail() header patch${boldoff}"
	else
		MHP_OPT="without ${boldon}mail() header patch${boldoff}"
	fi

	if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "no" ]; then
		echo "PHP: ${boldon}${PHP6_VER}${boldoff} as ${boldon}CLI${boldoff} ${MHP_OPT}"
	fi
	if [ "${PHP6_CGI_OPT}" = "no" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		echo "PHP: ${boldon}${PHP5_VER}${boldoff} as ${boldon}CLI${boldoff} ${MHP_OPT}"
	fi
	if [ "${PHP6_CLI_OPT}" = "no" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		echo "PHP: ${boldon}${PHP5_VER}${boldoff} as ${boldon}CGI${boldoff} ${MHP_OPT}"
	fi
	if [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "no" ]; then
		echo "PHP: ${boldon}${PHP6_VER}${boldoff} as ${boldon}CGI${boldoff} ${MHP_OPT}"
	fi
	if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		echo "PHP: ${boldon}${PHP6_VER}${boldoff} as ${boldon}CLI${boldoff} and ${boldon}${PHP5_VER}${boldoff} as ${boldon}CGI${boldoff} (default: PHP ${DEFPHPVER}) ${MHP_OPT}"
	fi
	if [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		echo "PHP: ${boldon}${PHP5_VER}${boldoff} as ${boldon}CLI${boldoff} and ${boldon}${PHP6_VER}${boldoff} as ${boldon}CGI${boldoff} (default: PHP ${DEFPHPVER}) ${MHP_OPT}"
	fi
	if [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		echo "PHP: ${boldon}${PHP6_VER}${boldoff} as ${boldon}CGI${boldoff} and ${boldon}${PHP5_VER}${boldoff} as ${boldon}CGI${boldoff} (default: PHP ${DEFPHPVER}) ${MHP_OPT}"
	fi

	if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
		echo "phpMyAdmin: ${boldon}${PHPMYADMIN_VER}${boldoff}"
	else
		echo "phpMyAdmin: ${boldon}no${boldoff}"
	fi

	if [ "${PROFTPD_OPT}" = "yes" ]; then
		echo "ProFTPD: ${boldon}${PROFTPD_VER}${boldoff}"
	else
		echo "ProFTPD: ${boldon}no${boldoff}"
	fi

	if [ "${PUREFTPD_OPT}" = "yes" ]; then
		echo "Pure-FTPd: ${boldon}${PUREFTPD_VER}${boldoff}"
	else
		echo "Pure-FTPd: ${boldon}no${boldoff}"
	fi
	
	if [ "${ATMAIL_OPT}" = "yes" ]; then
		echo "Atmail webmail: ${boldon}${ATMAIL_VER}${boldoff}"
	else
		echo "Atmail webmail: ${boldon}no${boldoff}"
	fi
	
	if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		echo "RoundCube webmail: ${boldon}${ROUNDCUBE_VER}${boldoff}"
	else
		echo "RoundCube webmail: ${boldon}no${boldoff}"
	fi

	echo "Replace \"php.ini\" with '$0 all' and '$0 php-ini': ${boldon}${PHPINI_OPT}${boldoff}"

	if [ "${PHPINI_OPT}" = "yes" ]; then
		echo "Replace \"php.ini\" using type: ${boldon}${PHPINITYPE_OPT}${boldoff}"
	fi

	if [ "${CRON_OPT}" = "yes" ]; then
		echo "Cron for notifications and (or) updates: ${boldon}yes${boldoff}"
		echo "Cron frequency: ${boldon}${CRON_FREQUENCY_OPT}${boldoff}";
		if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then
			echo "Auto notifications: ${boldon}yes${boldoff}"
			echo "Auto notifications email address: ${boldon}${EMAIL_OPT}${boldoff}"
		fi
		if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then
			echo "Auto updates: ${boldon}yes${boldoff}"
		fi
	else
		echo "Auto updates/notifications: ${boldon}no${boldoff}"
	fi
	
	echo "Run \"clean\" every time: ${boldon}${CLEAN_OPT}${boldoff}"
	echo "Run \"clean_old_webapps\" every time: ${boldon}${CLEAN_OLD_WEBAPPS_OPT}${boldoff}"
	echo "Run \"clean_old_tarballs\" every time: ${boldon}${CLEAN_OLD_TARBALLS_OPT}${boldoff}"

	echo "Show texts in bold: ${boldon}${BOLD_OPT}${boldoff}"
	
	if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
		echo "SquirrelMail: ${boldon}${SQUIRRELMAIL_VER}${boldoff}"
	else
		echo "SquirrelMail: ${boldon}no${boldoff}"
	fi

	if [ "${UEBIMIAU_OPT}" = "yes" ]; then
		echo "UebiMiau: ${boldon}${UEBIMIAU_VER}${boldoff}"
	else
		echo "UebiMiau: ${boldon}no${boldoff}"
	fi

	if [ "${ZEND_OPT}" = "yes" ]; then
		echo "Zend Optimizer: ${boldon}${ZEND_VER}${boldoff}"
	else
		echo "Zend Optimizer: ${boldon}no${boldoff}"
	fi
	
	if [ "${IONCUBE_OPT}" = "yes" ]; then
		echo "ionCube loader: ${boldon}${IONCUBE_VER}${boldoff}"
	else
		echo "ionCube loader: ${boldon}no${boldoff}"
	fi
}

####################################################

create_options(){
	HIDE_CHANGES=1
	
	if [ $# -eq 1 ]; then
		INPUT_VALUE=$1
	fi

	if [ -s ${OPTIONS_CONF} ]; then
		echo -n "Would you like to backup the current options.conf? (yes/no): ";
		read do_opt_backup;
		until [ "${do_opt_backup}" = "yes" ] || [ "${do_opt_backup}" = "no" ]; do
			echo -n "Please enter 'yes' or 'no': "
			read do_opt_backup;
		done
		
		if [ "${do_opt_backup}" = "yes" ]; then
			cp -f ${OPTIONS_CONF} ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup
			echo "Backup created: ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup";
		fi
	
	fi

	#echo -n "Would you like to have PHP5 or PHP6 as default? (5/6): ";
	#read phpver;
	#until [ "${phpver}" = "5" ] || [ "${phpver}" = "6" ]; do
	#	echo -n "Please enter '5' or '6':"
	#	read phpver
	#done

	phpver=5
	
	setOpt default_php ${phpver};

	#echo -n "Would you like to have PHP5? (yes/no): ";
	#read wantphp5;
	#until [ "${wantphp5}" = "yes" ] || [ "${wantphp5}" = "no" ]; do
	#	echo -n "Please enter 'yes' or 'no': "
	#	read wantphp5
	#done
	
	wantphp5=yes

	if [ "${wantphp5}" = "yes" ]; then
		echo -n "Would you like to have PHP5 as CLI or CGI? (cli/cgi): ";
		read php5type;
		until [ "${php5type}" = "cli" ] || [ "${php5type}" = "cgi" ]; do
			echo -n "Please enter 'cli' or 'cgi':"
			read php5type;
		done
		if [ "${php5type}" = "cli" ]; then
			setOpt php5_cli yes;
			setOpt php5_cgi no;
		elif [ "${php5type}" = "cgi" ]; then
			setOpt php5_cli no;
			setOpt php5_cgi yes;
		fi
	elif [ "${wantphp5}" = "no" ]; then
		setOpt php5_cli no;
		setOpt php5_cgi no;
	fi

	#echo -n "Would you like to have PHP6? (yes/no): ";
	#read wantphp6;
	#until [ "${wantphp6}" = "yes" ] || [ "${wantphp6}" = "no" ]; do
	#	echo -n "Please enter 'yes' or 'no': "
	#	read wantphp6
	#done
	
	wantphp6=no
	
	if [ "${wantphp6}" = "yes" ]; then
		echo -n "Would you like to have PHP6 as CLI or CGI? (cli/cgi): ";
		read php6type;
		until [ "${php6type}" = "cli" ] || [ "${php6type}" = "cgi" ]; do
			echo -n "Please enter 'cli' or 'cgi':"
			read php6type;
		done
		if [ "${php6type}" = "cli" ]; then
			setOpt php6_cli yes;
			setOpt php6_cgi no;
		elif [ "${php6type}" = "cgi" ]; then
			setOpt php6_cli no;
			setOpt php6_cgi yes;
		fi
	elif [ "${wantphp6}" = "no" ]; then
		setOpt php6_cli no;
		setOpt php6_cgi no;
	fi
		
	echo -n "Would you like to have ionCube? (yes/no): ";
	read installioncube;
	until [ "${installioncube}" = "yes" ] || [ "${installioncube}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read installioncube;
	done
	
	setOpt ioncube ${installioncube};
	
	echo -n "Would you like to have Zend Optimizer? (yes/no): ";
	read installzend;
	until [ "${installzend}" = "yes" ] || [ "${installzend}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read installzend;
	done
	
	setOpt zend ${installzend};
	
	if [ ! -s ${DACONF_FILE} ]; then
		echo "********"
		echo "For new DirectAdmin installs, we don't recommend updating MySQL until after everything is finished";
		echo "${boldon}We recommend using 'no' here to use the already included precompiled binaries.${boldoff}";
		echo "You can still update MySQL later.";
		echo "";
	fi

	echo -n "Would you like to have an ability to update/instal MySQL using CustomBuild? (yes/${boldon}no${boldoff}): ";
	read installmysql;
	until [ "${installmysql}" = "yes" ] || [ "${installmysql}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read installmysql;
	done

	setOpt mysql_inst ${installmysql};
	
	if [ "${installmysql}" = "yes" ]; then
		echo -n "Which version of MySQL you would like to have? (5.0/5.1/5.5/5.6): ";
		read mysqlvers;
			until [ "${mysqlvers}" = "5.0" ] || [ "${mysqlvers}" = "5.1" ] || [ "${mysqlvers}" = "5.5" ] || [ "${mysqlvers}" = "5.6" ]; do
			echo -n "Please enter '5.0', '5.1', '5.5' or '5.6': "
			read mysqlvers;
		done

		setOpt mysql ${mysqlvers};
	fi
	
	echo -n "Which version of Apache you would like to have? (1.3/2.0/2.2): ";
	read apachever;
	until [ "${apachever}" = "1.3" ] || [ "${apachever}" = "2.0" ] || [ "${apachever}" = "2.2" ]; do
		echo -n "Please enter '1.3', '2.0' or '2.2': "
		read apachever;
	done

	setOpt apache_ver ${apachever};

	echo -n "Would you like to prevent htaccess files from using Options FollowSymLinks? More secure, but may break scripts. (yes/no): ";
	read secure_htaccess;
	until [ "${secure_htaccess}" = "yes" ] || [ "${secure_htaccess}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read secure_htaccess;
	done
	
	setOpt secure_htaccess ${secure_htaccess};

	echo -n "Would you like to have an ability to update/instal Exim using CustomBuild? (yes/no): ";
	read installexim;
	until [ "${installexim}" = "yes" ] || [ "${installexim}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read installexim;
	done

	setOpt exim ${installexim};
	
	echo -n "Would you like to have an ability to install Dovecot? (yes/no): ";
	read dovecot;
	until [ "${dovecot}" = "yes" ] || [ "${dovecot}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read dovecot;
	done

	setOpt dovecot ${dovecot}
	
	echo -n "Would you like to have an ability to install/update phpMyAdmin using CustomBuild? (yes/no): ";
	read phpmyadmin;
	until [ "${phpmyadmin}" = "yes" ] || [ "${phpmyadmin}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read phpmyadmin;
	done

	setOpt phpmyadmin ${phpmyadmin};
	
	echo -n "Would you like to have an ability to install/update SquirrelMail webmail using CustomBuild? (yes/no): ";
	read squirrelmail;
	until [ "${squirrelmail}" = "yes" ] || [ "${squirrelmail}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read squirrelmail;
	done

	setOpt squirrelmail ${squirrelmail};
	
	echo -n "Would you like to have an ability to install/update RoundCube webmail using CustomBuild? (yes/no): ";
	read roundcube;
	until [ "${roundcube}" = "yes" ] || [ "${roundcube}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read roundcube;
	done

	V1=`echo ${ROUNDCUBE_VER} | cut -d. -f1`
	V2=`echo ${ROUNDCUBE_VER} | cut -d. -f2`
	if [ "${roundcube}" = "yes" ] && [ "${PHP5_VER_OPT}" = "5.2" ] && [ "${V1}" -eq 0 ] && [ "${V2}" -ge 9 ]; then
		echo "";
		echo "****************";
		echo "* Sorry: Roundcube ${ROUNDCUBE_VER} requires PHP 5.3 or higher. Please change the php5_ver after the install is complete";
		echo "****************";
		echo "";
		setOpt roundcube no;
	else
		setOpt roundcube ${roundcube};
	fi

	echo -n "Would you like to have an ability to install/update UebiMiau webmail using CustomBuild? (yes/no): ";
	read uebimiau;
	until [ "${uebimiau}" = "yes" ] || [ "${uebimiau}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read uebimiau;
	done

	setOpt uebimiau ${uebimiau};
	
	echo -n "Would you like to have an ability to install/update Atmail Open webmail using CustomBuild? (yes/no): ";
	read atmail;
	until [ "${atmail}" = "yes" ] || [ "${atmail}" = "no" ]; do
		echo -n "Please enter 'yes' or 'no': "
		read atmail;
	done

	setOpt atmail ${atmail};
	

	#echo -n "Which fileserver would you like to use (1 is located in USA, 2 - Europe)? (1/2): ";
	#read fileserver;
	#until [ "${fileserver}" = "1" ] || [ "${fileserver}" = "2" ]; do
	#	echo -n "Please enter '1' or '2': "
	#	read fileserver;
	#done

	#setOpt fileserver ${fileserver};
}

####################################################

used_configs(){
  if [ "${APACHE_OPT}" = "1.3" ]; then
	echo "Apache configuration file: ${WORKDIR}/${APACHE_SSL_CONFIGURE}"
  elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
	echo "Apache configuration file: ${WORKDIR}/${APACHE2_CONFIGURE}"
  fi

  if [ "${PHP5_CLI_OPT}" = "yes" ]; then
	echo "PHP5 configuration file: ${WORKDIR}/${PHP5_CONFIGURE}"
  fi

  if [ "${PHP5_CGI_OPT}" = "yes" ]; then
	echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}"
	echo "PHP5 configuration file: ${WORKDIR}/${PHP5_CONFIGURE_SUPHP}"
  fi

  if [ "${PHP6_CLI_OPT}" = "yes" ]; then
	echo "PHP6 configuration file: ${WORKDIR}/${PHP6_CONFIGURE}"
  fi

  if [ "${PHP6_CGI_OPT}" = "yes" ]; then
	echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}"
	echo "PHP6 configuration file: ${WORKDIR}/${PHP6_CONFIGURE_SUPHP}"
  fi

  if [ "${PROFTPD_OPT}" = "yes" ]; then
	echo "ProFTPD configuration file: ${WORKDIR}/${PROFTPD_CONFIGURE}"
  fi
  
  if [ "${PUREFTPD_OPT}" = "yes" ]; then
	echo "PureFTPD configuration file: ${WORKDIR}/${PUREFTPD_CONFIGURE}"
  fi
  
  if [ "${EXIM_OPT}" = "yes" ]; then
  	echo -n "Exim Makefile: ";
  	if [ "${EXIM_MAKEFILE}" != "" ]; then
  		echo "${EXIM_MAKEFILE}";
  	else
  		echo "${WEBPATH}/Makefile";
  	fi
  fi
  
  if [ -d ${PMA_THEMES} ]; then
	  if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
		echo "phpMyAdmin themes directory: ${PMA_THEMES}"
	  fi
  fi
  
  if [ -e ${PMA_CONFIG} ]; then
	  if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
		echo "phpMyAdmin configuration file: ${PMA_CONFIG}"
	  fi
  fi
  
  if [ -e ${SQUIRREL_CONFIG} ]; then
	  if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
		echo "SquirrelMail configuration file: ${SQUIRREL_CONFIG}"
	  fi
  fi
  
  if [ -e ${ROUNDCUBE_CONFIG} ]; then
	  if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		echo "RoundCube webmail configuration file: ${ROUNDCUBE_CONFIG}"
	  fi
  fi

  if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
	  if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		echo "RoundCube webmail database configuration file: ${ROUNDCUBE_CONFIG_DB}"
	  fi
  fi

  if [ -d ${ROUNDCUBE_PLUGINS} ]; then
	  if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		echo "RoundCube webmail plugins overwrite directory: ${ROUNDCUBE_PLUGINS}"
	  fi
  fi

  if [ -d ${ROUNDCUBE_SKINS} ]; then
	  if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		echo "RoundCube webmail skins overwrite directory: ${ROUNDCUBE_SKINS}"
	  fi
  fi

}

####################################################

preCheck() {
	checkFile /usr/bin/patch
	checkFile /usr/bin/gcc
}

####################################################

# Check for webapps user
if [ `grep -c -e "^${APPUSER}:" /etc/passwd` = "0" ]; then
        if [ "${OS}" = "FreeBSD" ]; then
                /usr/sbin/pw groupadd ${APPUSER} 2> /dev/null
                /usr/sbin/pw useradd -g ${APPUSER} -n ${APPUSER} -b ${WWWDIR} -s /sbin/nologin 2> /dev/null
        elif [ -e /etc/debian_version ]; then
                /usr/sbin/adduser --system --group --firstuid 100 --home ${WWWDIR} --no-create-home --disabled-login --force-badname ${APPUSER}
        else
                /usr/sbin/useradd -d ${WWWDIR} -s /bin/false ${APPUSER} 2> /dev/null
        fi
fi

####################################################

# Do we have httpd-phpmodules.conf line?
NEWCONFIGS=1
if [ -e ${HTTPD_CONF} ]; then
    if [ "`grep -c -e '/etc/httpd/conf/extra/httpd-phpmodules.conf' ${HTTPD_CONF}`" = "0" ]; then
        NEWCONFIGS=0
    fi
fi

####################################################

checkCURL() {
	cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-curl'`
	fi
	if [ ${NUM} = "0" ]
	then
		return;
	fi

	if [ -e /usr/local/lib/libcurl.so ]
	then
		if [ ${USER_INPUT} -eq 1 ]; then
			echo -n "cURL is already installed. Would you like to build it again? (y/n) :";
			read yesno;
			echo "";
		else
			if [ "${INPUT_VALUE}" = "d" ]; then
				yesno=y
			else
				yesno=${INPUT_VALUE}
			fi
		fi
		if [ "${yesno}" = "n" ]
		then
			return;
		fi	
	fi
	
	doCURL;	
}

checkLibJpeg() {
	cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-jpeg\-dir'`
	fi
        if [ ${NUM} = "0" ]
        then
                return;
        fi

	if [ -e /usr/local/lib/libjpeg.a ]
	then
		if [ ${FORCE} = 1 ]
		then
			return;
		fi

		if [ ${USER_INPUT} -eq 1 ]; then
			echo -n "LibJPEG is already installed. Would you like to build it again? (y/n) :";
			read yesno;
			echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi


		if [ "${yesno}" = "n" ]
		then
			return;
		fi
	fi

	doLibJpeg;
}

checkLibz() {
	if [ -e /usr/local/lib/libz.so ]
	then
		if [ ${FORCE} = 1 ]
		then
			return;
		fi

		if [ ${USER_INPUT} -eq 1 ]; then	
	                echo -n "LibZ is already installed. Would you like to build it again? (y/n) :";
        	        read yesno;
                	echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi

                if [ "${yesno}" = "n" ]
                then
                        return;
                fi
        fi

	doZlib;
}

checkLibPng() {
        cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-png\-dir'`
	fi
        if [ ${NUM} = "0" ]
        then
                return;
        fi

	checkLibz;

        if [ -e /usr/local/lib/libpng.a ]
        then
		if [ ${FORCE} = 1 ]
		then
			return;
		fi
		
		if [ ${USER_INPUT} -eq 1 ]; then
	                echo -n "LibPng is already installed. Would you like to build it again? (y/n) :";
        	        read yesno;
                	echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi

                if [ "${yesno}" = "n" ]
                then
                        return;
                fi
        fi

        doLibPng;
}

checkMCrypt() {
        cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-mcrypt'`
	fi
        if [ ${NUM} = "0" ]
        then
        	return;
        fi

	if [ -e /usr/local/lib/libmcrypt.so ]
	then

		if [ ${USER_INPUT} -eq 1 ]; then
			echo -n "mCrypt is already installed. Would you like to build it again? (y/n) :";
			read yesno;
			echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi
		
		if [ "${yesno}" = "n" ]
		then
			return;
		fi	
	fi

        doMCrypt;
}

checkMHash() {
        cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-mhash'`
	fi
        if [ ${NUM} = "0" ]
        then
                return;
        fi

        if [ -e /usr/local/lib/libmhash.so ]
        then
		if [ ${USER_INPUT} -eq 1 ]; then
	                echo -n "mHash is already installed. Would you like to build it again? (y/n) :";
        	        read yesno;
                	echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi

                if [ "${yesno}" = "n" ]
                then
                        return;
                fi
        fi

        doMHash;
}

####################################################

checkFreeType() {
        cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-freetype'`
	fi
        if [ ${NUM} = "0" ]
        then
                return;
        fi

        if [ -e /usr/local/lib/libfreetype.so ]
        then
		if [ ${USER_INPUT} -eq 1 ]; then
	                echo -n "FreeType is already installed. Would you like to build it again? (y/n) :";
        	        read yesno;
                	echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi

                if [ "${yesno}" = "n" ]
                then
                        return;
                fi
        fi

        doFreeType;
}

####################################################

checkIconv() {
        cd ${CWD};
	NUM=1
	if [ -e /usr/local/bin/php ]; then
		NUM=`/usr/local/bin/php -i | grep configure | cut -d\> -f2 | grep -c '\-\-with\-iconv'`
	fi
        if [ ${NUM} = "0" ]
        then
                return;
        fi

        if [ -e /usr/local/lib/libiconv.so ]
        then
		if [ ${USER_INPUT} -eq 1 ]; then
	                echo -n "iconv is already installed. Would you like to build it again? (y/n) :";
        	        read yesno;
                	echo "";
                else
                        if [ "${INPUT_VALUE}" = "d" ]; then
                                yesno=y
                        else
                                yesno=${INPUT_VALUE}
                        fi
                fi

                if [ "${yesno}" = "n" ]
                then
                        return;
                fi
        fi

        doIconv;
}

####################################################

ensure_webapps_php_ini() {
	WEBAPPS_INI=/var/www/config/50-webapps.ini;
	mkdir -p /var/www/config

	# PHP 5.2 does not support [PATH].. but this setup wont look at config/50-webapps.ini unless /var/www/html is used.
	# see httpd-directories.conf for SetEnv PHP_INI_SCAN_DIR /var/www/config in <directory /var/www/html>
	echo "" > ${WEBAPPS_INI};
	echo "session.save_path=${APP_TMP}" >> ${WEBAPPS_INI};
	echo "upload_tmp_dir=${APP_TMP}" >> ${WEBAPPS_INI};
	echo "disable_functions=exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname" >> ${WEBAPPS_INI};
}

ensure_webapps_tmp() {

	if [ ! -d {$APP_TMP} ]; then
		mkdir -p ${APP_TMP}
	fi
	
	chmod 770 ${APP_TMP}
	${CHOWN} ${APPUSER}:${APPGROUP} ${APP_TMP}
	
	ensure_webapps_php_ini;
}

####################################################

dophpMyAdmin(){
	if [ "${PHPMYADMIN_OPT}" != "yes" ]; then
		echo "You cannot install phpMyAdmin, because you do not have it set in options.conf file.";
		exit 1;
	fi

	cd ${CWD};
	if [ ! -d ${WWWDIR} ]; then
		echo "${WWWDIR} does not exist."
		do_exit 0
	fi

	PMA_41_MYSQL_55_DROP=4.0.10.6-all-languages
	PMA_45_PHP_55_DROP=4.4.15-all-languages

	if [ "`version_cmp ${PHPMYADMIN_VER} 4.1.0 'pma ver check'`" -ge 0 ]; then
		#4.1.0 need php 5.3.. which we have.. and mysql 5.5+
		
		if [ ! -s "$MYSQL_BIN" ]; then
			echo "${boldon}phpMyAdmin requires mysqld.  Cannot find $MYSQL_BIN${boldoff}";
			return;
		fi
		
		MYSQLV="`$MYSQL_BIN --version | awk '{ print $5 }' | cut -d , -f1`"
		
		if [ "`version_cmp ${MYSQLV} 5.5.0 'pma mysql check'`" -lt 0 ]; then
			echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires MySQL 5.5+, but ${MYSQLV} is installed${boldoff}";
			echo "${boldon}Dropping phpMyAdmin version down to ${PMA_41_MYSQL_55_DROP}${boldoff}";
			
			PHPMYADMIN_VER=${PMA_41_MYSQL_55_DROP}
			#prevent md5 lookup
			PHPMYADMIN_VER_OPT=old
		fi
		
		PHPV=${PHP5_VER_OPT}.0

		if [ "`version_cmp ${PHPV} 5.3.0 'pma php check'`" -lt 0 ]; then
			echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 5.3+, but ${PHP5_VER_OPT} is set${boldoff}";
			echo "${boldon}Dropping phpMyAdmin version down to ${PMA_41_MYSQL_55_DROP}${boldoff}";
			
			PHPMYADMIN_VER=${PMA_41_MYSQL_55_DROP}
			#prevent md5 lookup
			PHPMYADMIN_VER_OPT=old
		fi
	fi
	
	if [ "`version_cmp ${PHPMYADMIN_VER} 4.5.0 'pma4.5 ver check'`" -ge 0 ]; then
		#also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V.
		
		BIN_PHP_VER="`/usr/local/bin/php -v | grep built | awk '{ print $2 }'`"
		if [ "`version_cmp ${BIN_PHP_VER} 5.5.0 'pma4.5 php check'`" -lt 0 ]; then
			echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 5.5+, but ${BIN_PHP_VER} is installed${boldoff}"
			echo "${boldon}Dropping phpMyAdmin version down to ${PMA_45_PHP_55_DROP}${boldoff}"
			
			PHPMYADMIN_VER=${PMA_45_PHP_55_DROP}
			PHPMYADMIN_VER_OPT=old		
		fi			
	fi
	

	TARFILE=${WORKDIR}/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz
	REALPATH=${WWWDIR}/phpMyAdmin-${PHPMYADMIN_VER}
	ALIASPATH=${WWWDIR}/phpMyAdmin
	CONFIG=${REALPATH}/config.inc.php
	WEBFILE=${WEBPATH_SERVICES}/all/phpMyAdmin/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz

	if [ ! -s ${TARFILE} ]; then
	        ${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBFILE}
	fi

	if [ ! -s ${TARFILE} ]; then
		echo "The phpMyAdmin package cannot be found. Please ensure that the paths are correct";
		do_exit 0;
	fi

	PMA_NAME="phpmyadmin${PHPMYADMIN_VER_OPT}"

	M=`checkMD5 $TARFILE ${PMA_NAME}`
	if [ "$M" != "0" ]; then
		echo "";
		echo "${boldon}*** MD5 Checksum for $TARFILE Failed.  Redownloading...***${boldoff}";
		echo "";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBFILE}
	
	        M=`checkMD5 $TARFILE ${PMA_NAME}`
		if [ "$M" != "0" ]; then
                                echo "";
                                echo "";
                                echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}";
                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
                                echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                                echo "";
                                echo "";
		fi
	fi

	${TAR} xzf ${TARFILE} --no-same-owner -C ${WWWDIR};

	if [ -e ${PMA_CONFIG} ]; then
		echo "Installing custom PhpMyAdmin Config: ${PMA_CONFIG}";
		cp -f ${PMA_CONFIG} ${REALPATH}/config.inc.php
	else
		cp -f ${REALPATH}/config.sample.inc.php ${REALPATH}/config.inc.php
		perl -pi -e "s#\['auth_type'\] = 'cookie'#\['auth_type'\] = 'http'#" ${REALPATH}/config.inc.php
		perl -pi -e "s#\['extension'\] = 'mysql'#\['extension'\] = 'mysqli'#" ${REALPATH}/config.inc.php
	fi

	if [ -d ${PMA_THEMES} ]; then
			echo "Installing custom PhpMyAdmin themes: ${PMA_THEMES}";
			cp -Rf ${PMA_THEMES} ${REALPATH}
	fi
		
	rm -f ${ALIASPATH} >/dev/null 2>&1
	ln -s ${REALPATH} ${ALIASPATH}

	${CHOWN} -f -R ${APPUSER}:${APPUSER} ${REALPATH};
	${CHOWN} -h ${APPUSER}:${APPUSER} ${ALIASPATH}
	chmod -f 755 ${REALPATH};

	if [ -d ${REALPATH}/scripts ]; then
		chmod 000 ${REALPATH}/scripts
	fi
	
	if [ -d ${REALPATH}/setup ]; then
		chmod 000 ${REALPATH}/setup
	fi
	
	ensure_webapps_tmp;

	echo "phpMyAdmin ${PHPMYADMIN_VER} installation is done."
}

####################################################

doSquirrelmail(){
	if [ "${SQUIRRELMAIL_OPT}" != "yes" ]; then
		echo "You cannot install Squirrelmail, because you do not have it set in options.conf file.";
		exit 1;
	fi

        cd ${CWD};
	if [ ! -d ${WWWDIR} ]; then
		echo "${WWWDIR} does not exist."
		do_exit 0
	fi

	TARFILE=${WORKDIR}/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz
	LOCALEFILE=${WORKDIR}/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
	REALPATH=${WWWDIR}/squirrelmail-${SQUIRRELMAIL_VER}
	ALIASPATH=${WWWDIR}/squirrelmail
	CONFIG=${REALPATH}/config/config.php

	if [ ! -s ${TARFILE} ]; then
	        ${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz
	fi

	if [ ! -s ${TARFILE} ]; then
                echo "The squirrelmail package cannot be found. Please ensure that the paths are correct";
                do_exit 0;
	fi

	if [ ! -s ${LOCALEFILE} ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
	fi

        M=`checkMD5 $TARFILE squirrelmail`
        if [ "$M" != "0" ]; then
                echo "";
                echo "${boldon}*** MD5 Checksum for $TARFILE Failed.  Redownloading...***${boldoff}";
                echo "";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz

                M=`checkMD5 $TARFILE squirrelmail`
                if [ "$M" != "0" ]; then
                                echo "";
                                echo "";
                                echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}";
                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
                                echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                                echo "";
                                echo "";
                fi
        fi

	M=`checkMD5 ${LOCALEFILE} squirrelmail_locale`
	if [ "$M" != "0" ]; then
		echo "${boldon}*** MD5 Checksum for $LOCALEFILE Failed.  Redownloading...***${boldoff}";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
	fi

	#Extract the file
	${TAR} xzf ${TARFILE} --no-same-owner -C ${WWWDIR}

	#install locales
	${TAR} xzf ${LOCALEFILE} --no-same-owner -C ${REALPATH}

	#this bit is to copy all of the preious setup to the new setup
	if [ -e ${ALIASPATH} ]; then
 		       cp -fR ${ALIASPATH}/data ${REALPATH}
	fi

	#link it from a fake path:
	/bin/rm -f ${ALIASPATH}
	/bin/ln -sf squirrelmail-${SQUIRRELMAIL_VER} ${ALIASPATH}
	${CHOWN} -h ${APPUSER}:${APPUSER} ${ALIASPATH}

	#install the proper config:
	if [ ! -e ${CONFIG} ]; then
		if [ -e ${SQUIRREL_CONFIG} ]; then
			echo "Installing custom SquirrelMail Config: ${SQUIRREL_CONFIG}";
			/bin/cp -f ${SQUIRREL_CONFIG} ${CONFIG}
		else
			/bin/cp -f ${REALPATH}/config/config_default.php ${CONFIG}

			/usr/bin/perl -pi -e 's/\$force_username_lowercase = false/\$force_username_lowercase = true/' ${CONFIG}
			/usr/bin/perl -pi -e "s/\'example.com\';/\\$\_SERVER\[\'HTTP_HOST\'\];\nwhile \(sizeof\(explode\(\'\.\', \\$\domain\)\) \> 2) {\n\t\\$\domain = substr(\\$\domain, strpos\(\\$\domain, \'\.\'\) \+ 1\);\n\}/" ${CONFIG}
			/usr/bin/perl -pi -e 's/\$show_contain_subfolders_option = false/\$show_contain_subfolders_option = true/' ${CONFIG}

			/usr/bin/perl -pi -e 's/\$allow_thread_sort = false/\$allow_thread_sort = true/' ${CONFIG}
			/usr/bin/perl -pi -e 's/\$allow_server_sort = false/\$allow_server_sort = true/' ${CONFIG}

			/usr/bin/perl -pi -e 's#/var/local/squirrelmail/data/#/var/www/html/squirrelmail/data/#' ${CONFIG}
			/usr/bin/perl -pi -e 's#/var/local/squirrelmail/attach/#/var/www/html/squirrelmail/data/#' ${CONFIG}

			#we want it to use port 587 and use smtp auth.
			/usr/bin/perl -pi -e 's/\$smtpPort = 25/\$smtpPort = 587/' ${CONFIG}
			/usr/bin/perl -pi -e "s#\$smtp_auth_mech = \'none\'#\$smtp_auth_mech = \'login\'#" ${CONFIG}

			#enable the pluguins
			/usr/bin/perl -pi -e "s/Add list of enabled plugins here/Add list of enabled plugins here\n\\$\plugins\[0\] = \'spamcop\';\n\\$\plugins\[1\] = \'filters\';\n\\$\plugins\[2\] = \'squirrelspell\';/" ${CONFIG}
		fi
	fi

	/usr/bin/perl -pi -e 's/\$allow_charset_search = true;/\$allow_charset_search = false;/' ${CONFIG}

	#set the permissions:
	/bin/chmod -R 755 ${REALPATH}
	${CHOWN} -R ${APPUSER}:${APPUSER} ${REALPATH}

	if [ "${DEFPHP_CGI}" = "no" ]; then
		/bin/chmod -R 770 ${REALPATH}/data
		${CHOWN} -R apache:${APPUSER} ${REALPATH}/data
	fi

	ensure_webapps_tmp;

	echo "SquirrelMail ${SQUIRRELMAIL_VER} installation is done."
}

####################################################

doUebimiau(){
  if [ "${UEBIMIAU_OPT}" != "yes" ]; then
	echo "You cannot install UebiMiau, because you do not have it set in options.conf file.";
	exit 1;
  fi

  cd ${CWD};

  if [ ! -d ${WWWDIR} ]; then
	echo "${WWWDIR} does not exist."
	do_exit 0
  fi

  REMOTE_FILE=${WEBPATH_SERVICES}/all/webmail-${UEBIMIAU_VER}.tar.gz
  FILE=${WORKDIR}/webmail-${UEBIMIAU_VER}.tar.gz;
  DEST=${WWWDIR};
  TMPDIR=${DEST}/webmail/tmp

  OS=`uname`
  TAR=/bin/tar
  MKDIR=/bin/mkdir
  CHMOD=/bin/chmod
  CHOWN=/bin/chown

  if [ "$OS" = "FreeBSD" ]; then
        TAR=/usr/bin/tar
        CHOWN=/usr/sbin/chown
  fi

  if [ ! -e ${FILE} ]; then
        ${WGET} ${WGET_CONNECT_OPTIONS} -O $FILE $REMOTE_FILE
  fi

  if [ ! -e ${FILE} ]; then
        echo "Unable to find ${FILE}, make sure it exists.";
        exit -1;
  fi

  M=`checkMD5 $FILE uebimiau`
  if [ "$M" != "0" ]; then
    echo "";
    echo "${boldon}*** MD5 Checksum for $FILE Failed.  Redownloading...***${boldoff}";
    echo "";
    ${WGET} ${WGET_CONNECT_OPTIONS} -O $FILE $REMOTE_FILE

    M=`checkMD5 $FILE uebimiau`
      if [ "$M" != "0" ]; then
		echo "";
		echo "";
		echo "${boldon}*** MD5 Checksum for $FILE failed *again*.***${boldoff}";
		echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
		echo "Install continuing with this possibly corrupted file. (it may also be fine)";
		echo "";
		echo "";
      fi
    fi

  $TAR xzf ${FILE} --no-same-owner -C ${DEST}
  $MKDIR -p $TMPDIR
  $CHOWN -f -R ${APPUSER}:${APPUSER} $DEST/webmail
  if [ "${DEFPHP_CGI}" = "no" ]; then
	  $CHMOD -f -R 770 $TMPDIR;
	  $CHOWN -f -R $APPUSER:$APPUSER $DEST/webmail
	  $CHOWN -f -R apache:${APPUSER} $TMPDIR;
  fi

  if [ ! -e $TMPDIR/.htaccess ]; then
	  echo "Deny from All" >> $TMPDIR/.htaccess
  fi

  #increase the timeout from 10 minutes to 24
  perl -pi -e 's/idle_timeout = 10/idle_timeout = 24/' ${DEST}/webmail/inc/config.security.php
  perl -pi -e 's#\$temporary_directory = "./database/";#\$temporary_directory = "./tmp/";#' ${DEST}/webmail/inc/config.php
  perl -pi -e 's/= "ONE-FOR-EACH";/= "ONE-FOR-ALL";/' ${DEST}/webmail/inc/config.php
  perl -pi -e 's#\$smtp_server = "SMTP.DOMAIN.COM";#\$smtp_server = "localhost";#' ${DEST}/webmail/inc/config.php
  perl -pi -e 's/POP3.DOMAIN.COM/localhost/' ${DEST}/webmail/inc/config.php
  perl -pi -e 's#20480#0#' ${DEST}/webmail/inc/config.php
  
  rm -rf ${DEST}/webmail/install
}

####################################################

doatmail(){
	if [ "${ATMAIL_OPT}" != "yes" ]; then
		echo "You cannot install Atmail webmail, because you do not have it set in options.conf file.";
		exit 1;
	fi

	cd ${CWD};
	DA_MYSQL=/usr/local/directadmin/conf/mysql.conf
	TARFILE=${WORKDIR}/atmailopen-${ATMAIL_VER}.tgz
	WWWPATH=/var/www/html
	REALPATH=${WWWPATH}/atmail-${ATMAIL_VER}
	ALIASPATH=${WWWPATH}/atmail
	if [ -e /etc/httpd/conf/extra/httpd-alias.conf ]; then
		HTTPDCONF=/etc/httpd/conf/extra/httpd-alias.conf
	else
		HTTPDCONF=/etc/httpd/conf/httpd.conf
	fi
	DA_HOSTNAME="`hostname`"
	HTTPPATH=http://${DOWNLOADSERVER_OPT}/services/all/atmail
	ADMIN_EMAIL1="`cat /usr/local/directadmin/data/users/admin/ticket.conf | grep email  | cut -d= -f2 | cut -d@ -f1`"
	ADMIN_EMAIL2="`cat /usr/local/directadmin/data/users/admin/ticket.conf | grep email  | cut -d@ -f2`"

	# variables for the database:
	ATMAIL_DB=da_atmail
	ATMAIL_DB_USER=da_atmail
	ATMAIL_DB_PASS="`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`";
	MYSQLUSER="`grep "^user=" ${DA_MYSQL} | cut -d= -f2`"
	MYSQLPASSWORD="`grep "^passwd=" ${DA_MYSQL} | cut -d= -f2`"

	if [ ! -s ${TARFILE} ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${HTTPPATH}/atmailopen-${ATMAIL_VER}.tgz
	fi

	if [ ! -s ${TARFILE} ]; then
		echo "Cannot download ${TARFILE}"
		exit 1
	fi

        M=`checkMD5 $TARFILE atmail`
        if [ "$M" != "0" ]; then
                echo "";
                echo "${boldon}*** MD5 Checksum for $TARFILE Failed.  Redownloading...***${boldoff}";
                echo "";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${HTTPPATH}/atmailopen-${ATMAIL_VER}.tgz

                M=`checkMD5 $TARFILE atmail`
                if [ "$M" != "0" ]; then
                                echo "";
                                echo "";
                                echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}";
                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
                                echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                                echo "";
                                echo "";
                fi
        fi

	#Extract the file
	${TAR} xzf ${TARFILE} --no-same-owner -C ${WWWPATH}
	if [ -d ${WWWPATH}/atmail-${ATMAIL_VER} ]; then
		rm -rf ${WWWPATH}/atmail-${ATMAIL_VER}
	fi
	mv ${WWWPATH}/atmailopen ${WWWPATH}/atmail-${ATMAIL_VER}

	if [ ! -e ${REALPATH} ]; then
		echo "Directory ${REALPATH} does not exist"
		exit 1
	fi

	mkdir -p ${REALPATH}/logs

	if [ -e ${ALIASPATH} ]; then
		if [ -d ${ALIASPATH}/logs ]; then
			cp -fR ${ALIASPATH}/logs/* ${REALPATH}/logs >/dev/null 2>&1
		fi
			if [ -d ${ALIASPATH}/tmp ]; then
			cp -fR ${ALIASPATH}/tmp/* ${REALPATH}/tmp >/dev/null 2>&1
		fi
	fi

	#link it from a fake path:
	/bin/rm -f ${ALIASPATH}
	/bin/ln -sf atmail-${ATMAIL_VER} ${ALIASPATH}
	${CHOWN} -h ${APPUSER}:${APPUSER} ${ALIASPATH}
	cd ${REALPATH}

	#insert data to mysql and create database/user for atmail:
	if [ ! -d $MYSQL_DATA/${ATMAIL_DB} ]; then
		if [ -d install ]; then
			echo "Inserting data to mysql and creating database/user for atmail..."
			mysql -e "CREATE DATABASE ${ATMAIL_DB};" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
			mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX ON ${ATMAIL_DB}.* TO '${ATMAIL_DB_USER}'@'localhost' IDENTIFIED BY '${ATMAIL_DB_PASS}';" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
			mysql -e "use ${ATMAIL_DB}; source install/atmail.mysql;" --user=${ATMAIL_DB_USER} --password=${ATMAIL_DB_PASS}
			echo "Database created, ${ATMAIL_DB_USER} password is ${ATMAIL_DB_PASS}"
		else
			echo "Cannot find install directory in atmail-${VERSION}"
			exit 1
		fi
	else
		mysql -e "SET PASSWORD FOR '${ATMAIL_DB_USER}'@'localhost' = PASSWORD('${ATMAIL_DB_PASS}');" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
	fi

	#install the proper config:
	if [ -d ../atmail ]; then
		#edit configuration file
		echo "Editing atmail configuration..."
		cd ${REALPATH}/libs/Atmail
	    cp -f Config.php.default Config.php
		
		/usr/bin/perl -pi -e "s|'installed' => 0|'installed' => 1|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s| 'decode_tnef' => 1| 'decode_tnef' => 0|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'sql_user' => 'root'|'sql_user' => '${ATMAIL_DB_USER}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'allow_Signup' => '1'|'allow_Signup' => '0'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'smtphost' => 'mail.iinet.net.au'|'smtphost' => 'localhost'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'install_dir' => ''|'install_dir' => '${REALPATH}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'user_dir' => '/var/www/html/atmailopen'|'user_dir' => '${REALPATH}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'sql_table' => 'atmail'|'sql_table' => '${ATMAIL_DB}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'sql_pass' => ''|'sql_pass' => '${ATMAIL_DB_PASS}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'install_type' => 'server'|'install_type' => 'standalone'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'gpg_path' => ''|'gpg_path' => '/usr/bin/gpg'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'admin_email' => ''|'admin_email' => '${ADMIN_EMAIL1}\@${ADMIN_EMAIL2}'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'error_log' => '/usr/local/atmail/logs/error_log'|'error_log' => '${REALPATH}/logs/error_log'|" Config.php > /dev/null
		/usr/bin/perl -pi -e "s|'mailserver_auth' => '1'|'mailserver_auth' => NULL|" Config.php > /dev/null
		
		#edit skin
		cd ${REALPATH}/html
		perl -pi -e 's|<td align="left"><input name="MailServer" type="text" class="logininput" id="MailServer"></td>|<td align="left"><select name="MailServer" class="loginselect"><option value="localhost" selected>localhost</option></select></td>|' login-light.html
		
		echo "Atmail ${ATMAIL_VER} has been installed successfully."
	fi

	#set the permissions:
	${CHOWN} -R ${APPUSER}:${APPUSER} ${REALPATH}
	if [ "${DEFPHP_CGI}" = "no" ]; then
		${CHOWN} -R apache ${REALPATH}/logs ${REALPATH}/tmp
		/bin/chmod -R 770 ${REALPATH}/logs
		/bin/chmod -R 770 ${REALPATH}/tmp
	fi

	#cleanup:
	rm -rf ${ALIASPATH}/install

	#writing alias to httpd.conf
	COUNTALIAS=`grep -c -e "Alias /atmail" ${HTTPDCONF}`
	if [ "${COUNTALIAS}" = "0" ]; then
	   echo "Adding atmail alias to ${HTTPDCONF}"
	   echo "" >> ${HTTPDCONF}
	   echo "# Alias for Atmail webmail" >> ${HTTPDCONF}
	   echo "Alias /atmail ${ALIASPATH}/" >> ${HTTPDCONF}
	   echo "" >> ${HTTPDCONF}
	   echo "You need to restart the httpd service if you want alias to work."
	fi
}

####################################################

doroundcube(){
	if [ "${ROUNDCUBE_OPT}" != "yes" ]; then
		echo "You cannot install RoundCube webmail, because you do not have it set in options.conf file.";
		exit 1;
	fi
	
	V1=`echo ${ROUNDCUBE_VER} | cut -d. -f1`
	V2=`echo ${ROUNDCUBE_VER} | cut -d. -f2`
	if [ "${PHP5_VER_OPT}" = "5.2" ] && [ "${V1}" -ge 0 ] && [ "${V2}" -ge 9 ]; then
		echo "Roundcube ${ROUNDCUBE_VER} requires php 5.3 or greater";
		exit 1;
	fi

	if [ "${PHP5_VER_OPT}" = "5.2" ] && [ "${V1}" -ge 1 ]; then
		echo "Roundcube ${ROUNDCUBE_VER} requires php 5.3 or greater";
		exit 1;
	fi
	
	if [ "`version_cmp ${ROUNDCUBE_VER} 1.3.0 'RC 1.3.0 php 5.3 check'`" -ge 0 ]; then
		#RC 1.3.0+ will not run on php 5.3 or older.
		if [ "${PHP5_VER_OPT}" = "5.3" ]; then
			echo "${boldon}RoundCube ${ROUNDCUBE_VER} cannot run on php 5.3 or older.  Downgrading RC to 1.2.5${boldoff}";
			ROUNDCUBE_VER=1.2.5
		fi
	fi
	
	if [ ${ROUNDCUBE_MAJOR_VER} -ne 0 ]; then
		if [ -s ${ROUNDCUBE_CONFIG_OLD} ] || [ -s ${ROUNDCUBE_CONFIG_DB_OLD} ]; then
			echo "Please remove RoundCube 0.x custom configuration files if you would like to upgrade it. The following files should not be used anymore: ${ROUNDCUBE_CONFIG_OLD}, ${ROUNDCUBE_CONFIG_DB_OLD}. Please use config.inc.php as a new custom RoundCube configuration file."
			return;
		fi
	fi
	
    	cd ${CWD};
	DA_MYSQL=/usr/local/directadmin/conf/mysql.conf
	TARFILE=${WORKDIR}/roundcubemail-${ROUNDCUBE_VER}.tar.gz
	REALPATH=${WWWDIR}/roundcubemail-${ROUNDCUBE_VER}
	ALIASPATH=${WWWDIR}/roundcube
	if [ -e /etc/httpd/conf/extra/httpd-alias.conf ]; then
		HTTPDCONF=/etc/httpd/conf/extra/httpd-alias.conf
	else
		HTTPDCONF=/etc/httpd/conf/httpd.conf
	fi
	
	DA_HOSTNAME=`hostname`
	HTTPPATH=${WEBPATH_SERVICES}/all/roundcube

	# variables for the database:
	ROUNDCUBE_DB=da_roundcube
	ROUNDCUBE_DB_USER=da_roundcube
	ROUNDCUBE_DB_PASS=`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`;
	ROUNDCUBE_DES_KEY=`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..23'`;
	DB_CONFIG=${REALPATH}/config/db.inc.php
	MYSQLUSER=`grep "^user=" ${DA_MYSQL} | cut -d= -f2`
	MYSQLPASSWORD=`grep "^passwd=" ${DA_MYSQL} | cut -d= -f2`

	if [ ! -s ${TARFILE} ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${HTTPPATH}/roundcubemail-${ROUNDCUBE_VER}.tar.gz
	fi

	if [ ! -s ${TARFILE} ]; then
		echo "Cannot download roundcubemail-${ROUNDCUBE_VER}"
		do_exit 0
	fi

        M=`checkMD5 $TARFILE roundcube`
        if [ "$M" != "0" ]; then
                echo "";
                echo "${boldon}*** MD5 Checksum for $TARFILE Failed.  Redownloading...***${boldoff}";
                echo "";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${HTTPPATH}/roundcubemail-${ROUNDCUBE_VER}.tar.gz

                M=`checkMD5 $TARFILE roundcube`
                if [ "$M" != "0" ]; then
                                echo "";
                                echo "";
                                echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}";
                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
                                echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                                echo "";
                                echo "";
                fi
        fi

	#Extract the file
	${TAR} xzf ${TARFILE} --no-same-owner -C ${WWWDIR}

	if [ ! -e ${REALPATH} ]; then
		echo "Directory ${REALPATH} does not exist"
		exit 1
	fi

	if [ -e ${ALIASPATH} ]; then
		if [ -d ${ALIASPATH}/logs ]; then
			cp -fR ${ALIASPATH}/logs ${REALPATH}
		fi
		if [ -d ${ALIASPATH}/temp ]; then
			cp -fR ${ALIASPATH}/temp ${REALPATH}
		fi
	fi

	#link it from a fake path:
	/bin/rm -f ${ALIASPATH}
	/bin/ln -sf roundcubemail-${ROUNDCUBE_VER} ${ALIASPATH}
	${CHOWN} -h ${APPUSER}:${APPUSER} ${ALIASPATH}
	cd ${REALPATH}

	#insert data to mysql and create database/user for roundcube:
	if [ ! -d $MYSQL_DATA/${ROUNDCUBE_DB} ]; then
		if [ -d SQL ]; then
			echo "Inserting data to mysql and creating database/user for roundcube..."
			mysql -e "CREATE DATABASE ${ROUNDCUBE_DB};" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
			mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX ON ${ROUNDCUBE_DB}.* TO '${ROUNDCUBE_DB_USER}'@'localhost' IDENTIFIED BY '${ROUNDCUBE_DB_PASS}';" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
			mysql -e "use ${ROUNDCUBE_DB}; source SQL/mysql.initial.sql;" --user=${ROUNDCUBE_DB_USER} --password=${ROUNDCUBE_DB_PASS}
			echo "Database created, ${ROUNDCUBE_DB_USER} password is ${ROUNDCUBE_DB_PASS}"
		else
			echo "Cannot find SQL directory in roundcubemail-${ROUNDCUBE_VER}"
			do_exit 0
		fi
	else
		if [ ! -e ${ROUNDCUBE_CONFIG_DB} ]; then
			mysql -e "SET PASSWORD FOR '${ROUNDCUBE_DB_USER}'@'localhost' = PASSWORD('${ROUNDCUBE_DB_PASS}');" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
			mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX ON ${ROUNDCUBE_DB}.* TO '${ROUNDCUBE_DB_USER}'@'localhost' IDENTIFIED BY '${ROUNDCUBE_DB_PASS}';" --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		fi
	fi

	if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
		EDIT_CONFIG=main.inc.php
		CONFIG_DIST=main.inc.php.dist
		EDIT_DB=db.inc.php
		DB_DIST=db.inc.php.dist
	else
		EDIT_CONFIG=config.inc.php
		CONFIG_DIST=config.inc.php.sample
		EDIT_DB=${EDIT_CONFIG}
		DB_DIST=${CONFIG_DIST}
	fi
	
	#Cleanup config
	rm -f ${REALPATH}/config/${EDIT_CONFIG}
	
	#insert data to mysql and create database/user for roundcube:
	if [ ! -d $MYSQL_DATA/${ROUNDCUBE_DB} ]; then
		if [ -d SQL ]; then
			echo "Inserting data to mysql and creating database/user for roundcube..."
			mysql -e "CREATE DATABASE ${ROUNDCUBE_DB};" --host=${MYSQLHOST} --user=${MYSQLUSER} --password=${MYSQLPASSWORD} 2>&1
			mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX ON ${ROUNDCUBE_DB}.* TO '${ROUNDCUBE_DB_USER}'@'${MYSQL_ACCESS_HOST}' IDENTIFIED BY '${ROUNDCUBE_DB_PASS}';" --host=${MYSQLHOST} --user=${MYSQLUSER} --password=${MYSQLPASSWORD} 2>&1
			mysql -e "use ${ROUNDCUBE_DB}; source SQL/mysql.initial.sql;" --user=${ROUNDCUBE_DB_USER} --password=${ROUNDCUBE_DB_PASS} 2>&1
			echo "Database created, ${ROUNDCUBE_DB_USER} password is ${ROUNDCUBE_DB_PASS}"
		else
			echo "Cannot find SQL directory in roundcubemail-${ROUNDCUBE_VER}"
			do_exit 0
		fi
	else
		if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
			COUNT_MYSQL=`grep -c 'mysql://' ${ROUNDCUBE_CONFIG_DB}`
			if [ ${COUNT_MYSQL} -gt 0 ]; then
				PART1="`grep "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f1 | cut -d'/' -f3`"
				ROUNDCUBE_DB_USER="`echo ${PART1} | cut -d\: -f1`"
				ROUNDCUBE_DB_PASS="`echo ${PART1} | cut -d\: -f2`"
				PART2="`grep "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f2 | cut -d\' -f1`"
				MYSQL_ACCESS_HOST="`echo ${PART2} | cut -d'/' -f1`"
				ROUNDCUBE_DB="`echo ${PART2} | cut -d'/' -f2`"
			fi
		fi
		mysql -e "SET PASSWORD FOR '${ROUNDCUBE_DB_USER}'@'${MYSQL_ACCESS_HOST}' = PASSWORD('${ROUNDCUBE_DB_PASS}');" --host=${MYSQLHOST} --user=${MYSQLUSER} --password=${MYSQLPASSWORD} 2>&1
		mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX ON ${ROUNDCUBE_DB}.* TO '${ROUNDCUBE_DB_USER}'@'${MYSQL_ACCESS_HOST}' IDENTIFIED BY '${ROUNDCUBE_DB_PASS}';" --host=${MYSQLHOST} --user=${MYSQLUSER} --password=${MYSQLPASSWORD} 2>&1
	fi
	
	#install the proper config:
	if [ -d ../roundcube ]; then
		
		echo "Editing roundcube configuration..."
		cd ${REALPATH}/config
		
		if [ -e ${ROUNDCUBE_CONFIG} ]; then
			echo "Installing custom RoundCube Config: ${ROUNDCUBE_CONFIG}";
			cp -f ${ROUNDCUBE_CONFIG} ${EDIT_CONFIG}
		fi
		
		if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
			if [ ! -e ${EDIT_DB} ]; then
				/bin/cp -f ${ROUNDCUBE_CONFIG_DB} ${EDIT_DB}
			fi
			if [ ${COUNT_MYSQL} -eq 0 ];then
				echo "\$config['db_dsnw'] = 'mysql://${ROUNDCUBE_DB_USER}:${ROUNDCUBE_DB_PASS}@${MYSQLHOST}/${ROUNDCUBE_DB}';" >> ${EDIT_DB}
			fi
		else
			if [ ! -e ${EDIT_DB} ]; then
				/bin/cp -f ${DB_DIST} ${EDIT_DB}
				/usr/bin/perl -pi -e "s|mysql://roundcube:pass\@localhost/roundcubemail|mysql://${ROUNDCUBE_DB_USER}:${ROUNDCUBE_DB_PASS}\@${MYSQLHOST}/${ROUNDCUBE_DB}|" ${EDIT_DB} > /dev/null
				/usr/bin/perl -pi -e "s/\'mdb2\'/\'db\'/" ${EDIT_DB} > /dev/null
			fi
		fi
		
		
		if [ ! -e ${ROUNDCUBE_CONFIG} ]; then
			if [ ! -e ${EDIT_CONFIG} ]; then
					/bin/cp -f ${CONFIG_DIST} ${EDIT_CONFIG}
			fi
			/usr/bin/perl -pi -e "s|rcmail-\!24ByteDESkey\*Str|${ROUNDCUBE_DES_KEY}|" ${EDIT_CONFIG}
			if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
				#This options does not exist anymore from RC 0.6
				#/usr/bin/perl -pi -e "s|\['enable_caching'] = TRUE|\['enable_caching'] = FALSE|" ${EDIT_CONFIG} > /dev/null

				#It's better not use use imap_root/delimiter
				#/usr/bin/perl -pi -e "s|\['imap_root'] = null|\['imap_root'] = 'INBOX.'|" ${EDIT_CONFIG} > /dev/null
				#/usr/bin/perl -pi -e "s|\['imap_delimiter'] = null|\['imap_delimiter'] = '.'|" ${EDIT_CONFIG} > /dev/null

				/usr/bin/perl -pi -e "s|\['default_host'] = ''|\['default_host'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['drafts_mbox'] = 'Drafts'|\['drafts_mbox'] = 'INBOX.Drafts'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['junk_mbox'] = 'Junk'|\['junk_mbox'] = 'INBOX.spam'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['sent_mbox'] = 'Sent'|\['sent_mbox'] = 'INBOX.Sent'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['trash_mbox'] = 'Trash'|\['trash_mbox'] = 'INBOX.Trash'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_imap_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', 'INBOX.spam', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', 'INBOX.spam', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null

				#smtp stuff
				/usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_auth_type'] = ''|\['smtp_auth_type'] = 'LOGIN'|" ${EDIT_CONFIG} > /dev/null

				/usr/bin/perl -pi -e "s|\['create_default_folders'] = FALSE;|\['create_default_folders'] = TRUE;|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['create_default_folders'] = false;|\['create_default_folders'] = true;|" ${EDIT_CONFIG} > /dev/null
				
				/usr/bin/perl -pi -e "s|\['login_lc'] = 0;|\['login_lc'] = 2;|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['login_autocomplete'] = 0;|\['login_autocomplete'] = 2;|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['quota_zero_as_unlimited'] = false;|\['quota_zero_as_unlimited'] = true;|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['enable_spellcheck'] = true;|\['enable_spellcheck'] = false;|" ${EDIT_CONFIG} > /dev/null
			else				
				#default_host is set to localhost by default in RC 1.0.0, so we don't echo it to the file
				
				#These ones are already in config.inc.php.sample file, so we just use perl-regex to change them
				/usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null
				/usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null
				
				#Changing default options, that are set in defaults.inc.php
				echo "\$config['drafts_mbox'] = 'INBOX.Drafts';" >> ${EDIT_CONFIG}
				echo "\$config['junk_mbox'] = 'INBOX.spam';" >> ${EDIT_CONFIG}
				echo "\$config['sent_mbox'] = 'INBOX.Sent';" >> ${EDIT_CONFIG}
				echo "\$config['trash_mbox'] = 'INBOX.Trash';" >> ${EDIT_CONFIG}
				echo "\$config['default_folders'] = array('INBOX', 'INBOX.Drafts', 'INBOX.Sent', 'INBOX.spam', 'INBOX.Trash');" >> ${EDIT_CONFIG}
				echo "\$config['smtp_auth_type'] = 'LOGIN';" >> ${EDIT_CONFIG}
				echo "\$config['create_default_folders'] = true;" >> ${EDIT_CONFIG}
				echo "\$config['login_autocomplete'] = 2;" >> ${EDIT_CONFIG}
				echo "\$config['quota_zero_as_unlimited'] = true;" >> ${EDIT_CONFIG}
				echo "\$config['enable_spellcheck'] = false;" >> ${EDIT_CONFIG}
				echo "\$config['email_dns_check'] = true;" >> ${EDIT_CONFIG}
				COUNT="`grep -c '^recipients_max' /etc/exim.conf`"
				if [ "${COUNT}" -gt 0 ]; then
					RECIPIENTS_MAX="`grep -m1 '^recipients_max' /etc/exim.conf | cut -d= -f2 | tr -d ' '`"
					echo "\$config['max_recipients'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG}
					echo "\$config['max_group_members'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG}
				fi
				
				if [ ! -s mime.types ]; then
					if [ -s /etc/httpd/conf/mime.types ]; then
						COUNT=`grep -c 'application/java-archive' /etc/httpd/conf/mime.types`
						if [ ${COUNT} -gt 0 ]; then
							cp -f /etc/httpd/conf/mime.types ./mime.types
						fi
					fi
				fi
				if [ ! -s mime.types ]; then
					${WGET} ${WGET_CONNECT_OPTIONS} -O mime.types http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types 2> /dev/null
				fi
				echo "\$config['mime_types'] = '${ALIASPATH}/config/mime.types';" >> ${EDIT_CONFIG}
			fi
		fi                

                #password plugin
                if [ -e ${REALPATH}/plugins/password ]; then
			if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
				/usr/bin/perl -pi -e "s|\['plugins'] = array\(\);|\['plugins'] = array\('password'\);|" ${EDIT_CONFIG} > /dev/null
			else
				/usr/bin/perl -pi -e "s|\['plugins'] = array\(\n|\['plugins'] = array\(\n    'password',\n|" ${EDIT_CONFIG} > /dev/null
			fi

                        cd ${REALPATH}/plugins/password
                        if [ ! -e config.inc.php ]; then
                                cp config.inc.php.dist config.inc.php
                        fi

			/usr/bin/perl -pi -e "s|\['password_driver'] = 'sql'|\['password_driver'] = 'directadmin'|" config.inc.php > /dev/null

                        if [ -e $DACONF_FILE ]; then
                                DAPORT=`grep -e '^port=' /usr/local/directadmin/conf/directadmin.conf | cut -d= -f2`
                                /usr/bin/perl -pi -e "s|\['password_directadmin_port'] = 2222|\['password_directadmin_port'] = $DAPORT|" config.inc.php > /dev/null

				DASSL=`grep -e '^SSL=' /usr/local/directadmin/conf/directadmin.conf | cut -d= -f2`
				if [ "$DASSL" -eq 1 ];then
					/usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'ssl://localhost'|" config.inc.php > /dev/null
				fi
                        fi
			cd ${REALPATH}/config
                fi

		if [ -d ${ROUNDCUBE_PLUGINS} ]; then
			echo "Copying files from ${ROUNDCUBE_PLUGINS} to ${REALPATH}/plugins";
			cp -Rp ${ROUNDCUBE_PLUGINS}/* ${REALPATH}/plugins
		fi

		if [ -d ${ROUNDCUBE_SKINS} ]; then
			echo "Copying files from ${ROUNDCUBE_SKINS} to ${REALPATH}/skins";
			cp -Rp ${ROUNDCUBE_SKINS}/* ${REALPATH}/skins
		fi


		echo "Roundcube ${ROUNDCUBE_VER} has been installed successfully."
	fi

	#set the permissions:
	${CHOWN} -R ${APPUSER}:${APPUSER} ${REALPATH}
	if [ "${APPGROUP}" = "apache" ]; then
		${CHOWN} -R apache ${REALPATH}/temp ${REALPATH}/logs
		/bin/chmod -R 770 ${REALPATH}/temp
		/bin/chmod -R 770 ${REALPATH}/logs
	fi

	#secure configuration file
	if [ -s ${REALPATH}/config/${EDIT_DB} ]; then
		chmod 440 ${REALPATH}/config/${EDIT_DB}
		
		if [ "${APPGROUP}" = "apache" ]; then
			echo "**********************************************************************";
			echo "* ";
			echo "* ${boldon}SECURITY: ${REALPATH}/config/${EDIT_DB} is readable by apache.${boldoff}";
			echo "* Recommended: use a php type that runs php scripts as the User, then re-install roundcube.";
			echo "* For CB1.2, use suPhp: http://help.directadmin.com/item.php?id=197";
			echo "* Or update CB2.0 with defaults: http://help.directadmin.com/item.php?id=555 (mod_php+mod_ruid2)";
			echo "*";
			echo "**********************************************************************";
		fi

		chown ${APPUSER}:${APPGROUP} ${REALPATH}/config/${EDIT_DB}

		if [ "${APPGROUP}" = "apache" ]; then
			ls -la ${REALPATH}/config/${EDIT_DB}
			sleep 5;
		fi
	fi

	#systems with "system()" in disable_functions need to use no php.ini:
	if [ "`have_php_system`" = "0" ]; then
		perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/update.sh
	fi

	#update if needed
	${REALPATH}/bin/update.sh '--version=?'

	#cleanup
	rm -rf ${ALIASPATH}/installer

	RC_HTACCESS=${REALPATH}/.htaccess
	if [ -s "${RC_HTACCESS}" ]; then
		COUNT=`grep -c upload_max_filesize ${RC_HTACCESS}`
		if [ "${COUNT}" -ge 1 ]; then
			perl -pi -e 's/^php_value\supload_max_filesize/#php_value       upload_max_filesize/' ${RC_HTACCESS}
			perl -pi -e 's/^php_value\spost_max_size/#php_value       post_max_size/' ${RC_HTACCESS}
		fi
		
		perl -pi -e 's/FollowSymLinks/SymLinksIfOwnerMatch/' ${RC_HTACCESS}
	fi

	#writing alias to httpd.conf
	COUNTALIAS=`grep -c -e "Alias /roundcube" ${HTTPDCONF}`
	if [ "${COUNTALIAS}" = "0" ]; then
		echo "Adding roundcube alias to ${HTTPDCONF}"
		echo "" >> ${HTTPDCONF}
		echo "# Alias for RoundCube webmail" >> ${HTTPDCONF}
		echo "Alias /roundcube ${ALIASPATH}/" >> ${HTTPDCONF}
		echo "" >> ${HTTPDCONF}
		echo "You need to restart the httpd service if you want alias to work."
	fi
	
	ensure_webapps_tmp;
}

####################################################

doExim(){
	if [ "${EXIM_OPT}" != "yes" ]; then
		echo "You cannot update Exim configuration files, because you do not have it set in options.conf file.";
		exit 1;
	fi

	if [ ! -e /usr/include/db.h ]; then
		echo "Cannot find /usr/include/db.h.  Please install db.h";
		if [ -e /etc/debian_version ]; then
			echo "apt-get install libdb4.8-dev libperl-dev libsasl2-dev";
		elif [ ${OS} = "FreeBSD" ]; then
			echo "pkg_add -r cyrus-sasl2"
		else
			echo "yum install db4-devel cyrus-sasl-devel";
		fi
		do_exit 0;
	fi

	getFile exim-${EXIM_VER}.tar.gz
	getFile exim
	getFile exim_freebsd
	getFile exim_debian

	quitIfLocked doExim
	
	cd ${CWD};
	FILE=${CWD}/exim-${EXIM_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";

	cd exim-${EXIM_VER}

	if [ "${EXIM_MAKEFILE}" != "" ]; then
		cp -f ${EXIM_MAKEFILE} Local/Makefile
	else
		${WGET} ${WGET_CONNECT_OPTIONS} -O Local/Makefile ${WEBPATH}/Makefile
	fi

	while
	echo "Trying to make exim..."
	do
	{
		#removed multiple cores: http://www.directadmin.com/forum/showthread.php?p=181950&posted=1#post181950
		#C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
		C_INCLUDE_PATH=/usr/kerberos/include make

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
	                else
        	                if [ "${INPUT_VALUE}" = "d" ]; then
                	                yesno=n
                        	else
                                	yesno=${INPUT_VALUE}
	                        fi
        	        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	while
	echo "Installing exim...";
	do
	{
		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
        	                read yesno;
                	        echo "";
			else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
			fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
	}
	done;

	echo "Moving exim binary."
	EXIM_BINARY=`ls -t /usr/sbin/exim-${EXIM_VER}-* | head -n1`
	if [ "${EXIM_BINARY}" = "" ]; then
		#4.86.2 shows up as /usr/sbin/exim-4.86_2-2
		#assume newest binary is the winner.
		EXIM_BINARY=`ls -t /usr/sbin/exim-*-* | head -n1`
	fi
	
	mv -f ${EXIM_BINARY} /usr/sbin/exim
	chmod 4755 /usr/sbin/exim

	if [ ! -e /etc/exim.conf ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} -O /etc/exim.conf $WEBPATH/exim.conf
		${WGET} ${WGET_CONNECT_OPTIONS} -O /etc/exim.pl $WEBPATH/exim.pl
	fi

	if [ ! -e ${INITDDIR}/exim ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/exim_freebsd ${INITDDIR}/exim
			chmod 755 ${INITDDIR}/exim
		elif [ -e /etc/debian_version ]; then
			cp ${CWD}/exim_debian ${INITDDIR}/exim
			chmod 755 ${INITDDIR}/exim
			update-rc.d exim defaults
		else
			cp ${CWD}/exim_boot ${INITDDIR}/exim
			chmod 755 ${INITDDIR}/exim
			/sbin/chkconfig exim on
		fi
	fi

	echo "Exim ${EXIM_VER} Installed.";
	removeLockfile
	cd ${CWD};

	echo "Restarting exim."
	${INITDDIR}/exim restart
}

####################################################

doEximConf(){
	if [ "${EXIMCONF_OPT}" != "yes" ]; then
		echo "You cannot update Exim configuration files, because you do not have it set in options.conf file.";
		exit 1;
	fi
	${WGET} ${WGET_CONNECT_OPTIONS} -O /etc/exim.conf http://${DOWNLOADSERVER_OPT}/services/exim.conf
	${WGET} ${WGET_CONNECT_OPTIONS} -O /etc/exim.pl http://${DOWNLOADSERVER_OPT}/services/exim.pl
	chmod 755 /etc/exim.pl
	cd /etc/virtual
	touch blacklist_domains whitelist_from use_rbl_domains bad_sender_hosts blacklist_senders whitelist_domains whitelist_hosts whitelist_senders
	echo 0 > limit
	mkdir -p usage
	chown mail:mail blacklist_domains whitelist_from use_rbl_domains bad_sender_hosts blacklist_senders whitelist_domains whitelist_hosts whitelist_senders limit usage

	if [ "${DOVECOT_OPT}" = "yes" ]; then
		cd ${WORKDIR}
		patch -p0 < exim.conf.dovecot.patch
	fi

	echo "Restarting exim."
	${INITDDIR}/exim restart
}

####################################################

compile_mysql_binary()
{
		MYSQLURL=${WEBPATH_SERVICES}/all/mysql
		MYSQLSRC=mysql-${MYSQL_VER}		

		if [ ! -e ${MYSQLSRC}.tar.gz ]; then
			fetch -o ./${MYSQLSRC}.tar.gz ${MYSQLURL}/${MYSQLSRC}.tar.gz
			if [ ! -e ${MYSQLSRC}.tar.gz ]; then
					${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLSRC}.tar.gz ${MYSQLURL}/${MYSQLSRC}.tar.gz
			fi
		fi

		M=`checkMD5 ${MYSQLSRC}.tar.gz mysql${MYSQL_OPT}`
		if [ "$M" != "0" ]; then
			echo "";
			echo "${boldon}*** MD5 Checksum for ${MYSQLSRC}.tar.gz  Failed.  Redownloading...***${boldoff}";
			echo "";
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLSRC}.tar.gz ${MYSQLURL}/${MYSQLSRC}.tar.gz

			M=`checkMD5 ${MYSQLSRC}.tar.gz mysql${MYSQL_OPT}`
        	        if [ "$M" != "0" ]; then
                	                echo "";
                        	        echo "";
                                	echo "${boldon}*** MD5 Checksum for ${MYSQLSRC}.tar.gz failed *again*.***${boldoff}";
	                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
        	                        echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                	                echo "";
                        	        echo "";
	                fi
		fi

		if [ -e ${MYSQLSRC} ]; then
			echo "Found old ${MYSQLSRC}, removing ...";
			rm -rf ${MYSQLSRC};
		fi

		echo "Extracting ${MYSQLSRC}.tar.gz ... ";

		tar xzf ${MYSQLSRC}.tar.gz --no-same-owner
		cd ${MYSQLSRC}

		CFLAGS=-DHAVE_BROKEN_REALPATH
		if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then
			if [ "${OS}" != "FreeBSD" ]; then
				if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /usr/lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ] && [ ! -e /lib/x86_64-linux-gnu/libaio.so.1 ]; then
					echo "Cannot find libaio.so.1.  Please install libaio";
					if [ -e /etc/debian_version ]; then
						echo "apt-get install libaio1 libaio-dev";
					else
						echo "yum install libaio";
					fi
					return;
				fi
			fi
			if [ -e /etc/debian_version ] || [ "${OS}" = "FreeBSD" ]; then
				if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ]; then
					echo "Cannot find cmake, please install it.";
					if [ -e /etc/debian_version ]; then
						echo "apt-get install cmake";
					elif [ "${OS}" = "FreeBSD" ]; then
						echo "pkg_add -r cmake";
					fi

					echo "If your package manager is not working, see: http://help.directadmin.com/item.php?id=494";
					return;
				fi
			fi
			cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 \
					-DWITH_FEDERATED_STORAGE_ENGINE=1 \
					-DWITH_ZLIB=bundled -DWITH_EXTRA_CHARSETS=all
		else
			./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client \
					 --enable-static --enable-assembler --with-named-z-libs=not-used --enable-shared \
					 --with-federated-storage-engine \
					 --with-innodb --with-plugins=innobase
		fi
		echo "Done. Making ${MYSQLSRC}...";
		while
		echo "Trying to make ${MYSQLSRC}..."
		do
		{
				make -j ${CPU_CORES}

				if [ $? -ne 0 ]
				then
						if [ ${USER_INPUT} -eq 1 ]; then
								$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
								read yesno;
								echo "";
						else
								if [ "${INPUT_VALUE}" = "d" ]; then
										yesno=n
								else
										yesno=${INPUT_VALUE}
								fi
						fi

						if [ "${yesno}" = "n" ]
						then
								do_exit 0;
						fi
				else
						break;
				fi
		}
		done
		echo "Make complete";
		echo "Installing ${MYSQLSRC}...";
		./scripts/make_binary_distribution

		echo "Moving ${MYSQLSRC}-*.tar.gz to main direcotry...";
		mv -f ${MYSQLSRC}-*.tar.gz ..
		cd ..
		echo "Done.";
}

all_databases()
{
	if [ "$MYSQLUSER" = "" ] || [ "$MYSQLPASSWORD" = "" ]; then
		do_exit 1 "all_databases: user or password is blank";
	fi

	#Assumes that MYSQLUSER and MYSQLPASSWORD are already set.
	CMD="echo 'SHOW DATABASES' | $MYSQL_BIN -u${MYSQLUSER} -p'${MYSQLPASSWORD}'";
	eval $CMD | grep -v '^Database$' | grep -v '^information_schema$' | grep -v '^performance_schema$';
}

doMySQLback(){
    if [ "${MYSQLBACK_OPT}" = "yes" ]; then
	# Get variables from mysql.conf
	DA_MYSQL=/usr/local/directadmin/conf/mysql.conf
	MYSQLUSER=`grep "^user=" ${DA_MYSQL} | cut -d= -f2`
	MYSQLPASSWORD=`grep "^passwd=" ${DA_MYSQL} | cut -d= -f2`

	MYSQLDUMP=/usr/local/mysql/bin/mysqldump
	if [ ! -e $MYSQLDUMP ]; then
		MYSQLDUMP=/usr/bin/mysqldump
	fi
	if [ ! -e $MYSQLDUMP ]; then
		echo "Cannot find $MYSQLDUMP";
		return;
	fi

	if [ ! -d ${MYSQLBACKDIR_OPT} ]; then
	  mkdir -p ${MYSQLBACKDIR_OPT}
	fi
	chmod 700 ${MYSQLBACKDIR_OPT}

	# sysbk code
	cd ${MYSQL_DATA}
	for i in `all_databases`; do
	  echo -ne "       Dumping database $i \n"
	  echo -ne "       Dumping database $i \n" >> ${WORKDIR}/mysql_backups.log
	  $MYSQLDUMP --add-drop-database --databases -l -u${MYSQLUSER} -p${MYSQLPASSWORD} $i > ${MYSQLBACKDIR_OPT}/$i.sql
	  chmod 660 ${MYSQLBACKDIR_OPT}/$i.sql
	done
    fi
}

ensure_libnuma() {
	if [ ! -e /usr/lib/libnuma.so.1 ] && [ ! -e /usr/lib64/libnuma.so.1 ] && [ ! -e /lib64/libnuma.so.1 ] && [ ! -e /lib/libnuma.so.1 ] && [ ! -e /lib/i386-linux-gnu/libnuma.so.1 ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			echo "There is no libnuma for FreeBSD kernel."
		elif [ -e /etc/debian_version ]; then
			echo "Cannot find libnuma.so.1, installing using apt-get..."
			apt-get -y install libnuma-dev libnuma1
		else
			echo "Cannot find libnuma.so.1, installing using yum..."
			yum -y install numactl-devel
		fi
	fi
}

doMySQL() {
	if [ "${MYSQLINST_OPT}" != "yes" ]; then
		echo "You cannot install MySQL, because you do not have it set in options.conf file.";
		exit 1;
	fi

	doMySQLback;

	cd ${CWD};
	DACONF_FILE_MYSQL=/usr/local/directadmin/conf/mysql.conf
	MYSQLUSER=`grep "^user=" ${DACONF_FILE_MYSQL} | cut -d= -f2`
	MYSQLPASSWORD=`grep "^passwd=" ${DACONF_FILE_MYSQL} | cut -d= -f2`

	perl -pi -e 's/mysqld=ON/mysqld=OFF/' /usr/local/directadmin/data/admin/services.status

	if [ ${OS} = "FreeBSD" ]; then

		MYSQLURL=${WEBPATH_SERVICES}/all/mysql
		MYSQLPACK=mysql-${MYSQL_VER}

		BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1`
		
		if [ "$BINPACK" = "" ]; then
			compile_mysql_binary
		fi

		#make sure were back
		cd ${CWD};

		BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1`

		if [ "$BINPACK" = "" ]; then
			echo "Cannot find $MYSQLPACK package for installation"
			exit 0;
		fi
		
		if [ ! -s ${BINPACK} ]; then
			echo "Cannot find ${BINPACK} for installation"
			exit 0;
		fi

		echo "Stopping mysqld ...";
		/usr/local/etc/rc.d/mysqld stop

		echo "Installing ${BINPACK}...";

		#we need the non tar.gz form .. but its not basic it has freebsd and i386 and stuff we need
		#since we know the name of the file, we can get its contents which will tell us.
		MYSQLPACK=`tar tzf ${BINPACK} | head -n 1 | cut -d/ -f1`

		mv -f ${BINPACK} /usr/local
		cd /usr/local

		tar xzf ${MYSQLPACK}.tar.gz --no-same-owner
		rm -f mysql
		ln -s ${MYSQLPACK} mysql
		cd mysql

		chown -R mysql:mysql /usr/local/mysql
		chown -R mysql:mysql /usr/local/$MYSQLPACK

		rm -rf data
		ln -s /home/mysql ./data
		/usr/local/etc/rc.d/mysqld start

		MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`"
		if [ "${MYSQLPATH}" -eq 0 ]; then
			export PATH=${PATH}:/usr/local/mysql/bin
		fi
		
		echo "Giving mysqld a few seconds to start up...";
		sleep 5;

		if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then
			/usr/local/mysql/bin/mysql_upgrade --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		elif [ -e /usr/local/mysql/bin/mysql_fix_privilege_tables ]; then
			/usr/local/mysql/bin/mysql_fix_privilege_tables --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		fi

		if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ]; then
			/usr/local/mysql/bin/mysqlcheck --user=${MYSQLUSER} --password=${MYSQLPASSWORD} --fix-db-names --fix-table-names -A
		fi

                if [ ! -e /usr/local/mysql/bin/mysqld ] && [ -e /usr/local/mysql/libexec/mysqld ]; then
                        ln -s ../libexec/mysqld /usr/local/mysql/bin/mysqld
                fi

		echo "Done ${MYSQLPACK}.";

	elif [ -e /etc/debian_version ]; then
		LINUX_STR=linux
		if [ "${MYSQL_OPT}" = "5.5" ]; then
			LINUX_STR=linux2.6
		fi
		
		MYSQLURL=${WEBPATH_SERVICES}/all/mysql/debian
		MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-i686

                if [ "${B64}" = "1" ]; then
                        MYSQLURL=${MYSQLURL}/64-bit
                        MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-x86_64
                fi

		#debian needs libnuma1 now, as well: libnuma-dev libnuma1
		if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
			if [ "${MYSQL_OPT}" = "5.6" ]; then
				ensure_libnuma
			fi
		fi

		cd /usr/local
		if [ "${MYSQL_FORCE_COMPILE}" != "yes" ] && [ ! -s ${MYSQLPACK}.tar.gz ]; then
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLPACK}.tar.gz ${MYSQLURL}/${MYSQLPACK}.tar.gz
		fi

		if [ ! -s ${MYSQLPACK}.tar.gz ]; then
			echo "Attempting to compile a package from source...";
			cd ${CWD};
			compile_mysql_binary
			cd ${CWD};
			
			if [ ! -s ${MYSQLPACK}.tar.gz ]; then
				echo "Cannot find ${MYSQLPACK} package for installation"
				exit 0;
			fi
			
			mv -f ${MYSQLPACK}.tar.gz /usr/local
			cd /usr/local
		fi
		
		echo "Stopping mysqld ...";
		/etc/init.d/mysqld stop

		tar xzf ${MYSQLPACK}.tar.gz --no-same-owner
		rm -f mysql
		ln -s ${MYSQLPACK} mysql
		cd mysql

		chown -R mysql:mysql /usr/local/mysql
		chown -R mysql:mysql /usr/local/$MYSQLPACK

		rm -rf data
		ln -s /home/mysql ./data
		
		rm -f /usr/local/bin/mysql_config
		ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
		
		chown -R mysql:mysql /home/mysql

		MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`"
		if [ "${MYSQLPATH}" -eq 0 ]; then
			export PATH=${PATH}:/usr/local/mysql/bin
		fi
		
		if [ -d /etc/mysql ]; then
		    if [ ! -L /etc/mysql/my.cnf ]; then
			    mv -f /etc/mysql/my.cnf /etc/mysql/my.cnf.back
				ln -s /etc/my.cnf /etc/mysql/my.cnf
			fi
		fi
		
		/etc/init.d/mysqld start

		echo "Giving mysqld a few seconds to start up...";
		sleep 5;

		if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then
			/usr/local/mysql/bin/mysql_upgrade --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		elif [ -e /usr/local/mysql/bin/mysql_fix_privilege_tables ]; then
			/usr/local/mysql/bin/mysql_fix_privilege_tables --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		fi

		if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ]; then
			/usr/local/mysql/bin/mysqlcheck --user=${MYSQLUSER} --password=${MYSQLPASSWORD} --fix-db-names --fix-table-names -A
		fi

		#mysql 5.5.11 changed to libmysqlclient.so.18 from libmysqlclient.so.16
		if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then
			if [ -e /usr/local/directadmin/directadmin ]; then
				COUNT=`ldd /usr/local/directadmin/directadmin | grep -c libmysqlclient.so.16`
				if [ "${COUNT}" -eq 1 ]; then
					if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.16 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.18 ]; then
						echo "*** Linking libmysqlclient.so.16 to libmysqlclient.so.18";
						ln -s libmysqlclient.so.18 /usr/local/mysql/lib/libmysqlclient.so.16
						ldconfig
					fi
				fi
				COUNT=`ldd /usr/local/directadmin/directadmin | grep -c libmysqlclient.so.18`
				if [ "${COUNT}" -eq 1 ]; then
					if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.18 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.16 ]; then
						echo "*** Linking libmysqlclient.so.18 to libmysqlclient.so.16";
						ln -s libmysqlclient.so.16 /usr/local/mysql/lib/libmysqlclient.so.18
						ldconfig
					fi
				fi
			fi
		fi
	else
		if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then
			if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /usr/lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ]; then
				echo "Cannot find libaio.so.1.  Please install libaio";
				echo "yum install libaio";
				return;
			fi
		fi

		if [ "${MYSQL_OPT}" = "5.6" ]; then
			ensure_libnuma
		fi
		
		CENTOS_VER=`/usr/local/directadmin/directadmin o | head -n1 | cut -d. -f1 | awk '{print $4}'`
		if [ "${CENTOS_VER}" = "6" ]; then
			MYSQL_EXT_OS=el6
		elif [ "${CENTOS_VER}" = "7" ]; then
			MYSQL_EXT_OS=el7
		fi

		if [ "${B64}" = "0" ]; then
			MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}/32-bit
			NEW_RPM_FORMAT=0
			if [ "${MYSQL_OPT}" = "5.1" ]; then
				MYSQL_EXT=glibc23.i386
			elif [ "${MYSQL_OPT}" = "5.5" ]; then
				MYSQL_EXT=linux2.6.i386
			elif [ "${MYSQL_OPT}" = "5.6" ]; then
				if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.6.38 glibc vs el6 check'`" -ge 0 ]; then
					MYSQL_EXT=${MYSQL_EXT_OS}.i686
					NEW_RPM_FORMAT=1
				else
					MYSQL_EXT=linux_glibc2.5.i386
				fi
			else
				MYSQL_EXT=i386
			fi
			
			if [ "${NEW_RPM_FORMAT}" = "0" ]; then
				MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_VER}
			fi
		else
			MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit
			NEW_RPM_FORMAT=0
			if [ "${MYSQL_OPT}" = "5.5" ]; then
				MYSQL_EXT=linux2.6.x86_64
			elif [ "${MYSQL_OPT}" = "5.6" ]; then
				if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.5.38 glibc vs el6 check'`" -ge 0 ]; then
					MYSQL_EXT=${MYSQL_EXT_OS}.x86_64
					NEW_RPM_FORMAT=1
				else
					MYSQL_EXT=linux_glibc2.5.x86_64
					NEW_RPM_FORMAT=1
				fi
			else
				MYSQL_EXT=glibc23.x86_64
			fi
			if [ "${NEW_RPM_FORMAT}" = "0" ]; then
				MYSQLURL=${WEBPATH_SERVICES}/all/mysql/64-bit/${MYSQL_VER}
			fi
		fi

		MYSQLCLIENT=MySQL-client-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
		MYSQLDEVEL=MySQL-devel-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
		MYSQLSERVER=MySQL-server-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
		MYSQLSHARED=MySQL-shared-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm

		mkdir -p mysql
		cd mysql
		if [ ! -s ${MYSQLCLIENT} ]; then
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLCLIENT} ${MYSQLURL}/${MYSQL_VER}/${MYSQLCLIENT}
		fi
		if [ ! -s ${MYSQLDEVEL} ]; then
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLDEVEL} ${MYSQLURL}/${MYSQL_VER}/${MYSQLDEVEL}
		fi
		if [ ! -s ${MYSQLSERVER} ]; then
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLSERVER} ${MYSQLURL}/${MYSQL_VER}/${MYSQLSERVER}
		fi
		if [ ! -s ${MYSQLSHARED} ]; then
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${MYSQLSHARED} ${MYSQLURL}/${MYSQL_VER}/${MYSQLSHARED}
		fi

		FILE1=${CWD}/mysql/${MYSQLCLIENT}
		FILE2=${CWD}/mysql/${MYSQLDEVEL}
		FILE3=${CWD}/mysql/${MYSQLSERVER}
		FILE4=${CWD}/mysql/${MYSQLSHARED}
		checkFile ${FILE1}
		checkFile ${FILE2}
		checkFile ${FILE3}
		checkFile ${FILE4}

		echo "Stopping mysqld ...";
		/sbin/service mysqld stop

		#MariaDB renames my.cnf to rpmsave when removing RPMs, if we detect rpmsave before installation, we rename the file: https://mariadb.atlassian.net/browse/MDEV-4954
		if [ -e /etc/my.cnf.rpmsave ]; then
			mv -f /etc/my.cnf.rpmsave /etc/my.cnf.rpmsave.custombuild
		fi

		if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then
			mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf.rpmsave.custombuild
		fi

		if [ -e /usr/bin/mysql ]; then
			MYSQL_MAIN="`/usr/bin/mysql --version | awk '{ print $5 }' | cut -d , -f1 | cut -d. -f1,2`"
			MYSQL_V="`/usr/bin/mysql --version | awk '{ print $5 }' | cut -d , -f1`"
			if [ "${MYSQL_MAIN}" != "${MYSQL_OPT}" ]; then
				echo "Upgrading MySQL ${MYSQL_MAIN} to ${MYSQL_OPT}"
				for i in `rpm -qa | grep -i "^mysql"`; do { rpm -ev $i --nodeps; }; done;
				rpm -Uhv --nodeps ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED}
			else
				echo "Updating MySQL ${MYSQL_V} to ${MYSQL_VER}"
				rpm -Uhv --nodeps ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED}
			fi
		else
			echo "Cannot find /usr/bin/mysql, installing MySQL"
			rpm -ihv --nodeps ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED}
		fi

		#Move rpmsave file back to original one: https://mariadb.atlassian.net/browse/MDEV-4954 
		if [ -e /etc/my.cnf.rpmsave ]; then
			if [ -e /etc/my.cnf ]; then
				mv -f /etc/my.cnf /etc/my.cnf.rpmnew
			fi
			mv -f /etc/my.cnf.rpmsave /etc/my.cnf
		fi
		if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then
			if [ -e /etc/my.cnf.d/mysql-clients.cnf ]; then
				mv -f /etc/my.cnf.d/mysql-clients.cnf /etc/my.cnf.d/mysql-clients.cnf.rpmnew
			fi
			mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf
		fi

        if [ -e /etc/rc.d/init.d/mysql ]; then
			/sbin/chkconfig --del mysql
			mv -f /etc/rc.d/init.d/mysql /etc/rc.d/init.d/mysqld
			/sbin/chkconfig --add mysqld
		fi
		
		/sbin/service mysqld start

		echo "Giving mysqld a few seconds to start up...";
		sleep 5;

		if [ -e /usr/bin/mysql_upgrade ]; then
			/usr/bin/mysql_upgrade --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		elif [ -e /usr/bin/mysql_fix_privilege_tables ]; then
			/usr/bin/mysql_fix_privilege_tables --user=${MYSQLUSER} --password=${MYSQLPASSWORD}
		fi

		if [ -e /usr/bin/mysqlcheck ]; then
			/usr/bin/mysqlcheck --user=${MYSQLUSER} --password=${MYSQLPASSWORD} --fix-db-names --fix-table-names -A
		fi

		# Fixing "gcc: /usr/lib/mysql/libmysqlclient.so: No such file or directory"
		#if [ ! -e /usr/lib/mysql/libmysqlclient.so ]; then
		if [ -d /usr/lib/mysql ]; then
			cp -f /usr/lib/libmysqlclient.* /usr/lib/mysql/
		fi
	fi

	perl -pi -e 's/mysqld=OFF/mysqld=ON/' /usr/local/directadmin/data/admin/services.status

	cd ${CWD};

	echo "Restarting MySQL."
	${INITDDIR}/mysqld restart
	echo "It is recommended to do \"$0 php n\" after MySQL update."
}

####################################################

doPhpIni() {
	if [ "${PHPINI_OPT}" = "no" ]; then
		do_exit 1 "Cannot install php.ini because it is not set in options.conf."
	fi

	if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ] ; then
		if [ "${PHP5_VER_OPT}" = "5.3" ]; then
			getFile php-${PHP5_VER}.tar.gz php53
		elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
			getFile php-${PHP5_VER}.tar.gz php54
		elif [ "${PHP5_VER_OPT}" = "5.5" ]; then
			getFile php-${PHP5_VER}.tar.gz php55
		else
			getFile php-${PHP5_VER}.tar.gz php5
		fi

		FILE=${CWD}/php-${PHP5_VER}.tar.gz
		checkFile ${FILE}
		echo "Extracting ...";
		tar xzf ${FILE} --no-same-owner
		cd php-${PHP5_VER}

		/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 20M/' php.ini-${PHPINITYPE_OPT}
		/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 8M/' php.ini-${PHPINITYPE_OPT}
		
		#short_open_tag: http://help.directadmin.com/item.php?id=438
		perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHPINITYPE_OPT}

		if [ "${PHP5_CLI_OPT}" = "yes" ]; then
			cp -f php.ini-${PHPINITYPE_OPT} ${PHP_INI}
		fi
		if [ "${PHP5_CGI_OPT}" = "yes" ]; then
			cp -f php.ini-${PHPINITYPE_OPT} ${PHP_INI_SUPHP5}
		fi

		echo "Done.";
	fi
	
	if [ "${PHP6_CLI_OPT}" = "yes" ] || [ "${PHP6_CGI_OPT}" = "yes" ]; then
		getFile php-${PHP6_VER}.tar.gz php6
		FILE=${CWD}/php-${PHP6_VER}.tar.gz
		checkFile ${FILE}
		echo "Extracting ...";
		tar xzf ${FILE} --no-same-owner
		cd php-${PHP6_VER}

		/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 20M/' php.ini-${PHPINITYPE_OPT}
		/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 8M/' php.ini-${PHPINITYPE_OPT}
		
		#short_open_tag: http://help.directadmin.com/item.php?id=438
		perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHPINITYPE_OPT}

		if [ "${PHP5_CLI_OPT}" = "yes" ]; then
			cp -f php.ini-${PHPINITYPE_OPT} ${PHP_INI}
		fi
		if [ "${PHP5_CGI_OPT}" = "yes" ]; then
			cp -f php.ini-${PHPINITYPE_OPT} ${PHP_INI_SUPHP6}
		fi

		echo "Done.";
	fi
}

####################################################

disable_asm_atomic() {
	# for this error:
	# /usr/include/mysql/my_global.h:361:24: error: asm/atomic.h: No such file or directory

	MY_GLOBAL=/usr/include/mysql/my_global.h
	if [ ${OS} = "FreeBSD" ] || [ -e /etc/debian_version ]; then
		MY_GLOBAL=/usr/local/mysql/include/my_global.h
	fi

	if [ "${PHP5_VER_OPT}" = "5.3" ] || [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
		if [ -e ${MY_GLOBAL} ]; then
			echo "Disabling asm/atomic in ${MY_GLOBAL}";
			perl -pi -e 's#\#include <asm/atomic.h>#//\#include <asm/atomic.h>#' ${MY_GLOBAL}
		fi
	fi
}

####################################################

doPhp5() {
	if [ "${PHP5_VER_OPT}" = "5.2" ]; then
		getFile php-${PHP5_VER}.tar.gz php5
		getFile ${MAIL_HEADER_FILE_PHP5} php5-mail
		if [ "${APACHE_OPT}" = "2.4" ]; then
			getFile php-${PHP5_VER}-apache24.patch php5-apache24
		fi
	elif [ "${PHP5_VER_OPT}" = "5.3" ]; then
		getFile php-${PHP5_VER}.tar.gz php53
	elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
		getFile php-${PHP5_VER}.tar.gz php54
	else
	    getFile php-${PHP5_VER}.tar.gz php55
	fi
	if [ "${PHP5_CLI_OPT}" != "yes" ]; then
		do_exit 1 "Cannot build PHP5 as CLI because it is not set in options.conf."
	fi
	checkCURL
	checkFreeType
	checkIconv
	checkMCrypt
	checkMHash
	quitIfLocked doPhp5
	
	cd ${CWD};
	FILE=${CWD}/php-${PHP5_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	
	if [ "${PHP5_VER_OPT}" = "5.2" ]; then
		if [ "${APPLY_MAIL_HEADER_PATCH}" = "yes" ]; then
			patch -p0 < ${MAIL_HEADER_FILE_PHP5}
		fi
		if [ "${APACHE_OPT}" = "2.4" ]; then
			patch -p0 < php-${PHP5_VER}-apache24.patch
		fi
	fi

	if [ "${APACHE_OPT}" = "2.4" ]; then
		if [ "${PHP5_VER}" = "5.3.10" ] || [ "${PHP5_VER}" = "5.4.0" ]; then
			getFile php-bug-61172-1.patch php-bug-61172
		fi
	fi
	
	disable_asm_atomic

	cd php-${PHP5_VER}

	if [ "${APACHE_OPT}" = "2.4" ]; then
		if [ "${PHP5_VER}" = "5.3.10" ] || [ "${PHP5_VER}" = "5.4.0" ]; then
			patch -p0 < ../php-bug-61172-1.patch
			rm -f configure
			./buildconf --force
		fi
	fi

	#make sure we have the sendmail link
	ln -sf exim /usr/sbin/sendmail

	#some reports of missing -lltdl, problem found to be simple missing link
	if [ ! -e /usr/lib/libltdl.so ]; then
		ln -sf libltdl.so.3 /usr/lib/libltdl.so
	fi
	
	if [ "${OS}" = "FreeBSD" ] && [ "${OS_VER}" = "6.1" ]; then
		if [ ! -e /lib/libm.so.3 ]; then
			ln -sf libm.so.4 /lib/libm.so.3
		fi
		if [ ! -e /lib/libz.so.2 ]; then
			ln -sf libz.so.3 /lib/libz.so.2
		fi
	fi
	
	echo "Configuring php-${PHP5_VER}...";

	CONF_FILE=${CWD}/${PHP5_CONFIGURE};

	#we need to make sure that the mysql path is set.
	MYSQL_H="";

        if [ -d /usr/local/mysql/include ]; then
			MYSQL_H=/usr/local/mysql
        fi

        if [ "${MYSQL_H}" = "" ]; then
			if [ -e /usr/include/mysql/mysql.h ]; then
					MYSQL_H=/usr
			fi
        fi

	if [ "${MYSQL_H}" != "" ]; then
		STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
	fi

	#we need to make sure that the mysqli path is set.
	MYSQLI_BIN="";
	if [ -e /usr/local/bin/mysql_config ]; then
		MYSQLI_BIN=/usr/local/bin/mysql_config
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/local/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/local/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/bin/mysql_config
		fi
	fi

	if [ "${MYSQLI_BIN}" != "" ]; then
		STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}";
		eval ${STR};
	fi

	#if this is a 64bit system,make sure libmysqlclient is correct.
	if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then
			ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so
	fi

	${CONF_FILE}
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure php. Check the ${PHP5_CONFIGURE} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	while
	echo "Trying to make php..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
			else
				if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
				else
						yesno=${INPUT_VALUE}
				fi
			fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	#change the pear settings to remove the -n option.
	#the default memory limit was messing this up.
	/usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile

	#this was moved here, again for pear
	echo "Copying php.ini..";
	if [ ! -e ${PHP_INI} ]
	then
		cp ${PHP_INI_SOURCE} ${PHP_INI};
	else
		echo "${PHP_INI} already exists, skipping.";
	fi

	echo "Increasing memory limit to 32M...";
	/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 32M/' ${PHP_INI}
	/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 32M/' ${PHP_INI}
	if [ "${PHP5_VER_OPT}" = "5.3" ] || [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
		COUNT=`grep -c ^date.timezone ${PHP_INI}`;
		COUNT2=`grep -c ';date.timezone' ${PHP_INI}`;
		if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
			echo "${boldon}Adding date.timezone = \"UTC\" to ${PHP_INI}, please change it by yourself to fit your own needs.${boldoff}"
			echo "date.timezone = \"UTC\"" >> ${PHP_INI}
		elif [ "$COUNT" -eq 0 ]; then
			echo "${boldon}Adding date.timezone = \"UTC\" to ${PHP_INI}, please change it by yourself to fit your own needs.${boldoff}"
			perl -pi -e 's#;date.timezone.*#date.timezone = "UTC"#' ${PHP_INI}
		fi
		
		#short_open_tag: http://help.directadmin.com/item.php?id=438
		perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI}
	fi
	
	if [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
		/usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI}
		/usr/bin/perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI}
		/usr/bin/perl -pi -e 's/^safe_mode/;safe_mode/' ${PHP_INI}
		/usr/bin/perl -pi -e 's/^register_globals/;register_globals/' ${PHP_INI}
		/usr/bin/perl -pi -e 's/^allow_call_time_pass_reference/;allow_call_time_pass_reference/' ${PHP_INI}
	fi
	
	while
	echo "Installing php...";
	do
	{
		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
				read yesno;
				echo "";
			else
				if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
				else
						yesno=${INPUT_VALUE}
				fi
			fi

			if [ "${yesno}" = "n" ]
			then
					do_exit 0;
			fi
		else
			break;
		fi
	}
	done;
	
	echo "PHP ${PHP5_VER} Installed.";
	removeLockfile
	cd ${CWD};
}

doPhp5_suphp() {
	if [ "${PHP5_VER_OPT}" = "5.2" ]; then
		getFile php-${PHP5_VER}.tar.gz php5
		getFile ${MAIL_HEADER_FILE_PHP5} php5-mail
	elif [ "${PHP5_VER_OPT}" = "5.3" ]; then
		getFile php-${PHP5_VER}.tar.gz php53
	elif [ "${PHP5_VER_OPT}" = "5.5" ]; then
		getFile php-${PHP5_VER}.tar.gz php55
	else
	    getFile php-${PHP5_VER}.tar.gz php54
	fi
	if [ "${PHP5_CGI_OPT}" != "yes" ]; then
		do_exit 1 "Cannot build PHP5 as CGI because it is not set in options.conf."
	fi
	checkCURL
	checkFreeType
	checkIconv
	checkMCrypt
	checkMHash
	mkdir -p /usr/local/etc/php5/cgi
	quitIfLocked doPhp5
	
	cd ${CWD};
	FILE=${CWD}/php-${PHP5_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	
	if [ "${PHP5_VER_OPT}" = "5.2" ]; then
		if [ "${APPLY_MAIL_HEADER_PATCH}" = "yes" ]; then
			patch -p0 < ${MAIL_HEADER_FILE_PHP5}
		fi
	fi

	if [ "${APACHE_OPT}" = "2.4" ]; then
		if [ "${PHP5_VER}" = "5.3.10" ] || [ "${PHP5_VER}" = "5.4.0" ]; then
			getFile php-bug-61172-1.patch php-bug-61172
		fi
	fi
	
	disable_asm_atomic

	cd php-${PHP5_VER}

	if [ "${APACHE_OPT}" = "2.4" ]; then
		if [ "${PHP5_VER}" = "5.3.10" ] || [ "${PHP5_VER}" = "5.4.0" ]; then
			patch -p0 < ../php-bug-61172-1.patch
			rm -f configure
			./buildconf --force
		fi
	fi

	#make sure we have the sendmail link
	ln -sf exim /usr/sbin/sendmail

	#some reports of missing -lltdl, problem found to be simple missing link
	if [ ! -e /usr/lib/libltdl.so ]; then
		ln -sf libltdl.so.3 /usr/lib/libltdl.so
	fi
	
	if [ "${OS}" = "FreeBSD" ] && [ "${OS_VER}" = "6.1" ]; then
		if [ ! -e /lib/libm.so.3 ]; then
			ln -sf libm.so.4 /lib/libm.so.3
		fi
		if [ ! -e /lib/libz.so.2 ]; then
			ln -sf libz.so.3 /lib/libz.so.2
		fi
	fi
	
	echo "Configuring php-${PHP5_VER}...";

	CONF_FILE=${CWD}/${PHP5_CONFIGURE_SUPHP};

	#we need to make sure that the mysql path is set.
	MYSQL_H="";

	if [ -d /usr/local/mysql/include ]; then
			MYSQL_H=/usr/local/mysql
	fi

	if [ "${MYSQL_H}" = "" ]; then
		if [ -e /usr/include/mysql/mysql.h ]; then
				MYSQL_H=/usr
		fi
	fi

	if [ "${MYSQL_H}" != "" ]; then
		STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
	fi

	#we need to make sure that the mysqli path is set.
	MYSQLI_BIN="";
	if [ -e /usr/local/bin/mysql_config ]; then
		MYSQLI_BIN=/usr/local/bin/mysql_config
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/local/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/local/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/bin/mysql_config
		fi
	fi

	if [ "${MYSQLI_BIN}" != "" ]; then
		STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}";
		eval ${STR};
	fi

	#if this is a 64bit system,make sure libmysqlclient is correct.
	if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then
			ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so
	fi

	${CONF_FILE}
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure php. Check the ${PHP5_CONFIGURE_SUPHP} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	while
	echo "Trying to make php..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
			else
				if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
				else
						yesno=${INPUT_VALUE}
				fi
			fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	#change the pear settings to remove the -n option.
	#the default memory limit was messing this up.
	/usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile

	#this was moved here, again for pear
	echo "Copying php.ini..";
	if [ ! -e ${PHP_INI_SUPHP5} ]
	then
		cp ${PHP_INI_SOURCE} ${PHP_INI_SUPHP5};
	else
		echo "${PHP_INI_SUPHP5} already exists, skipping.";
	fi

	echo "Increasing memory limit to 32M...";
	/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 32M/' ${PHP_INI_SUPHP5}
	/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 32M/' ${PHP_INI_SUPHP5}
	if [ "${PHP5_VER_OPT}" = "5.3" ] || [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
		COUNT=`grep -c ^date.timezone ${PHP_INI_SUPHP5}`;
		COUNT2=`grep -c ';date.timezone' ${PHP_INI_SUPHP5}`;
		if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
			echo "${boldon}Adding date.timezone = \"UTC\" to ${PHP_INI_SUPHP5}, please change it by yourself to fit your own needs.${boldoff}"
			echo "date.timezone = \"UTC\"" >> ${PHP_INI_SUPHP5}
		elif [ "$COUNT" -eq 0 ]; then
			echo "${boldon}Adding date.timezone = \"UTC\" to ${PHP_INI_SUPHP5}, please change it by yourself to fit your own needs.${boldoff}"
			perl -pi -e 's#;date.timezone.*#date.timezone = "UTC"#' ${PHP_INI_SUPHP5}
		fi

		#short_open_tag: http://help.directadmin.com/item.php?id=438
		perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI_SUPHP5}
	fi
	
	if [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
		/usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI_SUPHP5}
		/usr/bin/perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI_SUPHP5}
		/usr/bin/perl -pi -e 's/^safe_mode/;safe_mode/' ${PHP_INI_SUPHP5}
		/usr/bin/perl -pi -e 's/^register_globals/;register_globals/' ${PHP_INI_SUPHP5}
		/usr/bin/perl -pi -e 's/^allow_call_time_pass_reference/;allow_call_time_pass_reference/' ${PHP_INI_SUPHP5}
	fi
	
	while
	echo "Installing php...";
	do
	{
		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
				read yesno;
				echo "";
			else
				if [ "${INPUT_VALUE}" = "d" ]; then
					yesno=n
				else
					yesno=${INPUT_VALUE}
				fi
			fi

				if [ "${yesno}" = "n" ]; then
					do_exit 0;
                fi
		else
			break;
		fi
	}
	done;
	
	removeLockfile

	echo "PHP ${PHP5_VER} with suPHP Installed.";

	cd ${CWD};
}

doPhp6() {
	getFile php-${PHP6_VER}.tar.gz php6
	#getFile ${MAIL_HEADER_FILE_PHP6}
	if [ "${PHP6_CLI_OPT}" != "yes" ]; then
		do_exit 1 "Cannot build PHP6 as CLI because it is not set in options.conf."
	fi
	checkCURL
	checkFreeType
	checkIconv
	checkMCrypt
	checkMHash
	if [ ! -d /usr/local/icu ]; then
		doICU;
	fi
	quitIfLocked doPhp6
	
	cd ${CWD};
	FILE=${CWD}/php-${PHP6_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";

	cd php-${PHP6_VER}

	#make sure we have the sendmail link
	ln -sf exim /usr/sbin/sendmail

	#some reports of missing -lltdl, problem found to be simple missing link
	if [ ! -e /usr/lib/libltdl.so ]; then
		ln -sf libltdl.so.3 /usr/lib/libltdl.so
	fi
	
	if [ "${OS}" = "FreeBSD" ] && [ "${OS_VER}" = "6.1" ]; then
		if [ ! -e /lib/libm.so.3 ]; then
			ln -sf libm.so.4 /lib/libm.so.3
		fi
		if [ ! -e /lib/libz.so.2 ]; then
			ln -sf libz.so.3 /lib/libz.so.2
		fi
	fi
	
	echo "Configuring php-${PHP6_VER}...";

	CONF_FILE=${CWD}/${PHP6_CONFIGURE};

	#we need to make sure that the mysql path is set.
	MYSQL_H="";

	if [ -d /usr/local/mysql/include ]; then
			MYSQL_H=/usr/local/mysql
	fi

	if [ "${MYSQL_H}" = "" ]; then
		if [ -e /usr/include/mysql/mysql.h ]; then
				MYSQL_H=/usr
		fi
	fi

	if [ "${MYSQL_H}" != "" ]; then
		STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
	fi

	#we need to make sure that the mysqli path is set.
	MYSQLI_BIN="";
	if [ -e /usr/local/bin/mysql_config ]; then
		MYSQLI_BIN=/usr/local/bin/mysql_config
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/local/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/local/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/bin/mysql_config
		fi
	fi

	if [ "${MYSQLI_BIN}" != "" ]; then
		STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}";
		eval ${STR};
		STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}";
		eval ${STR};
	fi

        #if this is a 64bit system,make sure libmysqlclient is correct.
        if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then
			ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so
        fi

	${CONF_FILE}
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure php. Check the ${PHP6_CONFIGURE} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	while
	echo "Trying to make php..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
			else
				if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
				else
						yesno=${INPUT_VALUE}
				fi
			fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	#change the pear settings to remove the -n option.
	#the default memory limit was messing this up.
	/usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile

	#this was moved here, again for pear
        echo "Copying php.ini..";
        if [ ! -e ${PHP_INI} ]
        then
                cp ${PHP_INI_SOURCE} ${PHP_INI};
        else
                echo "${PHP_INI} already exists, skipping.";
        fi

	echo "Increasing memory limit to 20M...";
	/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 20M/' ${PHP_INI}
	/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 8M/' ${PHP_INI}

	echo "Disabling magic_quotes_gpc...";
	perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI}

	#short_open_tag: http://help.directadmin.com/item.php?id=438
	perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI}

	while
	echo "Installing php...";
	do
	{
		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
        	                read yesno;
                	        echo "";
			else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
			fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
	}
	done;
	
	echo "PHP ${PHP6_VER} Installed.";
	removeLockfile
	cd ${CWD};
}

doPhp6_suphp() {
	getFile php-${PHP6_VER}.tar.gz php6
	#getFile ${MAIL_HEADER_FILE_PHP6}
	if [ "${PHP6_CGI_OPT}" != "yes" ]; then
		do_exit 1 "Cannot build PHP6 as CGI because it is not set in options.conf."
	fi
	checkCURL
	checkFreeType
	checkIconv
	checkMCrypt
	checkMHash
	if [ ! -d /usr/local/icu ]; then
		doICU;
	fi
	quitIfLocked doPhp6_suphp
	
	mkdir -p /usr/local/etc/php6/cgi
	cd ${CWD};
	FILE=${CWD}/php-${PHP6_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";

	cd php-${PHP6_VER}

	#make sure we have the sendmail link
	ln -sf exim /usr/sbin/sendmail

	#some reports of missing -lltdl, problem found to be simple missing link
	if [ ! -e /usr/lib/libltdl.so ]; then
		ln -sf libltdl.so.3 /usr/lib/libltdl.so
	fi
	
	if [ "${OS}" = "FreeBSD" ] && [ "${OS_VER}" = "6.1" ]; then
		if [ ! -e /lib/libm.so.3 ]; then
			ln -sf libm.so.4 /lib/libm.so.3
		fi
		if [ ! -e /lib/libz.so.2 ]; then
			ln -sf libz.so.3 /lib/libz.so.2
		fi
	fi
	
	echo "Configuring php-${PHP6_VER}...";

	CONF_FILE=${CWD}/${PHP6_CONFIGURE_SUPHP};

	#we need to make sure that the mysql path is set.
	MYSQL_H="";

        if [ -d /usr/local/mysql/include ]; then
                MYSQL_H=/usr/local/mysql
        fi

        if [ "${MYSQL_H}" = "" ]; then
                if [ -e /usr/include/mysql/mysql.h ]; then
                        MYSQL_H=/usr
                fi
        fi

	if [ "${MYSQL_H}" != "" ]; then
		STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
                STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
                eval ${STR};
                STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}";
                eval ${STR};
		STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}";
		eval ${STR};
	fi

	#we need to make sure that the mysqli path is set.
	MYSQLI_BIN="";
	if [ -e /usr/local/bin/mysql_config ]; then
		MYSQLI_BIN=/usr/local/bin/mysql_config
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/local/mysql/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/local/mysql/bin/mysql_config
		fi
	fi
	if [ "${MYSQLI_BIN}" = "" ]; then
		if [ -e /usr/bin/mysql_config ]; then
			MYSQLI_BIN=/usr/bin/mysql_config
		fi
	fi

	if [ "${MYSQLI_BIN}" != "" ]; then
		STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}";
		eval ${STR};
                STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}";
                eval ${STR};
	fi

        #if this is a 64bit system,make sure libmysqlclient is correct.
        if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then
                ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so
        fi

	${CONF_FILE}
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure php. Check the ${PHP6_CONFIGURE_SUPHP} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	while
	echo "Trying to make php..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
	                else
        	                if [ "${INPUT_VALUE}" = "d" ]; then
                	                yesno=n
                        	else
                                	yesno=${INPUT_VALUE}
	                        fi
        	        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	#change the pear settings to remove the -n option.
	#the default memory limit was messing this up.
	/usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile

	#this was moved here, again for pear
        echo "Copying php.ini..";
        if [ ! -e ${PHP_INI_SUPHP6} ]
        then
                cp ${PHP_INI_SOURCE} ${PHP_INI_SUPHP6};
        else
                echo "${PHP_INI_SUPHP6} already exists, skipping.";
        fi

	echo "Increasing memory limit to 20M...";
	/usr/bin/perl -pi -e 's/memory_limit = 8M/memory_limit = 20M/' ${PHP_INI_SUPHP6}
	/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 8M/' ${PHP_INI_SUPHP6}

	echo "Disabling magic_quotes_gpc...";
	perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI_SUPHP6}

	#short_open_tag: http://help.directadmin.com/item.php?id=438
	perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI_SUPHP6}

	while
	echo "Installing php...";
	do
	{
		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
        	                read yesno;
                	        echo "";
			else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
			fi

                        if [ "${yesno}" = "n" ]
                        then
				do_exit 0;
                        fi
                else
                        break;
                fi
	}
	done;
	
	removeLockfile

	echo "PHP ${PHP6_VER} with suPHP Installed.";

	cd ${CWD};
}

doSuPhp() {
	if [ "$NEW_SUPHP_OPT" = "yes" ]; then
		getFile suphp-${SUPHP_VER}.tar.gz suphp_current
	else
		getFile suphp-${SUPHP_VER}.tar.gz suphp
	fi

	getFile patches/suphp_calling_user.patch suphp_calling_user_patch
	getFile patches/suphp_script_name.patch suphp_script_name_patch
	getFile patches/suphp_attachment.diff suphp_suphp_attachment_diff
	getFile patches/suphp_attachment.patch suphp_attachment_patch
	quitIfLocked doSuPhp
	
	cd ${CWD};
	FILE=${CWD}/suphp-${SUPHP_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";

	mkdir -p /usr/local/suphp/etc
	cd suphp-${SUPHP_VER}
	
	if [ "${CLINUX_OPT}" = "yes" ]; then
		patch -p1 < ../suphp-0.7.1-cagefs.patch
	fi
	
	patch -p1 < ../patches/suphp_calling_user.patch
	patch -p1 < ../patches/suphp_script_name.patch 
	patch -p1 < ../patches/suphp_attachment.patch 
	
	if [ "${SUPHP_VER}" != "0.7.1" ]; then
		echo "re-configuring suphp configure...";

		echo "calling aclocal:";
		perl -pi -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.ac
		aclocal

		echo "calling libtoolize:";
		libtoolize --force
		
		echo "calling automake:";
		automake --add-missing
		
		echo "calling autoreconf:";
		autoreconf
	fi

	if [ "${APACHE_OPT}" = "2.4" ]; then
		echo "Patching suphp for Apache 2.4";
		perl -pi -e 's#"\$major_version" = "2.2"#"\$major_version" = "2.4"#' ./configure
	fi

	echo "Configuring suphp-${SUPHP_VER}...";
	CONF_FILE=${CWD}/${SUPHP_CONFIGURE};

	${CONF_FILE}
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure suPHP. Check the ${SUPHP_CONFIGURE} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	while
	echo "Trying to make suPHP..."
	do
	{
		make

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
	                else
        	                if [ "${INPUT_VALUE}" = "d" ]; then
                	                yesno=n
                        	else
                                	yesno=${INPUT_VALUE}
	                        fi
        	        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make Complete";

	if [ -e /usr/lib/apache/mod_suphp.so ]; then
		rm -f /usr/lib/apache/mod_suphp.so
	fi

	while
	echo "Installing suPHP...";
	do
	{
                #only freebsd 7 seemed affected with this, thus added.
                chmod 755 config/install-sh

		make install

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The install has failed, would you like to try to install it again? (y,n): ";
        	                read yesno;
                	        echo "";
			else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
			fi

                        if [ "${yesno}" = "n" ]
                        then
				do_exit 0;
                        fi
                else
                        break;
                fi
	}
	done;
	
	touch /var/log/suphp.log

	echo "suPHP ${SUPHP_VER} Installed.";
	removeLockfile
	cd ${CWD};
}

####################################################

doModSSL() {
	cd ${CWD};
	getFile mod_ssl-${MODSSL_VER}-${APACHE_VER}.tar.gz mod_ssl

	FILE=${CWD}/mod_ssl-${MODSSL_VER}-${APACHE_VER}.tar.gz
	checkFile ${FILE};
	echo "Extracting ${FILE}...";
	
	tar xzf ${FILE} --no-same-owner
	cd mod_ssl-${MODSSL_VER}-${APACHE_VER}
	
	echo "Configuring mod_ssl-${MODSSL_VER}-${APACHE_VER}...";

        if [ ${OS} = "FreeBSD" ]; then
                OPTIM="-DHARD_SERVER_LIMIT=32768 -DFD_SETSIZE=32768 " \
                EAPI_MM="SYSTEM" \
                SSL_BASE="/usr" \
                PORTOBJFORMAT=elf \
                ${CWD}/${APACHE_SSL_CONFIGURE};
        else
                ${CWD}/${APACHE_SSL_CONFIGURE};
        fi

	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure apache+mod_ssl. Check the ${APACHE_SSL_CONFIGURE} file\n";
		do_exit 1;
	fi

	echo "Done Configuration.";

	cd ${CWD};
}

####################################################

ensure_server_ca() {

	SSL_CA=${HTTPDCONF}/ssl.crt/server.ca
	SSL_CRT=${HTTPDCONF}/ssl.crt/server.crt
	mkdir -p ${HTTPDCONF}/ssl.crt

	echo "Checking to ensure ${SSL_CA} is set.";
	
	if [ ! -s ${SSL_CA} ]; then
		echo "Downloading new generic server.ca ...";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${SSL_CA} ${WEBPATH_SERVICES}/all/ssl/server.ca
		
		if [ ! -s ${SSL_CA} ]; then
			echo "Trying server.ca from backup services url...";
			${WGET} ${WGET_CONNECT_OPTIONS} -O ${SSL_CA} ${WEBPATH_BACKUP}/all/ssl/server.ca

			if [ ! -s ${SSL_CA} ]; then
				echo "server.ca download failed.";

				if [ -s ${SSL_CRT} ]; then
					echo "Copying main server.crt to server.ca just as a valid read value so apache can start up";
					cp -f ${SSL_CRT} ${SSL_CA}
				fi
			fi
		fi	
	fi
}

backupHttp() {
	echo "Backing up certificate and key, and turning off httpd for DirectAdmins's check.";

	if [ -e ${HTTPDCONF}/ssl.crt/server.crt ]
	then
		cp -fp ${HTTPDCONF}/ssl.crt/server.crt ${HTTPDCONF}/ssl.crt/server.crt.backup
	fi
	if [ -e ${HTTPDCONF}/ssl.key/server.key ]
	then
		cp -fp ${HTTPDCONF}/ssl.key/server.key ${HTTPDCONF}/ssl.key/server.key.backup
	fi
	if [ -e ${HTTPD_CONF} ]
	then
		cp -fp ${HTTPD_CONF} ${HTTPD_CONF}.backup
	fi
	
	#turn off httpd service checking
	if [ -e ${SERVICES} ]
	then
		/usr/bin/perl -pi -e 's/httpd=ON/httpd=OFF/' ${SERVICES};
	fi
	
}

restoreHttp() {
	echo "Restoring certificate and key, and turning on httpd for DirectAdmins's check.";

	if [ -e ${HTTPDCONF}/ssl.crt/server.crt.backup ]
	then
		cp -fp ${HTTPDCONF}/ssl.crt/server.crt.backup ${HTTPDCONF}/ssl.crt/server.crt
		chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
	fi
	if [ -e ${HTTPDCONF}/ssl.key/server.key.backup ]
	then
		cp -fp ${HTTPDCONF}/ssl.key/server.key.backup ${HTTPDCONF}/ssl.key/server.key
		chmod 600 ${HTTPDCONF}/ssl.key/server.key
	fi
	if [ -e ${HTTPDCONF}/httpd.conf.backup ]
	then
		cp -fp ${HTTPDCONF}/httpd.conf.backup ${HTTPDCONF}/httpd.conf
	fi

	ensure_server_ca

	#turn on httpd service checking
	if [ -e ${SERVICES} ]
	then
		/usr/bin/perl -pi -e 's/httpd=OFF/httpd=ON/' ${SERVICES};
	fi
}

####################################################

checkRPMS() {
	if [ ${OS} = "FreeBSD" ]; then
		return;
	fi

	if [ -e ${DEBIAN_VERSION} ]; then
		return;
	fi

	echo "Removing all apache related rpms...";
	rpm -e --nodeps mod_auth_pgsql 2> /dev/null
	rpm -e --nodeps mod_python 2> /dev/null
	rpm -e --nodeps mod_auth_mysql 2> /dev/null
	rpm -e --nodeps mod_auth_any 2> /dev/null
	rpm -e --nodeps mod_dav 2> /dev/null
	rpm -e --nodeps mod_ssl 2> /dev/null
	rpm -e --nodeps mod_perl 2> /dev/null
	rpm -e --nodeps mod_fpse 2> /dev/null
	rpm -e --nodeps apache-fp 2> /dev/null
	rpm -e --nodeps apache-fp-devel 2> /dev/null
	rpm -e --nodeps apache-manual 2> /dev/null
	rpm -e --nodeps apacheconf 2> /dev/null
	rpm -e --nodeps apache-devel 2> /dev/null
	rpm -e --nodeps apache 2> /dev/null
	rpm -e --nodeps httpd 2> /dev/null
	rpm -e --nodeps httpd-devel 2> /dev/null
	rpm -e --nodeps httpd-tools 2> /dev/null
	rpm -e --nodeps httpd-manual 2> /dev/null
	rpm -e --nodeps php 2> /dev/null
	echo "All apache related rpms have been removed.";
}

####################################################

addUserGroup() {
	if [ ${OS} = "FreeBSD" ]; then
		PW=/usr/sbin/pw
		if ! /usr/bin/grep -q "^${2}:" < /etc/group; then
			${PW} groupadd ${2}
		fi
		if ! /usr/bin/id ${1} > /dev/null; then
			${PW} useradd -g ${2} -n ${1} -s /sbin/nologin
		fi
	elif [ -e ${DEBIAN_VERSION} ]; then
		if ! /usr/bin/id ${1} > /dev/null; then
			adduser --system --group --no-create-home \
		            --disabled-login --force-badname ${1} > /dev/null
		fi
	else
		if ! /usr/bin/id ${1} > /dev/null; then				
			/usr/sbin/useradd -r -s /bin/false ${1}
		fi
	fi
}

####################################################

set64() {
	if [ ! -d /usr/lib64 ]; then
		return;
	fi

	if [ ! -e /usr/lib/libssl.so ]; then
		ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so
	fi
	if [ ! -e /usr/lib/libidn.so ]; then
		ln -sf /usr/lib64/libidn.so /usr/lib/libidn.so
	fi
}

####################################################

doApacheCheck() {
	if [ ! -e ${HTTPDCONF}/extra/httpd-includes.conf ]; then
		echo -n "" > ${HTTPDCONF}/extra/httpd-includes.conf
	fi

	if [ ! -e ${SUPHP_HTTPD} ]; then
		echo -n "" > ${SUPHP_HTTPD}
	fi

	if [ ! -e ${HTTPDCONF}/extra/httpd-php-handlers.conf ]; then
		echo -n "" > ${HTTPDCONF}/extra/httpd-php-handlers.conf
	fi
	
	if [ ! -e ${HTTPDCONF}/extra/httpd-phpmodules.conf ]; then
		echo -n "" > ${HTTPDCONF}/extra/httpd-phpmodules.conf
	fi
}

####################################################

doUpdateData1() {
	cd ${CWD}
	getFile apache_${APACHE_VER}.tar.gz apache
	getFile ${APACHE_SSL_CONFIGURE}
	chmod 755 ${APACHE_SSL_CONFIGURE}
	getFile mod_ssl-${MODSSL_VER}-${APACHE_VER}.tar.gz mod_ssl
        getFile httpd
        getFile httpd_freebsd
        getFile httpd_debian
}

####################################################

hideFrontpage() {

        if [ -e ${DACONF_TEMPLATE_FILE} ] && [ "`grep -c frontpage_on ${DACONF_TEMPLATE_FILE}`" = "0" ]; then
                echo "frontpage_on=0" >> ${DACONF_TEMPLATE_FILE}
        fi

        if [ -e ${DACONF_FILE} ] && [ "`grep -c frontpage_on ${DACONF_FILE}`" = "0" ]; then
                echo "frontpage_on=0" >> ${DACONF_FILE}
                if [ -e /usr/local/directadmin/data ]; then
                        echo "action=directadmin&value=restart" >> /usr/local/directadmin/data/task.queue
                fi
        fi
}

####################################################

setFDSETSIZE()
{
        #this bit is to increase the socket limit
        if [ -e /usr/include/bits/typesizes.h ]; then
                perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/typesizes.h
        fi

        if [ -e /usr/include/linux/posix_types.h ]; then
                perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/linux/posix_types.h
        fi

        if [ -e /usr/include/bits/types.h ]; then
                perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/types.h
        fi

        #same thing, for freebsd
        if [ -e /usr/include/sys/select.h ]; then
                perl -pi -e 's/FD_SETSIZE.*1024U/FD_SETSIZE 32768U/' /usr/include/sys/select.h
        fi

        if [ ${OS} != "FreeBSD" ]; then
                echo "131072" > /proc/sys/fs/file-max
        fi
}

####################################################

#tokenize the IP
tokenize_IP() {
	if [ "`grep -c '|IP|' ${HTTPDCONF}/extra/httpd-vhosts.conf`" -gt "0" ];
	then
		HOSTNAME=`hostname`;
		IP="`grep $HOSTNAME /etc/hosts | awk '{print $1}' | head -n1`"
		if [ "${IP}" = "" ]; then
		     echo "Unable to detect your server IP. Please enter it: "
		     read IP;
		fi
		if [ "${IP}" = "" ]; then
		     echo "Unable to detect your server IP. Exiting..."
		     do_exit 0;
		fi

		if [ "`echo ${IP} | grep -c ':'`" -gt 0 ]; then
			IP="[${IP}]";
		fi

		echo "Using $IP for your server IP";
		STR="perl -pi -e 's/\|IP\|/$IP/' ${HTTPDCONF}/extra/httpd-vhosts.conf";
		eval ${STR};
	fi
}

doApache() {
	doUpdateData1;
	quitIfLocked doApache
	
	if [ ! -e /usr/local/directadmin/data/users/admin/httpd.conf ]; then
		echo -n "" > /usr/local/directadmin/data/users/admin/httpd.conf
		chown diradmin:diradmin /usr/local/directadmin/data/users/admin/httpd.conf
	fi

	set64;

	addUserGroup apache apache
	
	setFDSETSIZE

	perl -pi -e 's#^LoadModule frontpage_module#\#LoadModule frontpage_module#' /etc/httpd/conf/httpd.conf > /dev/null 2>&1
	backupHttp;
	
	cd ${CWD};
	FILE=${CWD}/apache_${APACHE_VER}.tar.gz
	checkFile ${FILE};
	
	#removing old apache dir, because the patch may get applied twice (might confuse the user)
	rm -rf ${CWD}/apache_${APACHE_VER};
	
	echo "Extracting ${FILE}...";
	
	tar xzf ${FILE} --no-same-owner
	cd apache_${APACHE_VER}
	
	echo "Done. Applying patches...";
	
	echo "Increasing hard limit to 32768...";
	/usr/bin/perl -pi -e 's/^#define HARD_SERVER_LIMIT 256/#define HARD_SERVER_LIMIT 32768/' ./src/include/httpd.h;
	/usr/bin/perl -pi -e 's/\/\* Majority of os/#undef FD_SETSIZE\n#define FD_SETSIZE 32768\n\n\/\* Majority of os/' ./src/include/ap_config.h
	/usr/bin/perl -pi -e 's/r->connection->keepalive > 0/r->connection->keepalive != -1/' ./src/main/http_request.c

	if [ "$1" = "fake" ]; then
                ./configure \
                        --prefix=/etc/httpd \
                        --exec-prefix=/etc/httpd \
                        --bindir=/usr/bin \
                        --sbindir=/usr/sbin \
                        --sysconfdir=/etc/httpd/conf \
			--enable-module=all \
			--enable-shared=max \
			--htdocsdir=${WWWDIR} \
			--manualdir=${WWWDIR}/manual \
                        --includedir=/usr/include/apache \
			--libexecdir=/usr/lib/apache \
                        --datadir=/var/www \
                        --localstatedir=/var \
                        --runtimedir=/var/run \
                        --logfiledir=/var/log/httpd \
                        --proxycachedir=/var/cache/httpd \
			--disable-module=auth_db --disable-module=auth_dbm
	else

		echo "Setting up mod_ssl...";
	
		#configure apache through mod_ssl
		doModSSL;
	
	fi

	#Jailed shell
	if [ "${JAIL_OPT}" = "yes" ]; then
		cd ${CWD}
		
		if [ ! -e ${SU_FILE} ]; then
			echo "Cannot find $SU_FILE. Run './build update_data'";
			do_exit 0;
		fi
		
		SUEXEC_FILE=${CWD}/apache_${APACHE_VER}/src/support/suexec.c
		cp -f ${SU_FILE} ${SUEXEC_FILE}
		chmod 1755 ${SUEXEC_FILE}
		
		#add just a touch of nothing to increase the datestamp so that 'make' finds it.
		echo -n "" >> ${SUEXEC_FILE};
	fi
	
	cd ${CWD}/apache_${APACHE_VER};
	
	while
	echo "Trying to make apache..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make complete";
	
	checkRPMS;
	
	echo "Installing Apache...";
	make install
	
	echo "Done installing Apache+Mod_SSL.";
	removeLockfile
	cd ${CWD}

	restoreHttp;

	#ensure /usr/sbin/apxs
	if [ ! -s /usr/sbin/apxs ] && [ -s /usr/bin/apxs ]; then
		ln -s /usr/bin/apxs /usr/sbin/apxs
	fi

	#check directadmin.conf file
	if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then
		perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE}
	fi

	if [ ! -e ${DACONF_FILE} ] || [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
		if [ -e ${DACONF_FILE} ] && [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
			perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE}
		fi

		cd ${CWD}
		mv -f ${HTTPDCONF} ${HTTPDCONF}.${APACHE_OPT}.backup

		#add all the Include lines
		doVhosts;

		cd ${CWD}

		cp -rf ${AP1CONFDIR} ${HTTPDDIR}
		if [ "${AP1CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP1CUSTOMCONFDIR} ${HTTPDDIR}
		fi
		cp -rf ${HTTPDCONF}.${APACHE_OPT}.backup/ssl.key ${HTTPDCONF}
		cp -rf ${HTTPDCONF}.${APACHE_OPT}.backup/ssl.crt ${HTTPDCONF}

		cd ${CWD}/apache_${APACHE_VER};
		doRestartDA;
	fi

	#copy the new configs if needed
	if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
		cp -rf ${AP1CONFDIR} ${HTTPDDIR}
		if [ "${AP1CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP1CUSTOMCONFDIR} ${HTTPDDIR}
		fi
	fi

	#rewrite ips.conf if needed
	echo "action=rewrite&value=ips" >> /usr/local/directadmin/data/task.queue
	/usr/local/directadmin/dataskq

	#tokenize the IP if needed
	tokenize_IP

	#add all the Include lines if they do not exist
	if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
		doVhosts;
		cd ${CWD}/apache_${APACHE_VER}
	fi

	#add SSL cerificates
	if [ "`grep -c -s -e 'BEGIN CERTIFICATE' ${HTTPDCONF}/ssl.crt/server.crt`" -ne 1 ] || [ "`grep -c -s -e 'BEGIN RSA PRIVATE KEY' ${HTTPDCONF}/ssl.key/server.key`" -ne 1 ]; then
		make certificate TYPE=dummy;
		cp -f ./conf/ssl.crt/server.crt ${HTTPDCONF}/ssl.crt/server.crt
		cp -f ./conf/ssl.key/server.key ${HTTPDCONF}/ssl.key/server.key

		chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
		chmod 600 ${HTTPDCONF}/ssl.key/server.key
	fi

	doApacheCheck;
	
	#change apache_ver in directadmin.conf
	if [ "`grep -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" = "1" ]; then
		perl -pi -e 's/apache_ver=2.0/apache_ver=1.3/' ${DACONF_TEMPLATE_FILE}
	fi
	if [ "`grep -c apache_ver=2.0 ${DACONF_FILE}`" = "1" ]; then
		perl -pi -e 's/apache_ver=2.0/apache_ver=1.3/' ${DACONF_FILE}
		doRestartDA;
		./build rewrite_confs;
	fi

	#remove the auth modules from the httpd.conf
	/usr/bin/perl -pi -e 's/^LoadModule db_auth_module/#LoadModule db_auth_module/' ${HTTPD_CONF};
	/usr/bin/perl -pi -e 's/^AddModule mod_auth_db.c/#AddModule mod_auth_db.c/' ${HTTPD_CONF};
	
	ln -sf ../../var/log/httpd /etc/httpd/logs
	ln -sf ../../usr/lib/apache /etc/httpd/modules 

	#changed nov 24, 2006 for hardened log security (was just 755)
	chmod 711 /var/log/httpd
	mkdir -p /var/log/httpd/domains
	chmod 710 /var/log/httpd/domains
	chown root:nobody /var/log/httpd/domains

	if [ ${OS} = "FreeBSD" ]
	then
		cp -f ${CWD}/httpd_freebsd /usr/local/etc/rc.d/httpd
		chmod 755 /usr/local/etc/rc.d/httpd
	elif [ -e /etc/debian_version ]; then
		cp -f ${CWD}/httpd_debian /etc/init.d/httpd
                chmod 755 /etc/init.d/httpd
		update-rc.d httpd defaults
	else
		cp -f ${CWD}/httpd /etc/rc.d/init.d/httpd
		chmod 755 /etc/rc.d/init.d/httpd
		/sbin/chkconfig httpd on
	fi

	if [ ! -e /etc/mime.types ]
	then
		cp ${CWD}/mime.types /etc/mime.types
	fi
	
	mkdir -p ${WWWDIR}

	if [ ! -e ${WWWDIR}/index.html ]
	then
        	if [ -e ${WWWDIR}/index.html.en ]
	        then
        	        cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html
	        else
        	        echo "<html>Apache is functioning normally</html>" > ${WWWDIR}/index.html
	        fi
	fi

	if [ ! -e ${WWWDIR}/404.shtml ]
	then
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${WWWDIR}/404.shtml $WEBPATH/404.shtml.txt
		touch ${WWWDIR}/favicon.ico
	fi

        #log rotate
        if [ ! -e /etc/logrotate.d/apache ] && [ ${OS} != "FreeBSD" ]
        then
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -O /etc/logrotate.d/apache
        fi

	COUNT=0;
	if [ -e /etc/logrotate.d/apache ];
	then
		COUNT=`grep -c suexec_log /etc/logrotate.d/apache`
	fi
	if [ -e /etc/logrotate.d/apache ] && [ "${OS}" != "FreeBSD" ] && [ "${COUNT}" -eq 0 ]
	then
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -O /etc/logrotate.d/apache
	fi


	#this is an addition for jailing
	#if the jailing patch was previously installed, repatch.
	if [ -e ${CWD}/jail/build ]; then

		echo "*****";
		echo "  Repatching apache with jailed suexec";
		echo "*****";

		${CWD}/jail/build suexec
	fi

	echo "Restarting apache."
	${INITDDIR}/httpd restart
}	

####################################################

doCURL() {
	if [ "${CURL_OPT}" != "yes" ]; then
		echo "You cannot install curl, because you do not have it set in options.conf file.";
		return;
	fi

	getFile curl-${CURL_VER}.tar.gz curl
	quitIfLocked doCURL
	
	cd ${CWD};
	FILE=${CWD}/curl-${CURL_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	chmod -R 755 curl-${CURL_VER}
	cd curl-${CURL_VER}
	echo "Configuring curl-${CURL_VER}...";
	./configure
	/usr/bin/perl -pi -e 's/\#define HAVE_OPENSSL_ENGINE_H 1/\/\/\#define HAVE_OPENSSL_ENGINE_H 0/' ./lib/config.h;
	echo "Done. Making curl-${CURL_VER}...";
	while
	echo "Trying to make cURL..."
	do
	{
		if [ ${OS} = "FreeBSD" ]; then
			make
		else
			make CPPFLAGS=-I/usr/kerberos/include
		fi

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make complete";
	echo "Installing curl-${CURL_VER}...";
	make install
	echo "Done curl.";
	removeLockfile
	cd ${CWD}
}

####################################################

doPCRE() {

	if [ "$NEW_PCRE_OPT" = "yes" ]; then
		getFile pcre-${PCRE_VER}.tar.gz pcre_current
	else
		getFile pcre-${PCRE_VER}.tar.gz pcre
	fi

	quitIfLocked doPCRE
	
	cd ${CWD};
	FILE=${CWD}/pcre-${PCRE_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	chmod -R 755 pcre-${PCRE_VER}
	cd pcre-${PCRE_VER}
	echo "Configuring pcre-${PCRE_VER}...";
	./configure --enable-utf8 --enable-unicode-properties
	echo "Done. Making pcre-${PCRE_VER}...";
	while
	echo "Trying to make PCRE..."
	do
	{
		make CPPFLAGS=-I/usr/kerberos/include

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make complete";
	echo "Installing pcre-${PCRE_VER}...";
	make install
	echo "Done pcre.";

	/sbin/ldconfig

	removeLockfile
	cd ${CWD}
}

####################################################

doMCrypt() {
	getFile libmcrypt-${MCRYPT_VER}.tar.gz mcrypt
	quitIfLocked doMCrypt
	
	cd ${CWD};
	FILE=${CWD}/libmcrypt-${MCRYPT_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	chmod -R 755 libmcrypt-${MCRYPT_VER}
	cd libmcrypt-${MCRYPT_VER}
	echo "Configuring libmcrypt-${MCRYPT_VER}...";
	./configure --enable-ltdl-install
	echo "Done. Making libmcrypt-${MCRYPT_VER}...";
	while
	echo "Trying to make mCrypt..."
	do
	{
		make

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break;
		fi
	}
	done
	echo "Make complete";
	echo "Installing mcrypt-${MCRYPT_VER}...";
	make install
	echo "Done mcrypt.";
	if [ -d ${WORKDIR}/libmcrypt-${MCRYPT_VER}/libltdl ]; then
		echo "Doing extra /libltdl for mcrypt..";
		cd libltdl
		./configure --enable-ltdl-install
		make
		make install
		echo "Done extra /libltdl for mcrypt.";
	fi
	removeLockfile
	cd ${CWD}
}

####################################################

doMHash() {
	getFile mhash-${MHASH_VER}.tar.gz mhash
	quitIfLocked doMHash
	
        cd ${CWD};
        FILE=${CWD}/mhash-${MHASH_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
	chmod -R 755 mhash-${MHASH_VER}
        cd mhash-${MHASH_VER}
        echo "Configuring mhash-${MHASH_VER}...";
        ./configure
        echo "Done. Making mhash-${MHASH_VER}...";
        while
        echo "Trying to make mHash..."
        do
        {
                make

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing mhash-${MHASH_VER}...";
        make install
        echo "Done mhash.";
	removeLockfile
        cd ${CWD}
}

####################################################

doFreeType() {
	getFile freetype-${FREETYPE_VER}.tar.gz freetype
	quitIfLocked doFreeType
	
	if [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/bin/gmake ]; then
		cd /usr/ports/devel/gmake
		make
		make install
		make clean
                if [ ! -e /usr/local/bin/gmake ]; then
                        pkg_add -r gmake
                fi
                rehash
	fi
        cd ${CWD};
        FILE=${CWD}/freetype-${FREETYPE_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd freetype-${FREETYPE_VER}
        echo "Configuring freetype-${FREETYPE_VER}...";
        ./configure --enable-freetype-config
        echo "Done. Making freetype-${FREETYPE_VER}...";
        while
        echo "Trying to make FreeType..."
        do
        {
		if [ "${OS}" = "FreeBSD" ]; then
			/usr/local/bin/gmake
		else
			make
		fi

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing freetype-${FREETYPE_VER}...";
	if [ "${OS}" = "FreeBSD" ]; then
		/usr/local/bin/gmake install
	else
		make install
	fi

	#fix for freetype.h path change: http://forum.directadmin.com/showthread.php?t=47795
	if [ -e /usr/local/include/freetype2/freetype.h ] && [ ! -e /usr/local/include/freetype2/freetype/freetype.h ]; then
		echo "Linking freetype/freetype.h to freetype.h";
		mkdir -p /usr/local/include/freetype2/freetype
		ln -s ../freetype.h /usr/local/include/freetype2/freetype/freetype.h
	fi

	#FreeType 2.5.2+ doesn't cleanup it's old ft2build.h.
	if [ "`version_cmp ${FREETYPE_VER} 2.5.1 'freetype ver check'`" -ge 0 ]; then
		FT_BUILD_OLD=/usr/local/include/ft2build.h
		FT_BUILD_NEW=/usr/local/include/freetype2/ft2build.h
		if [ -e ${FT_BUILD_OLD} ] && [ -e ${FT_BUILD_NEW} ]; then
			echo "Removing old header: ${FT_BUILD_OLD}";
			rm -f ${FT_BUILD_OLD}
		fi
	fi

        echo "Done FreeType.";
		removeLockfile
        cd ${CWD}
}

####################################################

doICU() {
	getFile icu4c-${ICU_VER}-src.tgz icu4c
	quitIfLocked doICU
	
        cd ${CWD};
        FILE=${CWD}/icu4c-${ICU_VER}-src.tgz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd icu/source
	mkdir -p /usr/local/icu
        echo "Configuring icu-${ICU_VER}...";
        ./configure --prefix=/usr/local/icu
        echo "Done. Making icu-${ICU_VER}...";
        while
        echo "Trying to make icu..."
        do
        {
                if [ "$OS" = "FreeBSD" ]; then
                        /usr/local/bin/gmake
                else
                        make
                fi

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing icu4c-${ICU_VER}...";

        if [ "$OS" = "FreeBSD" ]; then
                /usr/local/bin/gmake install
        else
                make install
        fi

        echo "Done ICU.";
		removeLockfile
        cd ${CWD}
}

####################################################

doIconv() {

	if [ "${OS}" = "FreeBSD" ] && [ "`echo $OS_VER | cut -d. -f1`" -ge 7 ]; then
		pkg_add -r http://${DOWNLOADSERVER_OPT}/services/packages-7-stable/Latest/libiconv.tbz
		/sbin/ldconfig
		return;
	fi

	getFile libiconv-${ICONV_VER}.tar.gz iconv
	quitIfLocked doIconv
	
        cd ${CWD};
        FILE=${CWD}/libiconv-${ICONV_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd libiconv-${ICONV_VER}
        echo "Configuring iconv-${ICONV_VER}...";

        ./configure --prefix=/usr/local --enable-extra-encodings

        echo "Done. Making iconv-${ICONV_VER}...";
        while
        echo "Trying to make iconv..."
        do
        {
		make
                #make -j ${CPU_CORES}

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing iconv-${ICONV_VER}...";
        make install
        echo "Done iconv.";
	removeLockfile
        cd ${CWD}

	if [ ! -e /usr/lib/libiconv.so.2 ]; then
		ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
	fi

	/sbin/ldconfig
}

####################################################

doLibxslt() {
	getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt
	quitIfLocked doLibxslt
	
        cd ${CWD};
        FILE=${CWD}/libxslt-${LIBXSLT_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd libxslt-${LIBXSLT_VER}
        echo "Configuring libxslt-${LIBXSLT_VER}...";
		./configure --prefix=/usr/local --with-libxml-prefix=/usr/local

        echo "Done. Making libxslt-${LIBXSLT_VER}...";
        while
        echo "Trying to make libxslt..."
        do
        {
                make -j ${CPU_CORES}

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing libxslt-${LIBXSLT_VER}...";
        make install
        echo "Done libxslt.";
	removeLockfile
        cd ${CWD}

	/sbin/ldconfig
}

####################################################

doLibxml2() {
	if [ "$NEW_ZLIB_OPT" = "yes" ] || [ "$NEW_XML2_OPT" = "yes" ]; then
		getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current
	else
		getFile libxml2-${LIBXML2_VER}.tar.gz libxml2
	fi
	quitIfLocked doLibxml2
	
        cd ${CWD};
        FILE=${CWD}/libxml2-${LIBXML2_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd libxml2-${LIBXML2_VER}
        echo "Configuring libxml2-${LIBXML2_VER}...";

	#fix for this bug on FreeBSD 6:
	#http://forums.freebsd.org/showthread.php?t=20273
	if [ "${OS}" = "FreeBSD" ] && [ "${MAINVER}" = "6" ]; then
		echo "Patching configure to address this bug:";
		echo "http://forums.freebsd.org/showthread.php?t=20273";
		
		perl -pi -e 's/WIN32_EXTRA_PYTHON_LIBADD=\"/#WIN32_EXTRA_PYTHON_LIBADD=\"/' configure		
	fi

        ./configure --prefix=/usr/local --without-python --with-zlib=/usr/local

        echo "Done. Making libxml2-${LIBXML2_VER}...";
        while
        echo "Trying to make libxml2..."
        do
        {
                #make -j ${CPU_CORES}
		make

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing libxml2-${LIBXML2_VER}...";
        make install
        echo "Done libxml2.";
	removeLockfile
        cd ${CWD}

	/sbin/ldconfig
}

####################################################

doM4() {
        cd ${CWD};
        getFile m4-${M4_VER}.tar.gz m4
        quitIfLocked doM4
        
        cd ${CWD};
        FILE=${CWD}/m4-${M4_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";
        cd m4-${M4_VER}

        echo "Configuring m4-${M4_VER}...";
        ./configure --prefix=/usr/local
        echo "Done. Making m4-${M4_VER}...";

        while
        echo "Trying to make m4..."
        do
        {
                LANG=c make;

                if [ $? -ne 0 ]
                then
                        if [ ${USER_INPUT} -eq 1 ]; then
                                $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
                                read yesno;
                                echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";
        echo "Installing m4-${M4_VER}...";
        LANG=c make install;
        echo "Done m4";

        removeLockfile
        cd ${CWD}
}

####################################################

doAutoconf() {
	if [ "${AUTOCONF_OPT}" != "yes" ]; then
		echo "You cannot install autoconf, because you do not have it set in options.conf file.";
		exit 1;
	fi
	cd ${CWD};
	getFile autoconf-${AUTOCONF_VER}.tar.gz autoconf
	quitIfLocked doAutoconf
	
	cd ${CWD};
	FILE=${CWD}/autoconf-${AUTOCONF_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	cd autoconf-${AUTOCONF_VER}

	echo "Configuring autoconf-${AUTOCONF_VER}...";
	./configure --prefix=/usr/local
	echo "Done. Making autoconf-${AUTOCONF_VER}...";
	while
	echo "Trying to make autoconf..."
	do
	{
			LANG=c make;

			if [ $? -ne 0 ]; then
				if [ ${USER_INPUT} -eq 1 ]; then
					$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
					read yesno;
					echo "";
				else
					if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
					else
						yesno=${INPUT_VALUE}
					fi
				fi

				if [ "${yesno}" = "n" ]
				then
					do_exit 0;
				fi
			else
				break;
			fi
	}
	done
	echo "Make complete";
	echo "Installing autoconf-${AUTOCONF_VER}...";
	LANG=c make install;
	echo "Done Autoconf";
	removeLockfile
	cd ${CWD}
}

####################################################

doAutomake() {
	if [ "${AUTOMAKE_OPT}" != "yes" ]; then
		echo "You cannot install automake, because you do not have it set in options.conf file.";
		exit 1;
	fi
	cd ${CWD};
	getFile automake-${AUTOMAKE_VER}.tar.gz automake
	quitIfLocked doAutomake
	
	cd ${CWD};
	FILE=${CWD}/automake-${AUTOMAKE_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	cd automake-${AUTOMAKE_VER}

	echo "Configuring automake-${AUTOMAKE_VER}...";
	./configure --prefix=/usr/local
	echo "Done. Making automake-${AUTOMAKE_VER}...";
	while
	echo "Trying to make automake..."
	do
	{
			LANG=c make;

			if [ $? -ne 0 ]; then
				if [ ${USER_INPUT} -eq 1 ]; then
					$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
					read yesno;
					echo "";
				else
					if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
					else
						yesno=${INPUT_VALUE}
					fi
				fi

				if [ "${yesno}" = "n" ]; then
					do_exit 0;
				fi
			else
				break;
			fi
	}
	done
	echo "Make complete";
	echo "Installing automake-${AUTOMAKE_VER}...";
	LANG=c make install;
	echo "Done Automake";
	removeLockfile
	cd ${CWD}
}

####################################################

doLibtool() {
	if [ "${LIBTOOL_OPT}" != "yes" ]; then
		echo "You cannot install libtool, because you do not have it set in options.conf file.";
		exit 1;
	fi
	cd ${CWD};
	getFile libtool-${LIBTOOL_VER}.tar.gz libtool
	quitIfLocked doLibtool
	
	cd ${CWD};
	FILE=${CWD}/libtool-${LIBTOOL_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	cd libtool-${LIBTOOL_VER}

	echo "Configuring libtool-${LIBTOOL_VER}...";
	./configure --prefix=/usr/local
	echo "Done. Making libtool-${LIBTOOL_VER}...";
	while
	echo "Trying to make libtool..."
	do
	{
			LANG=c make;

			if [ $? -ne 0 ]; then
				if [ ${USER_INPUT} -eq 1 ]; then
					$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
					read yesno;
					echo "";
				else
					if [ "${INPUT_VALUE}" = "d" ]; then
						yesno=n
					else
						yesno=${INPUT_VALUE}
					fi
				fi

				if [ "${yesno}" = "n" ]; then
					do_exit 0;
				fi
			else
				break;
			fi
	}
	done
	echo "Make complete";
	echo "Installing libtool-${LIBTOOL_VER}...";
	LANG=c make install;

	#because the programmers of libtool decided not to actually show the true version
	#we have to change the version to make it accurate so things match
	COUNT=`grep -c ${LIBTOOL_VER} /usr/local/bin/libtool`
	if [ "$COUNT" -eq 0 ]; then
			perl -pi -e "s/2.2.6/${LIBTOOL_VER}/" /usr/local/bin/libtool
	fi

	echo "Done Libtool";
	removeLockfile
	cd ${CWD}
}

####################################################

doModPerl() {
	getFile mod_perl-${MODPERL_VER}.tar.gz ${MODPERL_INDEX}
	quitIfLocked doModPerl
	
	cd ${CWD};
	FILE=${CWD}/mod_perl-${MODPERL_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	cd mod_perl-${MODPERL_VER}
	echo "Configuring mod_perl-${MODPERL_VER}...";

	if [ "${APACHE_OPT}" = "1.3" ]; then
		perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/sbin/apxs EVERYTHING=1
	elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		perl Makefile.PL MP_APXS=/usr/sbin/apxs;
	fi

	echo "Done. Making mod_perl-${MODPERL_VER}...";
	while
	echo "Trying to make mod_perl..."
	do
	{
		make

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				removeLockfile
				return;
			fi
		else
			break;
		fi
	}
	done
	echo "Make complete";
	echo "Installing mod_perl-${MODPERL_VER}...";
	make install
	echo "Done mod_perl.";
	removeLockfile
	#This code is to remove mod_perl from freebsd
	if [ "${OS}" = "FreeBSD" ]; then
		perl -pi -e 's/^AddModule mod_perl.c/\#AddModule mod_perl.c/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_perl.c/\#AddModule mod_perl.c/' /usr/local/directadmin/data/templates/httpd.conf
	fi

	cd ${CWD}
}

####################################################

doWebalizer() {
	quitIfLocked doWebalizer
	
	if [ "${WEBALIZER_OPT}" != "yes" ]; then
		echo "You cannot install webalizer, because you do not have it set in options.conf file.";
		setVal webalizer 0 ${DACONF_TEMPLATE_FILE}
		setVal webalizer 0 ${DACONF_FILE}
		exit 1;
	fi
	
	
	PREFIX=/usr
	LIBPATH=/usr/lib
	INCPATH=/usr/include
	if [ ${OS} = "FreeBSD" ]; then
		PREFIX=/usr/local
		LIBPATH=/usr/local/lib
		INCPATH=/usr/local/include
	fi

	if [ -e ${PREFIX}/bin/webalizer ]; then
		echo "The webalizer binary exists, aborting.  Delete ${PREFIX}/bin/webalizer if you wish to compile."
		removeLockfile
		return;
	fi

        cd ${CWD};
        getFile ${WEBALIZER_FILE} webalizer
        tar xzf ${WEBALIZER_FILE} --no-same-owner
        cd ${WEBALIZER}

        export LD_LIBRARY_PATH=${LIBPATH}
        ./configure --prefix=${PREFIX} --with-png=${LIBPATH} --with-gdlib=${LIBPATH} --with-gd=${INCPATH} --enable-dns --with-dblib --with-db --with-z-inc --with-zlib

        while
        echo "Trying to make webalizer..."
        do
        {
                make

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
				removeLockfile
                                return;
                        fi
                else
                        break;
                fi
        }
        done

        make install
	removeLockfile

	if [ "${AWSTATS_OPT}" = "no" ]; then
		setVal awstats 0 ${DACONF_TEMPLATE_FILE}
		setVal awstats 0 ${DACONF_FILE}
	else
		setVal awstats 1 ${DACONF_TEMPLATE_FILE}
		setVal awstats 1 ${DACONF_FILE}
	fi
	
	doRestartDA;
	
	if [ -e /etc/webalizer.conf ]; then
		mv -f /etc/webalizer.conf /etc/webalizer.conf.moved 2> /dev/null > /dev/null
	fi
}

####################################################

doawstats_process() {
	if [ "${AWSTATS_OPT}" != "yes" ]; then
		do_exit 1 "You cannot update awstats_process.sh, because you do not have awstats=1 set in options.conf file."
	fi
	
	cd ${CWD}
	
	AWSTATS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh
	APS_HTTPPATH=http://${DOWNLOADSERVER_OPT}/services/all/awstats/awstats_process.sh-${AWSTATS_PROCESS_VER}
	
	#the file remains the same non-versioned name, hence forced re-download each time.
	${WGET} ${WGET_CONNECT_OPTIONS} -O ${AWSTATS_PROCESS_SH} ${APS_HTTPPATH}
	
	if [ -s awstats_process.sh ]; then
		mv -f ${CWD}/awstats_process.sh ${AWSTATS_PROCESS_SH}
		chmod 700 ${AWSTATS_PROCESS_SH}

		echo "awstats_process.sh ${AWSTATS_PROCESS_VER} has been installed."
		
		writeLog "awstats_process.sh updated to ${AWSTATS_PROCESS_VER}"
	fi
}

doawstats() {
	if [ "${AWSTATS_OPT}" != "yes" ]; then
		echo "You cannot install awstats, because you do not have it set in options.conf file.";
		setVal awstats 0 ${DACONF_TEMPLATE_FILE}
		setVal awstats 0 ${DACONF_FILE}
		exit 1;
	fi
	
	HTTPPATH=http://${DOWNLOADSERVER_OPT}/services/all/awstats
	TARFILE=${WORKDIR}/awstats-${AWSTATS_VER}.tar.gz
	USR=/usr/local
	REALPATH=${USR}/awstats-${AWSTATS_VER}
	ALIASPATH=${USR}/awstats
	
	if [ ! -e ${TARFILE} ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${HTTPPATH}/awstats-${AWSTATS_VER}.tar.gz
	fi

	if [ ! -e ${TARFILE} ]; then
        echo "Cannot download awstats-${AWSTATS_VER}"
        exit 1
	fi

	M=`checkMD5 $TARFILE awstats`
        if [ "$M" != "0" ]; then
                echo "";
                echo "${boldon}*** MD5 Checksum for $TARFILE Failed.  Redownloading...***${boldoff}";
                echo "";
		${WGET} ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBPATH_SERVICES}/all/awstats-${AWSTATS_VER}.tar.gz

                M=`checkMD5 $TARFILE awstats`
                if [ "$M" != "0" ]; then
                                echo "";
                                echo "";
                                echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}";
                                echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded.";
                                echo "Install continuing with this possibly corrupted file. (it may also be fine)";
                                echo "";
                                echo "";
                fi
	fi
	
	getFile patches/awstats_url.patch awstats_url_patch

	#Extract the file
	${TAR} xzf ${TARFILE} --no-same-owner -C ${USR}

	if [ ! -e ${REALPATH} ]; then
		echo "Directory ${REALPATH} does not exist"
		exit 1
	fi

	#link it from a fake path:
	/bin/rm -f ${ALIASPATH}
	/bin/ln -sf ${REALPATH} ${ALIASPATH}
	cd ${REALPATH}
	chown -R root:${ROOT_GRP} ${REALPATH}
	chmod -R 755 ${REALPATH}
	
	#patch the url bug
	if [ "`version_cmp ${AWSTATS_VER} 7.3 'awstats ver check'`" -lt 0 ]; then
		echo "Patching awstats_buildstaticpages.pl to fix url bug...";
		cd ${REALPATH}/tools
		cp -f ${WORKDIR}/patches/awstats_url.patch ./awstats_url.patch
		if [ ! -s awstats_url.patch ]; then
			echo "Error with awstats_url.patch. File is missing or empty";
			echo "This will cause url issues in the static awstats output.";
		else
			patch -p0 < awstats_url.patch
		fi
	fi

	#setup the directadmin.conf
	setVal awstats 1 ${DACONF_TEMPLATE_FILE}
	setVal awstats 1 ${DACONF_FILE}
	if [ "${WEBALIZER_OPT}" = "no" ]; then
		setVal webalizer 0 ${DACONF_TEMPLATE_FILE}
		setVal webalizer 0 ${DACONF_FILE}
	else
		setVal webalizer 1 ${DACONF_TEMPLATE_FILE}
		setVal webalizer 1 ${DACONF_FILE}
	fi

	doRestartDA;

	cd ${CWD};
	
	echo "AWstats ${AWSTATS_VER} installation is done."
	
	doawstats_process
}

####################################################

doUpdate() {
	cd ${CWD}
	cp -f options.conf ..
	cd ..
	if [ ${OS} = "FreeBSD" ]
	then
		fetch -o ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
	else
		${WGET} ${WGET_CONNECT_OPTIONS} -O ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
	fi
	
	echo "extracting ${NAME}.tar.gz ...";

	tar xvzf ${NAME}.tar.gz --no-same-owner
	mv -f options.conf ${WORKDIR}
	cd ${CWD}

	if [ ${OS} = "FreeBSD" ]
	then
		fetch -o ./versions.txt ${WEBPATH}/versions.txt
	else
		${WGET} ${WGET_CONNECT_OPTIONS} -O ./versions.txt ${WEBPATH}/versions.txt
	fi

	chmod 755 build
	
 	./build update_data;
}

####################################################

doUpdateScript() {
	cd ${CWD}
	if [ ${OS} = "FreeBSD" ]
	then
		fetch -o ${CWD}/build.new ${WEBPATH}/1.2/custombuild/build
	else
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/1.2/custombuild/build -O ${CWD}/build.new
	fi
	
	mv -f build.new build
	chmod 755 build
}

####################################################

doRewriteConfs() {
	quitIfLocked doRewriteConfs
	
	cd ${CWD}
	if [ "${APACHE_OPT}" = "1.3" ]; then
		if [ ! -e apache_${APACHE_VER}.tar.gz ]; then
			echo "File apache_${APACHE_VER}.tar.gz does not exist. Cannot rewrite configs"
			do_exit 1
		fi

		if [ ! -e ${HTTPDCONF}/ssl.crt/server.crt ] || [ ! -e ${HTTPDCONF}/ssl.key/server.key ]; then
			if [ ! -d apache_${APACHE_VER} ]; then
				tar xzf apache_${APACHE_VER}.tar.gz --no-same-owner
				if [ ! -d apache_${APACHE_VER} ]; then
					echo "Directory apache_${APACHE_VER} does not exist. Cannot rewrite configs"
					do_exit 1
				fi
				removeLockfile
				doApache;
			fi
		fi

		#copy the new configs
		cp -rf ${AP1CONFDIR} ${HTTPDDIR}
		if [ "${AP1CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP1CUSTOMCONFDIR} ${HTTPDDIR}
		fi
		
		chmod 710 ${HTTPDDIR}

		#rewrite ips.conf and httpd.conf
		echo "action=rewrite&value=ips" >> /usr/local/directadmin/data/task.queue
		echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
		/usr/local/directadmin/dataskq

		#tokenize the IP
		tokenize_IP

		#add all the Include lines if they do not exist
		if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
			doVhosts;
			cd ${CWD}/apache_${APACHE_VER}
		fi

		#add SSL cerificates
		if [ "`grep -c -s -e 'BEGIN CERTIFICATE' ${HTTPDCONF}/ssl.crt/server.crt`" -ne 1 ] || [ "`grep -c -s -e 'BEGIN RSA PRIVATE KEY' ${HTTPDCONF}/ssl.key/server.key`" -ne 1 ]; then
			make certificate TYPE=dummy;
			cp -f ./conf/ssl.crt/server.crt ${HTTPDCONF}/ssl.crt/server.crt
			cp -f ./conf/ssl.key/server.key ${HTTPDCONF}/ssl.key/server.key

			chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
			chmod 600 ${HTTPDCONF}/ssl.key/server.key
		fi

		doApacheCheck;

		rm -rf ${CWD}/apache_${APACHE_VER}
	elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		if [ ! -e httpd-${APACHE2_VER}.tar.gz ]; then
			echo "File httpd-${APACHE2_VER}.tar.gz does not exist. Cannot rewrite configs"
		else
			tar xzf httpd-${APACHE2_VER}.tar.gz --no-same-owner
		fi

		if [ ! -d httpd-${APACHE2_VER} ]; then
			echo "Directory httpd-${APACHE2_VER} does not exist. Cannot rewrite configs"
		fi

		#copy the new configs
		cp -rf ${AP2CONFDIR} ${HTTPDDIR}

		if [ "${APACHE_OPT}" = "2.0" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf_2.0 ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf_2.0 ${HTTPDCONF}/extra/httpd-mpm.conf
		elif [ "${APACHE_OPT}" = "2.2" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
		elif [ "${APACHE_OPT}" = "2.4" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
			
			perl -pi -e 's/^DefaultType/#DefaultType/' ${HTTPD_CONF}
		fi
		
		if [ "${SECURE_HTACCESS}" = "yes" ]; then
			ln -sf httpd-directories-new.conf ${HTTPDCONF}/extra/httpd-directories.conf
		else
			ln -sf httpd-directories-old.conf ${HTTPDCONF}/extra/httpd-directories.conf
		fi
		
		if [ "${AP2CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP2CUSTOMCONFDIR} ${HTTPDDIR}
		fi

		ensure_server_ca

		#ensure we have the correct apache_ver
		if [ "`grep -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -eq "0" ]; then
			echo "apache_ver=2.0" >> ${DACONF_TEMPLATE_FILE}
		elif [ "`grep -c apache_ver= ${DACONF_TEMPLATE_FILE}`" -ne "0" ]; then
			perl -pi -e 's/`grep apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE}
		fi
		if [ "`grep -c apache_ver=2.0 ${DACONF_FILE}`" -eq "0" ]; then
			echo "apache_ver=2.0" >> ${DACONF_FILE}
			doRestartDA
			echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
		elif [ "`grep -c apache_ver= ${DACONF_FILE}`" -ne "0" ]; then
			perl -pi -e 's/`grep apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE}
			doRestartDA
			echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
		fi

		#rewrite ips.conf
		echo "action=rewrite&value=ips" >> /usr/local/directadmin/data/task.queue

		/usr/local/directadmin/dataskq

		#tokenize the IP
		tokenize_IP

		#add all the Include lines if they do not exist
		if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
			doVhosts;
			cd ${CWD}/httpd-${APACHE2_VER}
		fi

		if [ ! -d /etc/httpd/conf/ssl.key ] || [ ! -d /etc/httpd/conf/ssl.crt ]; then
			cd ${WORKDIR}
			mkdir -p /etc/httpd/conf/ssl.key
			mkdir -p /etc/httpd/conf/ssl.crt
			#install the cert/key
			/usr/bin/openssl req -x509 -newkey rsa:1024 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${AP2CERTCONF}

			chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
			chmod 600 ${HTTPDCONF}/ssl.key/server.key
			cd ${CWD}
		fi

		doApacheCheck

		rm -rf ${CWD}/httpd-${APACHE2_VER}
	fi

	cd ${CWD}

	PHPMODULES=${HTTPDCONF}/extra/httpd-phpmodules.conf
	PHPADDMODULES=${HTTPDCONF}/extra/httpd-phpaddmodules.conf
	
	echo -n "" > ${PHPMODULES}
	echo -n "" > ${PHPADDMODULES}
	
	if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=1
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php5/\#AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php4/#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php4/#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php6/AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php6/LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php6_module		/usr/lib/apache/libphp6.so" >> ${PHPMODULES}
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php6.c"	>> ${PHPADDMODULES}
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		PHPOPT=2
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php4/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php4/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php6/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php6/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php5/AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php5/LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php5_module		/usr/lib/apache/libphp5.so" >> ${PHPMODULES}
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php5.c"	>> ${PHPADDMODULES}
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=3
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "no" ]; then
		PHPOPT=4
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_suphp/\#AddModule mod_suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php5/\#AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_suphp.c/\#AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php4/#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php6/AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php4/#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php6/LoadModule php6/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php6_module		/usr/lib/apache/libphp6.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php6.c"	>> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "no" ]; then
		PHPOPT=5
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "no" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		PHPOPT=6
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_suphp/\#AddModule mod_suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php6/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php4/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_suphp.c/\#AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php4/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php6/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php5/AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php5/LoadModule php5/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php5_module		/usr/lib/apache/libphp5.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php5.c"	>> ${PHPADDMODULES}
	elif [ "${PHP6_CLI_OPT}" = "no" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=7
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /usr/local/directadmin/data/templates/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	else
		do_exit 1 "Something is wrong with your ${OPTIONS_CONF}"
	fi

	if [ "${NEWCONFIGS}" = "1" ]; then
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
	fi
	
	if [ "$UEBIMIAU_OPT" = "no" ]; then
		WEBMAILLINK=squirrelmail
		if [ -s ${DACONF_FILE} ] && [ -s /usr/local/directadmin/directadmin ]; then
			WEBMAILLINK=`/usr/local/directadmin/directadmin c | grep ^webmail_link | cut -d= -f2`
		fi
	
		perl -pi -e "s#Alias /webmail \"/var/www/html/webmail/\"#Alias /webmail \"/var/www/html/${WEBMAILLINK}/\"#" /etc/httpd/conf/extra/httpd-alias.conf
		
		#actually remove the old /uebimiau Alias.
		perl -pi -e 's#^Alias /uebimiau .*\n##' /etc/httpd/conf/extra/httpd-alias.conf
	fi
	
	LETSENCRYPT_OPT=`/usr/local/directadmin/directadmin c | grep '^letsencrypt=' | cut -d= -f2`
	if [ "${LETSENCRYPT_OPT}" = "1" ]; then
		if ! grep -m1 -q 'Alias /.well-known ' /etc/httpd/conf/extra/httpd-alias.conf; then
			echo "Alias /.well-known /var/www/html/.well-known" >> /etc/httpd/conf/extra/httpd-alias.conf
		fi
	else
		#actually remove the old /uebimiau Alias.
		perl -pi -e 's#^Alias /.well-known /var/www/html/.well-known\n##' /etc/httpd/conf/extra/httpd-alias.conf
	fi

	doPhpConf;
	removeLockfile

	# Make sure there is no SSLMutex in /etc/httpd/conf/extra/httpd-ssl.conf
	# Make sure there is no LockFile in /etc/httpd/conf/extra/httpd-mpm.conf
	if [ "${APACHE_OPT}" = "2.4" ]; then
		perl -pi -e 's/^SSLMutex/#SSLMutex/' /etc/httpd/conf/extra/httpd-ssl.conf
		perl -pi -e 's/^LockFile/#LockFile/' /etc/httpd/conf/extra/httpd-mpm.conf
	fi

	ensure_webapps_tmp;

	echo "Restarting apache."
	${INITDDIR}/httpd restart
}

####################################################

doCron() {
	cd ${CWD}

        if [ "$OS" = "FreeBSD" ]; then
                CRONFILE=$WORKDIR/cronfile
        else
                CRONFILE=/etc/cron.${CRON_FREQUENCY_OPT}/custombuild
        
		#remove bits which may exist.
		rm -f /etc/cron.daily/custombuild
		rm -f /etc/cron.weekly/custombuild
		rm -f /etc/cron.monthly/custombuild
        fi

        if [ "${CRON_OPT}" != "yes" ]; then
                echo "You cannot run cronjob, because you do not have it set in options.conf file.";
                rm -f ${CRONFILE}

                if [ "$OS" = "FreeBSD" ]; then
                        COUNT=`grep -c $CRONFILE /etc/crontab`;
                        if [ "$COUNT" -gt 0 ]; then
                                grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp
                                if [ ! -s /etc/crontab.tmp ]; then
                                        echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting";
                                        exit 3;
                                fi

                                mv -f /etc/crontab.tmp /etc/crontab
                                chmod 644 /etc/crontab
                        fi
                fi
                exit 1;
        fi

        if [ "$OS" = "FreeBSD" ]; then
                if [ ! -e /etc/crontab ]; then
                        echo "You cannot run cronjob, because you do not have /etc/crontab.";
                fi
        elif [ ! -d /etc/cron.${CRON_FREQUENCY_OPT} ]; then
                echo "You cannot run cronjob, because you do not have /etc/cron.${CRON_FREQUENCY_OPT} directory.";
                exit 1;
        fi
	
	echo -n '' > ${CRONFILE}
	echo '#!/bin/sh'	>> ${CRONFILE}
	echo 'cd /usr/local/directadmin/custombuild' >> ${CRONFILE}
	echo './build update >/dev/null 2>&1' >> ${CRONFILE}
	
	if [ "${NOTIFICATIONS_OPT}" = "yes" ] || [ "${UPDATES_OPT}" = "yes" ] || [ "${WEBAPPS_UPDATES_OPT}" = "yes" ] || [ "${DA_AUTOUPDATE_OPT}" = "yes" ]; then

		echo "AVAIL_UPDATES=\"\`./build versions_nobold | grep -c -e 'update is available.'\`\"" >> ${CRONFILE}

		echo 'if [ "${AVAIL_UPDATES}" -gt 0 ]; then' >> ${CRONFILE}
		if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "no" ]; then
			echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates available for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE}
		fi
		if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "yes" ]; then
			echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates running for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE}
		fi
		if [ "${UPDATES_OPT}" = "yes" ]; then
			echo './build update_versions' >> ${CRONFILE}
		fi
		if [ "${UPDATES_OPT}" = "no" ] && [ "${DA_AUTOUPDATE_OPT}" = "yes" ]; then
			echo './build update_da' >> ${CRONFILE}
		fi
		if [ "${UPDATES_OPT}" = "no" ] && [ "${WEBAPPS_UPDATES_OPT}" = "yes" ]; then
			echo './build update_webapps' >> ${CRONFILE}
		fi
		echo 'fi' >> ${CRONFILE}
	fi

	echo 'exit 0;' >> ${CRONFILE}
	chmod 755 ${CRONFILE}

	#for freebsd, we have to add it to /etc/crontab
	if [ "$OS" = "FreeBSD" ]; then
		COUNT=`grep -c $CRONFILE /etc/crontab`;
		if [ "$COUNT" -ge 1 ]; then
			cp -f /etc/crontab /etc/crontab.back
			STR="perl -pi -e 's#.*${CRONFILE}\n##' /etc/crontab"
			eval $STR
		fi
		if [ "${CRON_FREQUENCY_OPT}" = "daily" ]; then
			echo "02 4 * * * root $CRONFILE" >> /etc/crontab
		elif [ "${CRON_FREQUENCY_OPT}" = "weekly" ]; then
			echo "02 4 * * 0 root $CRONFILE" >> /etc/crontab
		elif [ "${CRON_FREQUENCY_OPT}" = "monthly" ]; then
			echo "02 4  1 * * root $CRONFILE" >> /etc/crontab
		fi                
	fi
	
	echo "Cronjob is set for ${EMAIL_OPT}:"
	echo "Cronjob frequncy: ${CRON_FREQUENCY_OPT}"
	echo "Automatic notifications: ${NOTIFICATIONS_OPT}"
	echo "Automatic updates: ${UPDATES_OPT}"
}

####################################################

updateDovecot() {
	cd ${CWD}
	getFile dovecot-${DOVECOT_VER}.tar.gz dovecot
	getFile dovecot.boot
	getFile dovecot.boot.freebsd
	getFile dovecot.boot.debian
	getFile dovecot.conf
	getFile exim.conf.dovecot.patch eximdovecotpatch
}

####################################################

doUpdateData() {
	cd ${CWD}

	getFile servers.txt servers

	if [ "${APACHE_OPT}" = "1.3" ]; then
		doUpdateData1
	elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_OPT}
		getFile apr-${APR_VER}.tar.gz apr
		getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util
		getFile httpd_2
		getFile httpd_2_freebsd
		getFile httpd_2_debian
	fi	

	getFile mime.types
	getFile mod_perl-${MODPERL_VER}.tar.gz ${MODPERL_INDEX}
	getFile curl-${CURL_VER}.tar.gz curl

	if [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		if [ "$NEW_PCRE_OPT" = "yes" ]; then
			getFile pcre-${PCRE_VER}.tar.gz pcre_current
		else
			getFile pcre-${PCRE_VER}.tar.gz pcre
		fi
	fi

	getFile libmcrypt-${MCRYPT_VER}.tar.gz mcrypt
	getFile mhash-${MHASH_VER}.tar.gz mhash
	getFile freetype-${FREETYPE_VER}.tar.gz freetype
	getFile libiconv-${ICONV_VER}.tar.gz iconv
	if [ "$NEW_ZLIB_OPT" = "yes" ] || [ "$NEW_XML2_OPT" = "yes" ]; then
		getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current
	else
		getFile libxml2-${LIBXML2_VER}.tar.gz libxml2
	fi
	getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt
	getFile icu4c-${ICU_VER}-src.tgz icu4c

	if [ "${PHP6_CGI_OPT}" = "yes" ] || [ "${PHP6_CLI_OPT}" = "yes" ]; then
		getFile php-${PHP6_VER}.tar.gz php6
	fi
	if [ "${PHP5_CGI_OPT}" = "yes" ] || [ "${PHP5_CLI_OPT}" = "yes" ]; then
		if [ "${PHP5_VER_OPT}" = "5.3" ]; then
			getFile php-${PHP5_VER}.tar.gz php53
		elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
			getFile php-${PHP5_VER}.tar.gz php54
		elif [ "${PHP5_VER_OPT}" = "5.5" ]; then
			getFile php-${PHP5_VER}.tar.gz php55
		else
			getFile php-${PHP5_VER}.tar.gz php5
			getFile ${MAIL_HEADER_FILE_PHP5} php5-mail
		fi
	fi

	if [ "${SPAMASSASSIN_OPT}" = "yes" ]; then
		getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin
	fi
	
	if [ "${CLAMAV_OPT}" = "yes" ]; then
		getFile clamav-${CLAMAV_VER}.tar.gz clamav
	fi
	
	if [ "${MAILMAN_OPT}" = "yes" ]; then
		getFile mailman-${MAILMAN_VER}.tgz mailman
	fi
	
	getFile ${WEBALIZER_FILE} webalizer
	if [ "${PROFTPD_OPT}" = "yes" ]; then
		getFile proftpd-${PROFTPD_VER}.tar.gz proftpd
		getFile proftpd
		getFile proftpd_freebsd
		getFile proftpd_debian
	fi
	if [ "${PUREFTPD_OPT}" = "yes" ]; then
		getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
		getFile pure-ftpd
		getFile pure-ftpd_freebsd
		getFile pure-ftpd_debian
	fi

	if [ "$NEW_SUPHP_OPT" = "yes" ]; then
		getFile suphp-${SUPHP_VER}.tar.gz suphp_current
	else
		getFile suphp-${SUPHP_VER}.tar.gz suphp
	fi

	if [ "${EXIM_OPT}" = "yes" ]; then
		getFile exim-${EXIM_VER}.tar.gz exim
		getFile exim
		getFile exim_freebsd
		getFile exim_debian
	fi
	if [ "${DOVECOT_OPT}" = "yes" ]; then
		updateDovecot;
	fi
	getFile autoconf-${AUTOCONF_VER}.tar.gz autoconf
	getFile automake-${AUTOMAKE_VER}.tar.gz automake
	getFile m4-${M4_VER}.tar.gz m4
	getFile libtool-${LIBTOOL_VER}.tar.gz libtool
	if [ "${ZEND_OPT}" = "yes" ]; then
		getFile ${ZENDFILE}
	fi
	
	if [ "${IONCUBE_OPT}" = "yes" ]; then
		getFile ${IONCUBEFILE}
	fi
	
	if [ "${JAIL_OPT}" = "yes" ]; then
		getFile jail-${JAIL_VER}.tar.gz jail
		tar xzf jail-${JAIL_VER}.tar.gz --no-same-owner
		
		getFile nbsmtp-${NB_SMTP_VER}.tar.gz
		getFile coreutils-${COREUTILS_VER}.tar.gz
	fi
}

####################################################

doZend() {
	cd ${CWD};

	getFile ${ZENDFILE}
	if [ "${ZEND_OPT}" != "yes" ]; then
		echo "You cannot install Zend Optimizer, because you do not have it set in options.conf file.";
		exit 1;
	fi

	if [ "${PHP5_VER_OPT}" = "5.5" ]; then
		echo "There is no Zend Guard loader available for PHP ${PHP5_VER_OPT}"
		exit 1;
	fi
	
	if [ "$OS" = "FreeBSD" ]; then
		if [ "${PHP5_VER_OPT}" = "5.3" ] || [ "${PHP5_VER_OPT}" = "5.4" ] || [ "${PHP5_VER_OPT}" = "5.5" ]; then
			echo "Zend Guard loader does not support FreeBSD."
		else
			if [ "$OS_VER" = "7.0" ] || [ "$OS_VER" = "7.1" ] || [ "$OS_VER" = "7.2" ] || [ "$OS_VER" = "7.3" ] || [ "$OS_VER" = "7.4" ] || [ "$OS_VER" = "8.0" ] || [ "$OS_VER" = "8.1" ] || [ "$OS_VER" = "8.2" ]; then
				COUNT=`pkg_info | grep -c compat6x`
				if [ "$COUNT" -eq 0 ]; then
						echo "";
						echo "Zend requires compat6x-i386 for freebsd 7/8. Trying to install it... Note that you may experience probelms with ZendOptimizer support, because it has no official builds for FreeBSD 7 or higher.";
						echo "";
						sleep 2;
						pkg_add -r compat6x-i386
				fi
			fi
			#Zend Optimizer <3.3.9 installation
			cd ${CWD};
			tar xzf ${ZENDFILE} --no-same-owner
			cd ${ZENDNAME};
			echo "";
			$ECHO -e "Location of php.ini:\n  /usr/local/lib";
			echo "Press return to continue...";
			read bogusdata;

			if [ "$OS" = "FreeBSD" ] && [ "$B64" -eq 1 ]; then
				./install-tty
			else
				./install.sh
			fi
		fi
		cd ${CWD};
	else
		cd ${CWD};
		tar xzf ${ZENDFILE} --no-same-owner
		
		#Zend Optimizer >=3.3.9 and Zend Guard Loader installation for Linux		
		DO_ZEND_53="no";		
		if [ "${PHP5_VER_OPT}" = "5.3" ]; then
			if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
				DO_ZEND_53="yes";
			fi
		elif [ "${PHP5_VER_OPT}" = "5.4" ]; then
			if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
				DO_ZEND_54="yes";
			fi
		fi		
		if [ "${DO_ZEND_53}" = "yes" ] || [ "${DO_ZEND_54}" = "yes" ]; then
			if [ "${DO_ZEND_53}" = "yes" ]; then
				cp -fp ${ZENDNAME}/php-5.3.x/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader.so
			elif [ "${DO_ZEND_54}" = "yes" ]; then
				cp -fp ${ZENDNAME}/php-5.4.x/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader.so
			fi
			chmod 755 /usr/local/lib/ZendGuardLoader.so
			chown root:${ROOT_GRP} /usr/local/lib/ZendGuardLoader.so
			if [ "${PHP5_CLI_OPT}" = "yes" ]; then
				ZEND_INSTALLED="`${PHP_BIN} -v | grep -c 'Zend Optimizer'`"
				if [ "${ZEND_INSTALLED}" -gt 0 ]; then
					ZEND_VERSION="`${PHP_BIN} -v | grep 'Zend Optimizer' | awk '{print $4}' | cut -dv -f2 | cut -d, -f1`"
					if [ `cat ${PHP_INI} | grep -v ';zend' | grep -v 'zend_extension=/usr/local/lib/ZendGuardLoader.so' | grep -c Optimizer` -gt 0 ]; then
						for i in `cat ${PHP_INI} | grep -v 'zend_extension=/usr/local/lib/ZendGuardLoader.so' | grep Optimizer`; do { perl -pi -e "s#^$i#;$i#" ${PHP_INI}; }; done
					fi
				fi
				ZEND_INSTALLED_INI="`cat ${PHP_INI} | grep -c '^zend_extension=/usr/local/lib/ZendGuardLoader.so'`"
				if [ ${ZEND_INSTALLED_INI} -eq 0 ]; then
					echo 'zend_extension=/usr/local/lib/ZendGuardLoader.so' >> ${PHP_INI}
				fi
			else
				ZEND_INSTALLED="`${PHP_BIN_SUPHP5} -v | grep -c 'Zend Optimizer'`"
				if [ "${ZEND_INSTALLED}" -gt 0 ]; then
					ZEND_VERSION="`${PHP_BIN_SUPHP5} -v | grep 'Zend Optimizer' | awk '{print $4}' | cut -dv -f2 | cut -d, -f1`"
					if [ `cat ${PHP_INI_SUPHP5} | grep -v ';zend' | grep -v 'zend_extension=/usr/local/lib/ZendGuardLoader.so' | grep -c Optimizer` -gt 0 ]; then
						for i in `cat ${PHP_INI_SUPHP5} | grep -v 'zend_extension=/usr/local/lib/ZendGuardLoader.so' | grep Optimizer`; do { perl -pi -e "s#^$i#;$i#" ${PHP_INI_SUPHP5}; }; done
					fi
				fi
				ZEND_INSTALLED_INI="`cat ${PHP_INI_SUPHP5} | grep -c '^zend_extension=/usr/local/lib/ZendGuardLoader.so'`"
				if [ ${ZEND_INSTALLED_INI} -eq 0 ]; then
					echo 'zend_extension=/usr/local/lib/ZendGuardLoader.so' >> ${PHP_INI_SUPHP5}
				fi
			fi
				
			echo "Zend Guard Loader has been installed."
		else
			ZEND_INSTALLED=0; 
			if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP5_CGI_OPT}" = "yes" ]; then
				cp -fp ${ZENDNAME}/data/5_2_x_comp/ZendOptimizer.so /usr/local/lib/ZendOptimizer_5.2.so
				chmod 755 /usr/local/lib/ZendOptimizer_5.2.so
				chown root:${ROOT_GRP} /usr/local/lib/ZendOptimizer_5.2.so
				if [ "${PHP5_CLI_OPT}" = "yes" ]; then
					ZEND_INSTALLED="`${PHP_BIN} -v | grep -c 'Zend Optimizer'`"
					if [ "${ZEND_INSTALLED}" -gt 0 ]; then
						ZEND_VERSION="`${PHP_BIN} -v | grep 'Zend Optimizer' | awk '{print $4}' | cut -dv -f2 | cut -d, -f1`"
						if [ `cat ${PHP_INI} | grep -v ';zend' | grep -v 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' | grep -c Optimizer` -gt 0 ]; then
							for i in `cat ${PHP_INI} | grep -v 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' | grep Optimizer`; do { perl -pi -e "s#^$i#;$i#" ${PHP_INI}; }; done
						fi
					fi
					ZEND_INSTALLED_INI="`cat ${PHP_INI} | grep -c '^zend_extension=/usr/local/lib/ZendOptimizer_5.2.so'`"
					if [ ${ZEND_INSTALLED_INI} -eq 0 ]; then
						echo 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' >> ${PHP_INI}
					fi
				else
					ZEND_INSTALLED="`${PHP_BIN_SUPHP5} -v | grep -c 'Zend Optimizer'`"
					if [ "${ZEND_INSTALLED}" -gt 0 ]; then
						ZEND_VERSION="`${PHP_BIN_SUPHP5} -v | grep 'Zend Optimizer' | awk '{print $4}' | cut -dv -f2 | cut -d, -f1`"
						if [ `cat ${PHP_INI_SUPHP5} | grep -v ';zend' | grep -v 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' | grep -c Optimizer` -gt 0 ]; then
							for i in `cat ${PHP_INI_SUPHP5} | grep -v 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' | grep Optimizer`; do { perl -pi -e "s#^$i#;$i#" ${PHP_INI_SUPHP5}; }; done
						fi
					fi
					ZEND_INSTALLED_INI="`cat ${PHP_INI_SUPHP5} | grep -c '^zend_extension=/usr/local/lib/ZendOptimizer_5.2.so'`"
					if [ ${ZEND_INSTALLED_INI} -eq 0 ]; then
						echo 'zend_extension=/usr/local/lib/ZendOptimizer_5.2.so' >> ${PHP_INI_SUPHP5}
					fi
				fi
				
				echo "Zend Optimizer has been installed."
			else
				echo "There is no Zend Opimizer available for PHP6."
			fi
		fi
		
	fi
}

####################################################

doIoncube() {
	cd ${CWD};

	getFile ${IONCUBEFILE}
	if [ "${IONCUBE_OPT}" != "yes" ]; then
		echo "You cannot install ionCube loader, because you do not have it set in options.conf file.";
		exit 1;
	fi

	cd ${CWD};
	tar xzf ${IONCUBEFILE} --no-same-owner

	if [ -d ioncube ]; then
		chown -R root:${ROOT_GRP} ioncube
	fi
	
	OS_EXT=lin
	
	if [ "$OS" = "FreeBSD" ]; then
		OS_EXT=fre
	fi
	
	#Filenames
	if [ "${PHP5_VER_OPT}" = "5.4" ]; then
	    PHP5IONCUBE=ioncube_loader_${OS_EXT}_5.4.so
	elif [ "${PHP5_VER_OPT}" = "5.3" ]; then
	    PHP5IONCUBE=ioncube_loader_${OS_EXT}_5.3.so
	elif [ "${PHP5_VER_OPT}" = "5.5" ]; then
	    PHP5IONCUBE=ioncube_loader_${OS_EXT}_5.5.so
	else
		PHP5IONCUBE=ioncube_loader_${OS_EXT}_5.2.so
	fi
	
	if [ "${PHP6_CLI_OPT}" = "yes" ] || [ "${PHP6_CGI_OPT}" = "yes" ]; then
		echo "PHP6 is not supported by ionCube yet."
		exit 0;
	fi
	
	if [ "${PHP5_CLI_OPT}" = "yes" ]; then
	    CORRECT_PHPINI="`grep -c '; End:' ${PHP_INI}`"
		if [ "${CORRECT_PHPINI}" -eq 0 ]; then
			echo "Cannot install IonCube loader. Found no '; End:' in ${PHP_INI}"
			exit 0;
		fi
		
		cp -pf ioncube/${PHP5IONCUBE} /usr/local/lib/${PHP5IONCUBE}
		
		PHPINI_READY="`grep -c \"zend_extension=/usr/local/lib/${PHP5IONCUBE}\" ${PHP_INI}`"
		if [ "${PHPINI_READY}" -eq 0 ]; then
			perl -pi -e "s#\; End\:#\; End\:\nzend_extension=/usr/local/lib/${PHP5IONCUBE}#" ${PHP_INI}
		fi
	fi
	
	if [ "${PHP5_CGI_OPT}" = "yes" ]; then
	    CORRECT_PHPINI="`grep -c '; End:' ${PHP_INI_SUPHP5}`"
		if [ "${CORRECT_PHPINI}" -eq 0 ]; then
			echo "Cannot install IonCube loader. Found no '; End:' in ${PHP_INI_SUPHP5}"
			exit 0;
		fi
		
		cp -pf ioncube/${PHP5IONCUBE} /usr/local/lib/${PHP5IONCUBE}
		
		PHPINI_READY="`grep -c \"zend_extension=/usr/local/lib/${PHP5IONCUBE}\" ${PHP_INI_SUPHP5}`"
		if [ "${PHPINI_READY}" -eq 0 ]; then
			perl -pi -e "s#\; End\:#\; End\:\nzend_extension=/usr/local/lib/${PHP5IONCUBE}#" ${PHP_INI_SUPHP5}
		fi
	fi
	
	echo "ionCube loader has been installed."
	
}

####################################################

doLibJpeg() {

        cd ${CWD};
        getFile ${JPEGFILE}
        tar xzf ${JPEGFILE} --no-same-owner
        cd ${JPEGDIR}

	./configure

        while
        echo "Trying to make libjpeg..."
        do
        {
                make CFLAGS=-fpic libjpeg.a

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done

	make install-lib
}

####################################################

doZlib() {
	quitIfLocked doZlib
	
        cd ${CWD};
	if [ "$NEW_ZLIB_OPT" = "yes" ]; then
		getFile zlib-${ZLIB_VER}.tar.gz zlib-current
	else
		getFile zlib-${ZLIB_VER}.tar.gz zlib
	fi
        tar xzf zlib-${ZLIB_VER}.tar.gz --no-same-owner
        cd zlib-${ZLIB_VER}

        ./configure --shared

        while
        echo "Trying to make libz..."
        do
        {
                make

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done

        make install
	removeLockfile

	cd ${CWD};
}

####################################################

doLibPng() {
	quitIfLocked doLibPng
	
        cd ${CWD};

	if [ "${B64}" = "1" ]; then
		getFile libpng-${PNG_VER}.tar.gz libpng64
	else
		getFile libpng-${PNG_VER}.tar.gz libpng
	fi

        tar xzf libpng-${PNG_VER}.tar.gz --no-same-owner
        cd libpng-${PNG_VER}

	    ./configure --prefix=/usr/local

        while
        echo "Trying to make libpng"
        do
        {
                make

                if [ $? -ne 0 ]
                then
			if [ ${USER_INPUT} -eq 1 ]; then
	                        $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
        	                read yesno;
                	        echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done

	mkdir -p /usr/local/include/libpng >/dev/null 2>&1

        make install
	removeLockfile
}

####################################################

convert() {
	#delete old modules
	#backup httpd.conf
	#copy httpd.conf ssl.conf
	#insert all Include lines
	#tokenize the |IP|
	
	cd ${CWD}
	
	rm -rf /usr/lib/apache/*
	if [ "`grep -c 'Port 80' /etc/httpd/conf/httpd.conf`" = "1" ]; then
		mv -f ${HTTPDCONF} ${HTTPDCONF}.1.3.backup
		if [ ! -e ${AP2CONFDIR}/httpd.conf ]; then
			do_exit 1 "cannot find httpd.conf in ${AP2CONFDIR} directory";
		fi
		if [ ! -e ${AP2CONFDIR}/extra/httpd-ssl.conf ]; then
			do_exit 1 "cannot find ssl.conf in the ${NAME} directory";
		fi

		cp -rf ${AP2CONFDIR} ${HTTPDDIR}
		cp -rf ${HTTPDCONF}.1.3.backup/ssl.key ${HTTPDCONF}
		cp -rf ${HTTPDCONF}.1.3.backup/ssl.crt ${HTTPDCONF}

		if [ "${APACHE_OPT}" = "2.0" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf_2.0 ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf_2.0 ${HTTPDCONF}/extra/httpd-mpm.conf
		elif [ "${APACHE_OPT}" = "2.2" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
		elif [ "${APACHE_OPT}" = "2.4" ]; then
			cp -f ${AP2CONFDIR}/httpd.conf ${HTTPD_CONF}
			cp -f ${AP2CONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
		fi
		
		if [ "${AP2CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP2CUSTOMCONFDIR} ${HTTPDDIR}
		fi

		#tokenize the IP
		tokenize_IP

		#add all the Include lines
		doVhosts;

		cd ${CWD}

		#check directadmin.conf file
		if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
			perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE}
			doRestartDA;
		fi
		if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then
			perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE}
		fi

		if [ "${OS}" = "FreeBSD" ]; then
			cp -f httpd_2_freebsd /usr/local/etc/rc.d/httpd
			chmod 755 /usr/local/etc/rc.d/httpd
		else
			if [ -e /etc/debian_version ]; then
				cp -f httpd_2_debian /etc/init.d/httpd
			else
				cp -f httpd_2 /etc/init.d/httpd
			fi

			chmod 755 /etc/init.d/httpd
			/sbin/chkconfig httpd on
		fi

		perl -pi -e 's/`grep apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE}
		perl -pi -e 's/`grep apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE}
		doRestartDA;
		echo "action=rewrite&value=ips" >> /usr/local/directadmin/data/task.queue
		echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
		echo "action=directadmin&value=restart" >> /usr/local/directadmin/data/task.queue
		/usr/local/directadmin/dataskq
	else
		echo "$HTTPD_CONF seems to already be converted";
	fi
}

####################################################

doApache2() {
	cd ${CWD};
	getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_OPT}
	getFile apr-${APR_VER}.tar.gz apr
	getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util
	getFile httpd_2
	getFile httpd_2_freebsd
	getFile httpd_2_debian
	quitIfLocked doApache2
	
	ADD_2_2_25_DEB_PATCH=0
	if [ -s /etc/debian_version ] && [ "${APACHE2_VER}" = "2.2.25" ]; then
		ADD_2_2_25_DEB_PATCH=1
		getFile patches/apache_debian_7-ssl_1.0-2.2.25.patch deb7-ssl1-patch
	fi

	if [ "${APACHE2_VER}" = "2.4.9" ]; then
		getFile patches/apache_2.4.9_cert.patch.r1 apache_249_cert
	fi
	
	if [ "`grep -c 'ServerType standalone' /etc/httpd/conf/httpd.conf`" -ne 0 ]; then
		convert;
	fi
	
	ADMNHTTP=/usr/local/directadmin/data/users/admin/httpd.conf
	if [ ! -e ${ADMNHTTP} ]; then
		echo -n "" > ${ADMNHTTP}
		chown diradmin:admin ${ADMNHTTP}
		chmod 640 ${ADMNHTTP}
	fi

	set64;

	if [ ! -e /usr/local/bin/pcre-config ]; then
		removeLockfile
		doPCRE;
		
	fi

	addUserGroup apache apache
	backupHttp;
	cd ${CWD};
	FILE=${CWD}/httpd-${APACHE2_VER}.tar.gz

	checkFile ${FILE};

	echo "Extracting ${FILE}...";
	tar xzf ${FILE} --no-same-owner
	
	if [ "${APACHE_OPT}" = "2.4" ]; then
		FILE2=${CWD}/apr-${APR_VER}.tar.gz
		checkFile ${FILE2};
		echo "Extracting ${FILE2}...";
		tar xzf ${FILE2} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib
		if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr ]; then
			rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr
		fi
		mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-${APR_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr
		
		FILE3=${CWD}/apr-util-${APR_UTIL_VER}.tar.gz
		checkFile ${FILE3};
		echo "Extracting ${FILE3}...";
		tar xzf ${FILE3} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib
		if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util ]; then
			rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util
		fi
		mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util-${APR_UTIL_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util
	fi
	
	if [ "$HARDEN_SYMLINK_PATCH" = "yes" ]; then
		if [ "${APACHE_OPT}" = "2.4" ]; then
			PATCH_NAME=harden-symlinks-2.4.patch
			getFile ${PATCH_NAME} ${PATCH_NAME}
		else
			PATCH_NAME=harden-symlinks.patch.${APACHE2_VER}
			getFile ${PATCH_NAME} harden-symlinks-patch
		fi
		
		if [ -s ${PATCH_NAME} ]; then
			echo "Patching apache for hardened symlinks patch...";
			if [ "${APACHE_OPT}" = "2.4" ]; then
				cd httpd-${APACHE2_VER}
				patch -p0 < ../${PATCH_NAME}
				cd ..
			else	
				patch -p0 < ${PATCH_NAME}
			fi
		else
			echo "Cannot find ${PATCH_NAME} to for hardened symlinks patch.";
		fi
	fi
	
	cd httpd-${APACHE2_VER}
	
	# http://svn.apache.org/viewvc?view=revision&revision=1501712
	if [ "${ADD_2_2_25_DEB_PATCH}" -eq 1 ]; then
		patch -p4 < ../patches/apache_debian_7-ssl_1.0-2.2.25.patch
	fi

	if [ "${APACHE2_VER}" = "2.4.9" ]; then
		echo "Patching to fix SSL bug #56410"
		if [ -e ../patches/apache_2.4.9_cert.patch.r1 ]; then
			patch -p0 < ../patches/apache_2.4.9_cert.patch.r1
		fi
	fi
	
	if [ "${CLINUX_OPT}" = "yes" ]; then
		if [ "${APACHE_OPT}" = "2.4" ]; then
			patch -p1 < ../apr-2.4-httpd.1.patch
		elif [ "${APACHE_OPT}" = "2.2" ]; then
			patch -p1 < ../apr-2.2-httpd.2.patch
		fi
		patch -p1 < ../suexec.patch
	fi
	setFDSETSIZE

	#configure
	echo "Configuring httpd-${APACHE2_VER}";
	${CWD}/${APACHE2_CONFIGURE};
        if [ $? -ne 0 ]
        then
                $ECHO -e "\n*** There was an error while trying to configure Apache 2. Check the ${APACHE2_CONFIGURE} file\n";
                do_exit 1;
        fi
	echo "Done Configuration.";

        echo "increasing FD_SETSIZE in os/tpf/os.h ..";
        if [ -e ./os/tpf/os.h ]; then
                #perl -pi -e 's/FD_SETSIZE.*2048/FD_SETSIZE 32768/' ./os/tpf/os.h
                perl -pi -e 's/\#define FD_SETSIZE.*2048/\#ifdef FD_SETSIZE\n\#undef FD_SETSIZE\n\#endif\n\#define FD_SETSIZE 32768/' ./os/tpf/os.h
        fi

        if [ -e ./srclib/apr/include/apr.hnw ]; then
                perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/include/apr.hnw
        fi

        if [ -e ./srclib/apr/poll/unix/select.c ]; then
                perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/poll/unix/select.c
        fi

	#Jailed shell
	if [ "${JAIL_OPT}" = "yes" ]; then
		cd ${CWD}
		
		if [ ! -e ${SU_FILE} ]; then
			echo "Cannot find ${SU_FILE}. Run './build update_data'";
			do_exit 0;
		fi
		
		SUEXEC_FILE=${CWD}/httpd-${APACHE2_VER}/support/suexec.c
		cp -f ${SU_FILE} ${SUEXEC_FILE}
		chmod 1755 ${SUEXEC_FILE}
		
		#add just a touch of nothing to increase the datestamp so that 'make' finds it.
		echo -n "" >> ${SUEXEC_FILE};
	fi

	cd httpd-${APACHE2_VER};
	
	while
	echo "Trying to make Apache 2..."
	do
	{
		C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

			if [ "${yesno}" = "n" ]
			then
				do_exit 0;
			fi
		else
			break
		fi
	}
	done
	echo "Make complete";

	checkRPMS;

	rm -f /usr/sbin/apxs

	echo "Installing Apache...";
	make install

	ln -sf /var/www/build /etc/httpd/build

	removeLockfile
	cd ${CWD}

	restoreHttp;


	#fix for downgrades to let $1$ passwords version of apr-utils (1.4.1) work, if 1.5.1 was installed previously.
	if [ "${APACHE_OPT}" = "2.4" ] && [ "${APR_UTIL_VER}" = "1.4.1" ]; then
		APR_51_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.5.1
		APR_41_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.4.1
		APR_LIB_LINK=${HTTPDDIR}/lib/libaprutil-1.so.0
		if [ -e "${APR_51_LIB}" ] && [ -e "${APR_41_LIB}" ]; then
			rm -f ${APR_LIB_LINK}
			rm -f ${APR_51_LIB}
			ln -s libaprutil-1.so.0.4.1 ${APR_LIB_LINK}
		fi
	fi

	#ensure /usr/sbin/apxs
	if [ ! -s /usr/sbin/apxs ] && [ -s /usr/bin/apxs ]; then
		ln -s /usr/bin/apxs /usr/sbin/apxs
	fi

	if [ ${OS} = "FreeBSD" ]
	then
		cp -f ${CWD}/httpd_2_freebsd /usr/local/etc/rc.d/httpd
		chmod 755 /usr/local/etc/rc.d/httpd
	elif [ -e /etc/debian_version ]; then
		cp -f ${CWD}/httpd_2_debian /etc/init.d/httpd
                chmod 755 /etc/init.d/httpd
		update-rc.d httpd defaults
	else
		cp -f ${CWD}/httpd_2 /etc/rc.d/init.d/httpd
		chmod 755 /etc/rc.d/init.d/httpd
		/sbin/chkconfig httpd on
	fi

	if [ ! -e /etc/mime.types ]
	then
		cp ${CWD}/mime.types /etc/mime.types
	fi

	#check directadmin.conf file
	if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then
		perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE}
	fi

	if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
		if [ "`grep -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
			perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE}
			doRestartDA
		fi

		mv -f ${HTTPDCONF} ${HTTPDCONF}.${APACHE_OPT}.backup

		cp -rf ${AP2CONFDIR} ${HTTPDDIR}
		
		if [ "${AP2CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP2CUSTOMCONFDIR} ${HTTPDDIR}
		fi
		cp -rf ${HTTPDCONF}.${APACHE_OPT}.backup/ssl.key ${HTTPDCONF}
		cp -rf ${HTTPDCONF}.${APACHE_OPT}.backup/ssl.crt ${HTTPDCONF}
		doRestartDA;
	fi

	#copy the new configs if needed
	if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
		cp -rf ${AP2CONFDIR} ${HTTPDDIR}

		if [ "${SECURE_HTACCESS}" = "yes" ]; then
			ln -sf httpd-directories-new.conf ${HTTPDCONF}/extra/httpd-directories.conf
		else
			ln -sf httpd-directories-old.conf ${HTTPDCONF}/extra/httpd-directories.conf
		fi

		if [ "${AP2CUSTOMCONFDIR}" != "0" ]; then
			cp -rf ${AP2CUSTOMCONFDIR} ${HTTPDDIR}
		fi
	fi

	#hide frontpage from the interface to avoid confusion
	hideFrontpage

	#ensure it's there before user httpd.conf is written.
	ensure_server_ca

	#ensure we have the correct apache_ver
	if [ "`grep -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -eq "0" ]; then
		echo "apache_ver=2.0" >> ${DACONF_TEMPLATE_FILE}
		echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
		doRestartDA;
	elif [ "`grep -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -ne "0" ]; then
		perl -pi -e 's/`grep apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE}
	fi
	if [ "`grep -c apache_ver=2.0 ${DACONF_FILE}`" -eq "0" ]; then
		echo "apache_ver=2.0" >> ${DACONF_FILE}
		doRestartDA;
		echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
	elif [ "`grep -c apache_ver=2.0 ${DACONF_FILE}`" -ne "0" ]; then
		perl -pi -e 's/`grep apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE}
		doRestartDA;
		echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
	fi

	#rewrite ips.conf if needed
	echo "action=rewrite&value=ips" >> /usr/local/directadmin/data/task.queue

	/usr/local/directadmin/dataskq

	#tokenize the IP if needed
	tokenize_IP

	#add all the Include lines if they do not exist
	if [ "`grep -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
		doVhosts;
		cd ${CWD}/httpd-${APACHE2_VER}
	fi

	if [ ! -d /etc/httpd/conf/ssl.key ] || [ ! -d /etc/httpd/conf/ssl.crt ]; then
		cd ${WORKDIR}
		mkdir -p /etc/httpd/conf/ssl.key
		mkdir -p /etc/httpd/conf/ssl.crt
		#install the cert/key
		/usr/bin/openssl req -x509 -newkey rsa:1024 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${AP2CERTCONF}

		chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
		chmod 600 ${HTTPDCONF}/ssl.key/server.key		

		cd ${CWD}
	fi

	doApacheCheck;

	mkdir -p ${WWWDIR}

	if [ ! -e ${WWWDIR}/index.html ]
	then
		if [ -e ${WWWDIR}/index.html.en ]
		then
			cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html
		else
			echo "<html>Apache is functioning normally</html>" > ${WWWDIR}/index.html
		fi
	fi
	if [ ! -e /etc/logrotate.d/apache ] && [ ${OS} != "FreeBSD" ]
	then
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -O /etc/logrotate.d/apache
	fi

	# Make sure apr is linked correctly
	if [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		ln -sf /usr/bin/apr-1-config /usr/bin/apr-config
	fi

	# Make sure there is no SSLMutex in /etc/httpd/conf/extra/httpd-ssl.conf
	# Make sure there is no LockFile in /etc/httpd/conf/extra/httpd-mpm.conf
	if [ "${APACHE_OPT}" = "2.4" ]; then
		perl -pi -e 's/^SSLMutex/#SSLMutex/' /etc/httpd/conf/extra/httpd-ssl.conf
		perl -pi -e 's/^LockFile/#LockFile/' /etc/httpd/conf/extra/httpd-mpm.conf
	fi
	
	#Install mod_hostinglimits
	if [ "${CLINUX_OPT}" = "yes" ]; then
		if [ ! -e /usr/bin/cmake ]; then
			yum -y install cmake
		fi
		if [ ! -e /usr/include/lve/lve-ctl.h ]; then
			yum -y install liblve-devel
		fi
		cd ${CWD}
		CL_MODDIR="`tar tzf mod_hostinglimits.tar.gz | head -n 1 | cut -d/ -f1`"
		cd ${CL_MODDIR}
		cmake CMakeLists.txt
		make install
		if [ ! -s /etc/httpd/conf/extra/modhostinglimits.conf ]; then
		    ${WGET} ${WGET_CONNECT_OPTIONS} -O /etc/httpd/conf/extra/modhostinglimits.conf http://repo.cloudlinux.com/cloudlinux/confs/modhostinglimits.conf
			perl -pi -e 's#/etc/httpd/modules/mod_hostinglimits.so#/usr/lib/apache/mod_hostinglimits.so#' /etc/httpd/conf/extra/modhostinglimits.conf
		fi
		#Inserting mod_hostinglimits to apache config
		COUNTCLCONF=`grep -c -e "modhostinglimits.conf" /etc/httpd/conf/extra/httpd-includes.conf`
		if [ "${COUNTCLCONF}" -eq 0 ]; then
		    echo "#For LVE settings" >> /etc/httpd/conf/extra/httpd-includes.conf
			echo "Include /etc/httpd/conf/extra/modhostinglimits.conf" >> /etc/httpd/conf/extra/httpd-includes.conf
		fi
	fi
	
	echo "Restarting apache."
	${INITDDIR}/httpd restart

	removeLockfile
}

####################################################

convertToDovecot() {
	updateDovecot;

	if [ "${DOVECOT_OPT}" != "yes" ]; then
		echo "You cannot convert to Dovecot, because you do not have it set in options.conf file.";
		exit 1;
	fi

        #patch exim.conf
	if [ -e /etc/exim.conf ] && [ "`grep -c maildir_format /etc/exim.conf`" -eq 0 ]; then
		echo "Patching /etc/exim.conf to maildir";
		patch -p0 < ${CWD}/exim.conf.dovecot.patch
	fi

        COUNT="`grep -c -e '^dovecot=1' ${DACONF_FILE}`"
        if [ "${COUNT}" = "0" ] && [ -e ${DACONF_FILE} ]; then
		echo "Adding dovecot=1 to the ${DACONF_FILE} file...";
                echo "dovecot=1" >> ${DACONF_FILE}
                echo "dovecot=ON" >> /usr/local/directadmin/data/admin/services.status
		doRestartDA
        fi

	COUNT_TEMPLATE="`grep -c -e '^dovecot=1' ${DACONF_TEMPLATE_FILE}`"
	if [ "${COUNT_TEMPLATE}" = "0" ] && [ -e ${DACONF_TEMPLATE_FILE} ]; then
		echo "Adding dovecot=1 to the ${DACONF_TEMPLATE_FILE} (template) file ...";
                echo "dovecot=1" >> ${DACONF_TEMPLATE_FILE}
		if [ -e /usr/local/directadmin/data/admin/services.status ]; then
			echo "dovecot=ON" >> /usr/local/directadmin/data/admin/services.status
		fi
	fi

        #uninstall old services and restart exim
        if [ "${OS}" = "FreeBSD" ]; then
                /usr/local/etc/rc.d/directadmin restart
                /usr/local/etc/rc.d/exim restart
                perl -pi -e 's/^imap/#imap/' /etc/inetd.conf
                killall -HUP inetd
                /usr/local/etc/rc.d/vm-pop3d stop
                cat /usr/local/etc/rc.d/boot.sh | grep -v vm-pop3d > /usr/local/etc/rc.d/boot.sh.new
		mv -f /usr/local/etc/rc.d/boot.sh /usr/local/etc/rc.d/boot.sh.old
		mv -f /usr/local/etc/rc.d/boot.sh.new /usr/local/etc/rc.d/boot.sh
		chmod 755 /usr/local/etc/rc.d/boot.sh
	elif [ -e /etc/debian_version ]; then
		/etc/init.d/exim restart
		/etc/init.d/directadmin restart
		perl -pi -e 's/^imap/#imap/' /etc/inetd.conf
		killall -HUP inetd
		/etc/init.d/vm-pop3d stop
		chmod 0 /etc/init.d/vm-pop3d
        else
                /sbin/service exim restart
                /sbin/service directadmin restart
                rm -f /etc/xinetd.d/imap
                killall -HUP xinetd
                /sbin/service vm-pop3d stop
                /sbin/chkconfig vm-pop3d off
        fi

	killall -9 vm-pop3d 2> /dev/null

	FILE=/usr/local/directadmin/data/admin/services.status
        cat ${FILE} | grep -v vm-pop3d > ${FILE}.new
	mv -f ${FILE} ${FILE}.old
	mv -f ${FILE}.new ${FILE}
	chown diradmin:diradmin ${FILE}
	chmod 600 ${FILE}


	echo "Adding conversion command to the task.queue ...";
	echo "action=convert&value=todovecot" >> /usr/local/directadmin/data/task.queue
	echo "Executing the task.queue cotents now, please be patient ...";
	/usr/local/directadmin/dataskq d

	echo "Restarting dovecot."
	${INITDDIR}/dovecot restart
	echo "Restarting exim."
	${INITDDIR}/exim restart

	echo "Done.";
}

freebsd_set_newsyslog()
{
	NSL_L=$1
	NSL_V=$2
	NSL=/etc/newsyslog.conf
	
	COUNT=`grep -c ${NSL_L} $NSL`
	if [ "${COUNT}" -eq 0 ]; then
		echo -e "${NSL_L}\t${NSL_V}\t600\t4\t*\t@T00\t-" >> $NSL
	fi
	
	#replace whatever we may have with whatever we need, eg:
	#/var/www/html/roundcube/logs/errors	webapps:webapps	600     4       *       @T00    -
	#/var/www/html/roundcube/logs/errors	apache:apache	600     4       *       @T00    -
	#/var/www/html/roundcube/logs/errors			600     4       *       @T00    -
	
	perl -pi -e "s|^${NSL_L}\s+webapps:webapps\s+|${NSL_L}\t${NSL_V}\t|" ${NSL}
	perl -pi -e "s|^${NSL_L}\s+apache:apache\s+|${NSL_L}\t${NSL_V}\t|" ${NSL}
	perl -pi -e "s|^${NSL_L}\s+600\s+|${NSL_L}\t${NSL_V}\t600\t|" ${NSL}
}

ensure_dovecot_logrotate()
{
	if [ ${OS} = "FreeBSD" ]; then
		#by default it sets each log to webapps:webapps.
		#swap it to apache:apache if needed
		#else swap it to webapps:webapps from apache:apache.. or nothing

		NSL_VALUE=root:root

		freebsd_set_newsyslog /var/log/dovecot-lmtp-errors.log ${NSL_VALUE};
		freebsd_set_newsyslog /var/log/dovecot-lmtp.log ${NSL_VALUE};
		
		return;
	fi
	
	cd ${CWD};
	
	WL=/etc/logrotate.d/dovecot
	
	if [ ! -s ${WL} ]; then
		getFile dovecot.logrotate dovecot_logrotate
	
		CWL=${CWD}/dovecot.logrotate
		if [ ! -s ${CWL} ]; then
			echo "Download of $CWL failed";
			return;
		fi

		cp -f ${CWL} ${WL}
		chmod 644 ${WL}
	fi
}

ensure_dovecot_dh() {
	if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -ge 0 ]; then
		echo "ensuring ssl_dh";
		SSL_DH=/etc/dovecot/dh.pem
		if [ ! -s ${SSL_DH} ]; then
			dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dh -inform der > ${SSL_DH}
		fi

		D_SSL=/etc/dovecot/conf/ssl.conf
		if [ ! -e ${D_SSL} ]; then
			D_SSL=/etc/dovecot/dovecot.conf
		fi

		if [ -e $D_SSL ]; then
			C=`grep -c ssl_dh ${D_SSL}`
			if [ -s ${SSL_DH} ] && [ "$C" -eq 0 ]; then
				echo "adding ssl_dh to ${D_SSL}";
				echo "ssl_dh=<${SSL_DH}" >> ${D_SSL}
			fi

			C=`grep -c ssl_protocols ${D_SSL}`
			if [ "${C}" -gt 0 ]; then
				echo "swapping ssl_protocols to be ssl_min_protocols in ${D_SSL}"
				perl -pi -e 's/^ssl_protocols = .*/ssl_min_protocol = TLSv1/' ${D_SSL}
			fi
		fi
	fi
}

doDovecot() {
	updateDovecot;
	if [ "${DOVECOT_OPT}" != "yes" ]; then
		echo "You cannot install Dovecot, because you do not have it set in options.conf file.";
		exit 1;
	fi

	quitIfLocked doDovecot
	
	if [ "${DOVECOT_OPT}" = "no" ]; then
		do_exit 1 "Dovecot is not set in options.conf."
	fi

	if [ ! -e ${WORKDIR}/dovecot-${DOVECOT_VER}.tar.gz ]; then
		do_exit 1 "File dovecot-${DOVECOT_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
	fi

        COUNT=`grep -c -e '^dovecot=1' ${DACONF_FILE}`
        if [ ${COUNT} -eq 0 ] || [ ! -e ${DACONF_FILE} ]; then
		echo "Converting to dovecot (${DOVECOT_VER}) ...";
                convertToDovecot;
        fi

	echo "Installing dovecot ${DOVECOT_VER} ...";

	addUserGroup dovecot dovecot

        cd ${CWD};
        FILE=${CWD}/dovecot-${DOVECOT_VER}.tar.gz
        checkFile ${FILE}
        echo "Extracting ...";
        tar xzf ${FILE} --no-same-owner
        echo "Done.";

	if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -eq 0 ] && [ -d dovecot-ce-${DOVECOT_VER} ]; then
		cd dovecot-ce-${DOVECOT_VER}
	else
		cd dovecot-${DOVECOT_VER}
	fi

	echo "Patching syslog with LOG_PID ...";

	perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/auth/main.c
	perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/imap/main.c
	perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/master/main.c
	perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/pop3/main.c

	perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/lib-master/master-service.c

	echo "Configuring dovecot ${DOVECOT_VER} ...";

	./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --without-gssapi
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure dovecot.\n";
		do_exit 1;
	fi
	echo "Done Configuration.";

        while
        echo "Trying to make dovecot..."
        do
        {
        	if [ "${OS}" = "FreeBSD" ]; then
			gmake CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
		else
			make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
		fi

		#make

                if [ $? -ne 0 ]
                then
                        if [ ${USER_INPUT} -eq 1 ]; then
                                $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
                                read yesno;
                                echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";

	echo "Installing ...";

	make install
	removeLockfile
	cd ${CWD}
	
	touch /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log
        chown root:root /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log
        chmod 600 /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log	

	#install the boot scripts.

	if [ "${OS}" = "FreeBSD" ]; then
		if [ ! -e /usr/local/etc/rc.d/dovecot ]; then
			cp ${CWD}/dovecot.boot.freebsd /usr/local/etc/rc.d/dovecot
			chmod 755 /usr/local/etc/rc.d/dovecot
			echo "./dovecot \$1" >> /usr/local/etc/rc.d/boot.sh
		fi
	elif [ -e /etc/debian_version ]; then
	        if [ ! -e /etc/init.d/dovecot ]; then
                        cp ${CWD}/dovecot.boot.debian /etc/init.d/dovecot
                        chmod 755 /etc/init.d/dovecot
			update-rc.d dovecot defaults
                fi
		if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then
			getFile da_exim-cert-config
			/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config
			chown mail:mail /etc/exim.cert /etc/exim.key
			chmod 600 /etc/exim.cert /etc/exim.key

			#ln -sf /etc/httpd/conf/ssl.crt/server.crt /etc/exim.cert
			#ln -sf /etc/httpd/conf/ssl.key/server.key /etc/exim.key
		fi
	else
		if [ ! -e /etc/init.d/dovecot ]; then
			cp ${CWD}/dovecot.boot /etc/init.d/dovecot
			chmod 755 /etc/init.d/dovecot
			/sbin/chkconfig dovecot on
		fi
	fi

	if [ ! -d /etc/dovecot ]; then
	    mkdir -p /etc/dovecot
	fi
	
	CONF_VER=0
	INST_CONF=0
	if [ -e /etc/dovecot.conf ]; then
		CONF_VER=`cat /etc/dovecot.conf | head -n1 | awk '{print $3}'`
	else
		INST_CONF=1
	fi

        INST_VER=`echo "$DOVECOT_VER" | cut -d. -f1`
        
        if [ "$INST_VER" = "2" ] && [ ! -e /etc/dovecot/dovecot.conf ]; then
        	INST_CONF=1
        fi
        
        if [ "$INST_VER" = "2" ] && [ "$CONF_VER" != "2.0" ]; then
        	INST_CONF=1
        fi

        if [ "$INST_VER" = "1" ] && [ "$CONF_VER" = "2.0" ]; then
        	INST_CONF=1
        fi

	#install the dovecot.conf        
	if [ "$INST_CONF" -eq 1 ]; then
		if [ "$INST_VER" = "2" ]; then
			getFile dovecot.conf.2.0
			mv -f ${CWD}/dovecot.conf.2.0 /etc/dovecot/dovecot.conf
			if [ ! -L /etc/dovecot.conf ]; then
				mv -f /etc/dovecot.conf /etc/dovecot.conf.1.2
				ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf
			fi
		else
			getFile dovecot.conf
			mv -f ${CWD}/dovecot.conf /etc/dovecot.conf	
		fi
	fi

	if [ "${OS}" = "FreeBSD" ]; then
		DC=/etc/dovecot.conf
		if [ -L /etc/dovecot.conf ]; then
			DC=/etc/dovecot/dovecot.conf
		fi

		perl -pi -e 's/driver = shadow/driver = passwd/' ${DC}
		perl -pi -e 's/passdb shadow/passdb passwd/' ${DC}
	fi

	#perl -pi -e 's/mail_extra_groups/mail_access_groups/' /etc/dovecot.conf

	#dovecot 1.1+
	#perl -pi -e 's|default_mail_env|mail_location|' /etc/dovecot.conf
	#perl -pi -e 's|args = /etc/virtual/%d/passwd|args = username_format=%n /etc/virtual/%d/passwd|' /etc/dovecot.conf

	#dovecot 1.2.0+
	#perl -pi -e 's/^umask/#umask/' /etc/dovecot.conf

	ensure_dovecot_dh

	ensure_dovecot_logrotate;

	echo "Restarting dovecot."
	${INITDDIR}/dovecot restart
}

####################################################

doLibs()
{
	downloadMake Digest
	downloadMake Digest-SHA1
	downloadMake HTML-Parser
	downloadMake Storable
	downloadMake Net-DNS
	downloadMake Net-IP
	downloadMake Net-CIDR
	downloadMake DB_File
	downloadMake Mail-SPF
	downloadMake Sys-Hostname-Long
	downloadMake Net-SSLeay
	downloadMake IO-Socket-SSL
	downloadMake URI
}

dospamassassin() {
	if [ "${SPAMASSASSIN_OPT}" = "no" ]; then
		do_exit 1 "SpamAssassin is not set in options.conf."
	fi

	getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin
	
	quitIfLocked dospamassassin
	

	if [ ! -e ${WORKDIR}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz ]; then
		do_exit 1 "File Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
	fi

	echo "Installing spamassassin ${SPAMASSASSIN_VER}...";

	cd ${CWD};
	
	#doLibs;

    FILE=${CWD}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz
    checkFile ${FILE}
    echo "Extracting ...";
    tar xzf ${FILE} --no-same-owner
    echo "Done.";
    cd Mail-SpamAssassin-${SPAMASSASSIN_VER}

	echo "Configuring SpamAssassin ${SPAMASSASSIN_VER}...";

	export LANG=C
	perl Makefile.PL PREFIX=/usr CONTACT_ADDRESS="the administrator of that system" RUN_NET_TESTS="no"
	
	if [ $? -ne 0 ]
	then
		$ECHO -e "\n*** There was an error while trying to configure SpamAssassin.\n";
		do_exit 1;
	fi
	
	echo "Done Configuration.";

        while
        echo "Trying to make SpamAssassin..."
        do
        {
		make

                if [ $? -ne 0 ]
                then                
			echo "";
			echo "If needed, use cpan to install the missing modules, eg:";
			echo "  cpan -i Archive::Tar Digest::SHA Mail::SPF IP::Country Net::Ident IO::Socket::INET6 Compress::Zlib Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect ExtUtils::MakeMaker";
			echo "";
			echo "Press enter to answer [yes] if it asks you to install dependencies (it will prepend them to the queue)";
			echo "Answer no if it asks: Are you ready for manual configuration? [yes] no";
			echo "";
                
                        if [ ${USER_INPUT} -eq 1 ]; then
                                $ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
                                read yesno;
                                echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";

	echo "Installing ...";

	make install
	removeLockfile
	cd ${CWD}

	## we need to change how it's started.
	if [ -e /etc/init.d/exim ]; then
		perl -pi -e 's#/usr/bin/spamd -d -a -c -m 5#/usr/bin/spamd -d -c -m 15#' /etc/init.d/exim
	fi
	if [ -e /usr/local/etc/rc.d/exim ]; then
		perl -pi -e 's#/usr/bin/spamd -d -a -c -m 5#/usr/bin/spamd -d -c -m 15#' /usr/local/etc/rc.d/exim
	fi
	
	echo "Running sa-update."
	if [ -e /usr/bin/sa-update ]; then
		/usr/bin/sa-update --nogpg
	else
		echo "Cannot find /usr/bin/sa-update after install. Check for errors above.";
	fi

	echo "Starting SpamAssassin."
	/usr/bin/spamd -d -c -m 15

	echo "Restarting exim."
	${INITDDIR}/exim restart
	
	ldconfig
}

####################################################

create_symlinks_for_binaries(){
	if [ -e $1 ] && [ -e $2 ] && [ ! -h $2 ]; then
		echo "Symlinking $1 to $2..."
		mv -f $2 $2_backup
		ln -sf $1 $2
	fi
}

doclamav() {
	if [ "${CLAMAV_OPT}" = "no" ]; then
		do_exit 1 "ClamAV is not set in options.conf."
	fi

	getFile clamav-${CLAMAV_VER}.tar.gz clamav
	getFile clamd
	getFile clamd_freebsd
	getFile clamd_debian
	getFile freshclam
	getFile freshclam_freebsd
	getFile freshclam_debian

	quitIfLocked doclamav

	if [ ! -e ${WORKDIR}/clamav-${CLAMAV_VER}.tar.gz ]; then
		do_exit 1 "File clamav-${CLAMAV_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
	fi

	echo "Installing clamav ${CLAMAV_VER} ...";
	
	CLAMD_CONF=1
	if [ ! -e /etc/clamd.conf ]; then
		CLAMD_CONF=0
	fi
	
	FRESHCLAM_CONF=1
	if [ ! -e /etc/freshclam.conf ]; then
		FRESHCLAM_CONF=0
	fi
	
	addUserGroup clamav clamav
	mkdir -p /var/run/clamd
	chown -R clamav.clamav /var/run/clamd
	chmod 700 /var/run/clamd
	
	cd ${CWD};
	FILE=${CWD}/clamav-${CLAMAV_VER}.tar.gz
	checkFile ${FILE}
	echo "Extracting ...";
	tar xzf ${FILE} --no-same-owner
	echo "Done.";
	cd clamav-${CLAMAV_VER}

	echo "Configuring clamav ${CLAMAV_VER} ...";

	./configure --prefix=/usr/local --sysconfdir=/etc --with-xml=/usr/local --with-zlib=/usr
	if [ $? -ne 0 ]
	then
		echo -e "\n*** There was an error while trying to configure clamav.\n";
		do_exit 1;
	fi
	echo "Done Configuration.";

        while
        echo "Trying to make clamav..."
        do
        {
		make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}

		#make

                if [ $? -ne 0 ]
                then
                        if [ ${USER_INPUT} -eq 1 ]; then
                                echo -e "\n*** The make has failed, do you want to try to make again? (y,n): ";
                                read yesno;
                                echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";

        echo "Cleaning old libraries up..."
        if [ "${B64}" = "1" ]; then
	  rm -f /usr/local/lib64/libclam*
        else
	  rm -f /usr/local/lib/libclam*
        fi
        
	echo "Installing ...";

	make install
	removeLockfile
	ldconfig
	cd ${CWD}

	#install the boot scripts.
	if [ ! -e ${INITDDIR}/clamd ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/clamd_freebsd ${INITDDIR}/clamd
			chmod 755 ${INITDDIR}/clamd
		elif [ -e /etc/debian_version ]; then
			cp ${CWD}/clamd_debian ${INITDDIR}/clamd
			chmod 755 ${INITDDIR}/clamd
			update-rc.d clamd defaults
		else
			cp ${CWD}/clamd ${INITDDIR}/clamd
			chmod 755 ${INITDDIR}/clamd
			/sbin/chkconfig clamd on
		fi
	fi
	
	if [ ! -e ${INITDDIR}/freshclam ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/freshclam_freebsd ${INITDDIR}/freshclam
			chmod 755 ${INITDDIR}/freshclam
		elif [ -e /etc/debian_version ]; then
			cp ${CWD}/freshclam_debian ${INITDDIR}/freshclam
			chmod 755 ${INITDDIR}/freshclam
			update-rc.d freshclam defaults
		else
			cp ${CWD}/freshclam ${INITDDIR}/freshclam
			chmod 755 ${INITDDIR}/freshclam
			/sbin/chkconfig freshclam on
		fi
	fi

	perl -pi -e 's#/usr/sbin/clamd#/usr/local/sbin/clamd#' ${INITDDIR}/clamd
	perl -pi -e 's#/usr/bin/freshclam#/usr/local/bin/freshclam#' ${INITDDIR}/freshclam
	
	if [ "${OS}" != "FreeBSD" ]; then
		if [ ! -d /var/run/clamd ]; then
			mkdir /var/run/clamd
		fi
	fi

	#Ensure ClamAV Database
	USC=/usr/local/share/clamav
	if [ ! -d $USC ]; then
		mkdir -p $USC
		chown clamav:clamav $USC
	fi

	if [ ! -s $USC/daily.cld ]; then
		/usr/local/bin/freshclam -v
	fi

	#Symlink /usr/bin binaries to /usr/local/bin
	create_symlinks_for_binaries /usr/local/bin/clamav-config /usr/bin/clamav-config;
	create_symlinks_for_binaries /usr/local/bin/clambc /usr/bin/clambc;
	create_symlinks_for_binaries /usr/local/bin/clamconf /usr/bin/clamconf;
	create_symlinks_for_binaries /usr/local/bin/clamdscan /usr/bin/clamdscan;
	create_symlinks_for_binaries /usr/local/bin/clamscan /usr/bin/clamscan;
	create_symlinks_for_binaries /usr/local/bin/freshclam /usr/bin/freshclam;
	create_symlinks_for_binaries /usr/local/sbin/clamd /usr/sbin/clamd;
	
	#make clamd.conf and freshclam.conf ready
	if [ ${CLAMD_CONF} -eq 0 ]; then
		if [ ! -s /etc/clamd.conf ] && [ -s /etc/clamd.conf.sample ]; then
			cp -f /etc/clamd.conf.sample /etc/clamd.conf
		fi
		perl -pi -e 's|Example|#Example|' /etc/clamd.conf
		perl -pi -e 's|#PidFile /var/run/clamd.pid|PidFile /var/run/clamd/clamd.pid|' /etc/clamd.conf
		perl -pi -e 's|#TCPSocket 3310|TCPSocket 3310|' /etc/clamd.conf
		perl -pi -e 's|#TCPAddr 127.0.0.1|TCPAddr 127.0.0.1|' /etc/clamd.conf
		perl -pi -e 's|#LocalSocket /tmp/clamd.socket|LocalSocket /tmp/clamd.socket|' /etc/clamd.conf
	fi
	if [ ${FRESHCLAM_CONF} -eq 0 ]; then
		if [ ! -s /etc/freshclam.conf ] && [ -s /etc/freshclam.conf.sample ]; then
			cp -f /etc/freshclam.conf.sample /etc/freshclam.conf
		fi
		perl -pi -e 's|Example|#Example|' /etc/freshclam.conf
		perl -pi -e 's|#LogSyslog yes|LogSyslog yes|' /etc/freshclam.conf
		perl -pi -e 's|#PidFile /var/run/freshclam.pid|PidFile /var/run/clamd/freshclam.pid|' /etc/freshclam.conf
		perl -pi -e 's|#Checks 24|#Checks 24|' /etc/freshclam.conf
		perl -pi -e 's|#NotifyClamd /path/to/clamd.conf|#NotifyClamd /etc/clamd.conf|' /etc/freshclam.conf
	fi
	
	if [ -e ${SERVICES} ];	then
		CLAMD_MONITOR=`grep -c clamd ${SERVICES}`
		if [ ${CLAMD_MONITOR} -eq 0 ]; then
			echo 'clamd=ON' >> ${SERVICES};
		fi
		FRESHCLAM_MONITOR=`grep -c freshclam ${SERVICES}`
		if [ ${FRESHCLAM_MONITOR} -eq 0 ]; then
			echo 'freshclam=ON' >> ${SERVICES};
		fi
	fi
	
	echo "Restarting freshclam."
	${INITDDIR}/freshclam restart
	
	echo "Restarting clamd."
	${INITDDIR}/clamd restart
	
	echo "Restarting exim."
	${INITDDIR}/exim restart

	echo "Done ClamAV.";
	
}

####################################################

domailman() {
	if [ "${MAILMAN_OPT}" = "no" ]; then
		do_exit 1 "Mailman is not set in options.conf."
	fi

	getFile mailman-${MAILMAN_VER}.tgz mailman
	getFile mailman
	getFile mailman_freebsd
	getFile mailman_debian

	quitIfLocked mailman
	touch ${WORKDIR}/.custombuild

	if [ ! -s ${WORKDIR}/mailman-${MAILMAN_VER}.tgz ]; then
		do_exit 1 "File mailman-${MAILMAN_VER}.tgz does not exist. Try running ${boldon}./build update.${boldoff}"
	fi

	echo "Installing mailman ${MAILMAN_VER} ...";
	
	MM_CFG=1
	if [ ! -e /usr/local/mailman/Mailman/mm_cfg.py ]; then
		MM_CFG=0
	fi
	
	#Mailman requirements
	addUserGroup mailman mailman
	mkdir -p /usr/local/mailman
	chown mailman:mailman /usr/local/mailman
	chmod 02775 /usr/local/mailman
	
    cd ${CWD};
    FILE=${CWD}/mailman-${MAILMAN_VER}.tgz
    checkFile ${FILE}
    echo "Extracting ...";
    tar xzf ${FILE} --no-same-owner
    echo "Done.";
    cd mailman-${MAILMAN_VER}

	echo "Configuring Mailman ${MAILMAN_VER} ...";

	./configure --with-cgi-gid=apache
	if [ $? -ne 0 ]
	then
		echo -e "\n*** There was an error while trying to configure mailman.\n";
		do_exit 1;
	fi
	echo "Done Configuration.";

        while
        echo "Trying to make mailman..."
        do
        {
		make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}

		#make

                if [ $? -ne 0 ]
                then
                        if [ ${USER_INPUT} -eq 1 ]; then
                                echo -e "\n*** The make has failed, do you want to try to make again? (y,n): ";
                                read yesno;
                                echo "";
                        else
                                if [ "${INPUT_VALUE}" = "d" ]; then
                                        yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                        fi

                        if [ "${yesno}" = "n" ]
                        then
                                do_exit 0;
                        fi
                else
                        break;
                fi
        }
        done
        echo "Make complete";

	echo "Installing ...";

	make install
	removeLockfile
	ldconfig
	cd ${CWD}

	#install the boot scripts.
	if [ ! -e ${INITDDIR}/mailmanctl ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/mailmanctl_freebsd ${INITDDIR}/mailmanctl
			chmod 755 ${INITDDIR}/mailmanctl
		elif [ -e /etc/debian_version ]; then
			cp ${CWD}/mailmanctl_debian ${INITDDIR}/mailmanctl
			chmod 755 ${INITDDIR}/mailmanctl
			update-rc.d mailmanctl defaults
		else
			cp ${CWD}/mailmanctl ${INITDDIR}/mailmanctl
			chmod 755 ${INITDDIR}/mailmanctl
			/sbin/chkconfig mailmanctl on
		fi
	fi

	# It's up to you how to use the file (DA should manage it)
	#	if [ ${MM_CFG} -eq 0 ]; then
	#    echo 'DEFAULT_EMAIL_HOST = \'mail.domain.com\'' >> ${MM_CFG}
	#    echo 'DEFAULT_URL_HOST = \'www.domain.com\'' >> ${MM_CFG}
	#    echo 'IMAGE_LOGOS = \'/mailman_images/\'' >> ${MM_CFG}
	#    echo 'add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)' >> ${MM_CFG}
	#    echo 'VIRTUAL_HOSTS = {\'www.example.com\': \'example.com\',' >> ${MM_CFG}
	#    echo '                 \'www.example2.com\': \'example2.com\'}' >> ${MM_CFG}
	#	echo '#Syntax is {virt ":" real "," virt ":" real}' >> ${MM_CFG}
	#	fi

	#Changes for suexec (fixing "error: directory is writable by others")
	chmod 755 /usr/local/mailman/cgi-bin
	chmod u-s,g-s /usr/local/mailman/cgi-bin/*
	chmod 777 /usr/local/mailman/logs
	chown -R mailman:mailman /usr/local/mailman

	RANDOM_PASS="`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`";
	DA_HOSTNAME=`hostname`
	
	#Create a mailman list
	/usr/local/mailman/bin/newlist -q -e ${DA_HOSTNAME} mailman mailman@${DA_HOSTNAME} ${RANDOM_PASS}
	echo "Password of the mailman mailing list: ${RANDOM_PASS}"
	#Apply template to the sitelist
	/usr/local/mailman/bin/config_list -i /usr/local/mailman/data/sitelist.cfg mailman
	
	#Add mailman mailing list to /etc/aliases (required by mailman)
	COUNT_MAILMAN=`grep -c mailman /etc/aliases`
	if [ ${COUNT_MAILMAN} -eq 0 ]; then
		echo '## mailman mailing list' >> /etc/aliases
		echo 'mailman:              "|/usr/local/mailman/mail/mailman post mailman"' >> /etc/aliases
		echo 'mailman-admin:        "|/usr/local/mailman/mail/mailman admin mailman"' >> /etc/aliases
		echo 'mailman-bounces:      "|/usr/local/mailman/mail/mailman bounces mailman"' >> /etc/aliases
		echo 'mailman-confirm:      "|/usr/local/mailman/mail/mailman confirm mailman"' >> /etc/aliases
		echo 'mailman-join:         "|/usr/local/mailman/mail/mailman join mailman"' >> /etc/aliases
		echo 'mailman-leave:        "|/usr/local/mailman/mail/mailman leave mailman"' >> /etc/aliases
		echo 'mailman-owner:        "|/usr/local/mailman/mail/mailman owner mailman"' >> /etc/aliases
		echo 'mailman-request:      "|/usr/local/mailman/mail/mailman request mailman"' >> /etc/aliases
		echo 'mailman-subscribe:    "|/usr/local/mailman/mail/mailman subscribe mailman"' >> /etc/aliases
		echo 'mailman-unsubscribe:  "|/usr/local/mailman/mail/mailman unsubscribe mailman"' >> /etc/aliases
	fi

# Needs an exception in DA binary to function, because the process is python, which is calling mailmanctl	
#	if [ -e ${SERVICES} ];	then
#		MAILMANCTL_MONITOR=`grep -c mailmanctl ${SERVICES}`
#		if [ ${MAILMANCTL_MONITOR} -eq 0 ]; then
#			echo 'mailmanctl=ON' >> ${SERVICES};
#		fi
#	fi
	
	echo "Restarting Exim."
	${INITDDIR}/exim restart
	
	echo "Restarting Mailman."
	${INITDDIR}/mailman restart

	echo "Done Mailman.";
	
}

####################################################

doPhpConf() {
	# Writing data to phpopt
	echo "${PHPOPT}" > ${WORKDIR}/phpopt

	# Writing data to httpd-php-handlers.conf
	echo -n "" > ${PHP_HANDLERS_HTTPD}
	echo '<FilesMatch "\.(inc|php|php3|php4|php5|php6|phtml|phps)$">' >> ${PHP_HANDLERS_HTTPD}

	if [ "${PHPOPT}" = "1" ] || [ "${PHPOPT}" = "4" ]; then
		if [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" = "6" ]; then
			echo "AddHandler application/x-httpd-php .inc .php .php6 .phtml" >> ${PHP_HANDLERS_HTTPD}
		elif [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" != "6" ]; then
			echo "AddHandler application/x-httpd-php .inc .php6 .phtml" >> ${PHP_HANDLERS_HTTPD}
		elif [ "${PHPOPT}" = "4" ]; then
			echo "AddHandler application/x-httpd-php .inc .php .php6 .phtml" >> ${PHP_HANDLERS_HTTPD}
		fi
		echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD}
	fi

	if [ "${PHPOPT}" = "2" ] || [ "${PHPOPT}" = "6" ]; then
		if [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" = "5" ]; then
			echo "AddHandler application/x-httpd-php .inc .php .php5 .phtml" >> ${PHP_HANDLERS_HTTPD}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" != "5" ]; then
			echo "AddHandler application/x-httpd-php .inc .php5 .phtml" >> ${PHP_HANDLERS_HTTPD}
		elif [ "${PHPOPT}" = "6" ]; then
			echo "AddHandler application/x-httpd-php .inc .php .php3 .php4 .php5 .php6 .phtml" >> ${PHP_HANDLERS_HTTPD}
		fi
		echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD}
	fi

	echo '</FilesMatch>' >> ${PHP_HANDLERS_HTTPD}

	echo "AddType text/html .php" >> ${PHP_HANDLERS_HTTPD}

	if [ "${PHPOPT}" = "1" ] || [ "${PHPOPT}" = "2" ] || [ "${PHPOPT}" = "3" ] || [ "${PHPOPT}" = "5" ] || [ "${PHPOPT}" = "7" ]; then
		# Writing data to suphp.conf
		echo -n "" > ${SUPHP_CONF_FILE}
		echo "[global]" >> ${SUPHP_CONF_FILE}
		echo ";Path to logfile" >> ${SUPHP_CONF_FILE}
		echo "logfile=/var/log/suphp.log" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Loglevel" >> ${SUPHP_CONF_FILE}
		echo "loglevel=warn" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";User Apache is running as" >> ${SUPHP_CONF_FILE}
		echo "webserver_user=apache" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Path all scripts have to be in" >> ${SUPHP_CONF_FILE}
		echo "docroot=/" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo "; Security options" >> ${SUPHP_CONF_FILE}
		echo "allow_file_group_writeable=false" >> ${SUPHP_CONF_FILE}
		echo "allow_file_others_writeable=false" >> ${SUPHP_CONF_FILE}
		echo "allow_directory_group_writeable=false" >> ${SUPHP_CONF_FILE}
		echo "allow_directory_others_writeable=false" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Check wheter script is within DOCUMENT_ROOT" >> ${SUPHP_CONF_FILE}
		echo "check_vhost_docroot=false" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Send minor error messages to browser" >> ${SUPHP_CONF_FILE}
		echo "errors_to_browser=true" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";PATH environment variable" >> ${SUPHP_CONF_FILE}
		echo "env_path=\"/bin:/usr/bin\"" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Umask to set, specify in octal notation" >> ${SUPHP_CONF_FILE}
		echo "umask=0022" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Minimum UID" >> ${SUPHP_CONF_FILE}
		echo "min_uid=100" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Minimum GID" >> ${SUPHP_CONF_FILE}
		echo "min_gid=100" >> ${SUPHP_CONF_FILE}
		echo "" >> ${SUPHP_CONF_FILE}
		echo "[handlers]" >> ${SUPHP_CONF_FILE}
		echo ";Handler for php-scripts" >> ${SUPHP_CONF_FILE}
		if [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" = "5" ]; then
			echo "x-httpd-php5=\"php:/usr/local/php5/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" != "5" ]; then
			echo "x-httpd-php5=\"php:/usr/local/php5/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" = "6" ]; then
			echo "x-httpd-php6=\"php:/usr/local/php6/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" != "6" ]; then
			echo "x-httpd-php6=\"php:/usr/local/php6/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "3" ]; then
			echo "x-httpd-php${ADDITPHP}=\"php:/usr/local/php${ADDITPHP}/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
			echo "x-httpd-php${DEFPHP}=\"php:/usr/local/php${DEFPHP}/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "5" ]; then
			echo "x-httpd-php6=\"php:/usr/local/php6/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		elif [ "${PHPOPT}" = "7" ]; then
			echo "x-httpd-php5=\"php:/usr/local/php5/bin/php-cgi\"" >> ${SUPHP_CONF_FILE}
		fi
		echo "" >> ${SUPHP_CONF_FILE}
		echo ";Handler for CGI-scripts" >> ${SUPHP_CONF_FILE}
		echo "x-suphp-cgi=\"execute:!self\"" >> ${SUPHP_CONF_FILE}

		# Writing data to /etc/httpd/conf/extra/httpd-suphp.conf
		echo "Writing data to ${SUPHP_HTTPD}"
		echo -n "" > ${SUPHP_HTTPD}

		echo "<IfModule mod_suphp.c>" >> ${SUPHP_HTTPD}
		echo '<FilesMatch "\.(inc|php|php3|php4|php5|php6|phtml|phps)$">' >> ${SUPHP_HTTPD}
		if [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" = "5" ]; then
			echo "AddHandler x-httpd-php5 .inc .php .php3 .php5 .phtml" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" != "5" ]; then
			echo "AddHandler x-httpd-php5 .php5" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" = "6" ]; then
			echo "AddHandler x-httpd-php6 .inc .php .php3 .php6 .phtml" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" != "6" ]; then
			echo "AddHandler x-httpd-php6 .php6" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "3" ]; then
			echo "AddHandler x-httpd-php${ADDITPHP} .php${ADDITPHP}" >> ${SUPHP_HTTPD}
			echo "AddHandler x-httpd-php${DEFPHP} .inc .php .php3 .php${DEFPHP} .phtml" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "5" ]; then
			echo "AddHandler x-httpd-php6 .inc .php .php3 .php4 .php5 .php6 .phtml" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "7" ]; then
			echo "AddHandler x-httpd-php5 .inc .php .php3 .php4 .php5 .php6 .phtml" >> ${SUPHP_HTTPD}
		fi
		echo '</FilesMatch>' >> ${SUPHP_HTTPD}

		echo "<Location />" >> ${SUPHP_HTTPD}
		echo "suPHP_Engine on" >> ${SUPHP_HTTPD}

		if [ -d /usr/local/etc/php5/cgi ]; then
			echo "suPHP_ConfigPath /usr/local/etc/php5/cgi/" >> ${SUPHP_HTTPD}
		elif [ -d /usr/local/etc/php6/cgi ]; then
			echo "suPHP_ConfigPath /usr/local/etc/php6/cgi/" >> ${SUPHP_HTTPD}
		fi
		if [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" = "5" ]; then
			echo "suPHP_AddHandler x-httpd-php5" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "1" ] && [ "${DEFPHP}" != "5" ]; then
			echo "suPHP_AddHandler x-httpd-php5" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" = "6" ]; then
			echo "suPHP_AddHandler x-httpd-php6" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "2" ] && [ "${DEFPHP}" != "6" ]; then
			echo "suPHP_AddHandler x-httpd-php6" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "3" ]; then
			echo "suPHP_AddHandler x-httpd-php${ADDITPHP}" >> ${SUPHP_HTTPD}
			echo "suPHP_AddHandler x-httpd-php${DEFPHP}" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "5" ]; then
			echo "suPHP_AddHandler x-httpd-php6" >> ${SUPHP_HTTPD}
		elif [ "${PHPOPT}" = "7" ]; then
			echo "suPHP_AddHandler x-httpd-php5" >> ${SUPHP_HTTPD}
		fi
		echo "</Location>" >> ${SUPHP_HTTPD}
		echo "</IfModule>" >> ${SUPHP_HTTPD}
		echo "Done."
	else
		echo -n "" > ${SUPHP_HTTPD}
	fi
}

####################################################

doPhp(){
	if [ ! -e /usr/local/lib/libxml2.so ]; then
		if [ ! -e /usr/lib/libxslt.so ]; then
			doLibxml2;
		fi
	fi

	if [ ! -e /usr/local/lib/libxslt.so ]; then
		if [ ! -e /usr/lib/libxslt.so ]; then
			doLibxslt;
		fi
	fi

	if [ ! -d /etc/httpd/conf/extra ]; then
        if [ "${APACHE_OPT}" = "1.3" ]; then
                doApache;
        elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		checkLibz;
                doApache2;
        fi
	fi

	#just double check the location of libmysqlclient.so
	if [ -e /usr/lib64 ]; then
		if [ ! -e /usr/lib64/mysql/libmysqlclient.so ] && [ -e /usr/lib64/libmysqlclient.so ]; then
			ln -s ../libmysqlclient.so /usr/lib64/mysql/libmysqlclient.so
		fi
	fi	

        #if [ -e /etc/fedora-release ]; then
        if [ -e /usr/lib/libmysqlclient.so ] && [ ! -e /usr/lib/mysql/libmysqlclient.so ]; then
                ln -s /usr/lib/libmysqlclient.so /usr/lib/mysql/libmysqlclient.so
        fi
        #fi
	
	doApacheCheck;
	PHPMODULES=${HTTPDCONF}/extra/httpd-phpmodules.conf
	PHPADDMODULES=${HTTPDCONF}/extra/httpd-phpaddmodules.conf
	
	echo -n "" > ${PHPMODULES}
	echo -n "" > ${PHPADDMODULES}
	
	if [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=1
		if [ ! -s ${SUPHP_SO} ]; then
			doSuPhp
		fi
		doPhp6;
		doPhp5_suphp;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php5/\#AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php4/#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php4/#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php6/AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php6/LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php6_module		/usr/lib/apache/libphp6.so" >> ${PHPMODULES}
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php6.c"	>> ${PHPADDMODULES}
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		PHPOPT=2
		if [ ! -s ${SUPHP_SO} ]; then
			doSuPhp
		fi
		doPhp6_suphp;
		doPhp5;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php4/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php4/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php6/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php6/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php5/AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php5/LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php5_module		/usr/lib/apache/libphp5.so" >> ${PHPMODULES}
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php5.c"	>> ${PHPADDMODULES}
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=3
		if [ ! -s ${SUPHP_SO} ]; then
			doSuPhp
		fi
		doPhp6_suphp;
		doPhp5_suphp;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CLI_OPT}" = "yes" ] && [ "${PHP5_CGI_OPT}" = "no" ]; then
		PHPOPT=4
		doPhp6;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_suphp/\#AddModule mod_suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php5/\#AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_suphp.c/\#AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php4/#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php6/AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php4/#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php6/LoadModule php6/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php6_module		/usr/lib/apache/libphp6.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php6.c"	>> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "no" ]; then
		PHPOPT=5
		if [ ! -s ${SUPHP_SO} ]; then
			doSuPhp
		fi
		doPhp6_suphp;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	elif [ "${PHP6_CGI_OPT}" = "no" ] && [ "${PHP5_CLI_OPT}" = "yes" ]; then
		PHPOPT=6
		doPhp5;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_suphp/\#AddModule mod_suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php6/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_php4/\#AddModule mod_php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^AddModule mod_suphp.c/\#AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php4/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php6/\#LoadModule php6/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_php5/AddModule mod_php5/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#LoadModule php5/LoadModule php5/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	php5_module		/usr/lib/apache/libphp5.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_php5.c"	>> ${PHPADDMODULES}
	elif [ "${PHP6_CLI_OPT}" = "no" ] && [ "${PHP5_CGI_OPT}" = "yes" ]; then
		PHPOPT=7
		if [ ! -s ${SUPHP_SO} ]; then
			doSuPhp
		fi
		doPhp5_suphp;
		# Change httpd.conf info
		perl -pi -e 's/^AddModule mod_php/\#AddModule mod_php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /usr/local/directadmin/data/templates/httpd.conf
		perl -pi -e 's/^\#LoadModule suphp/LoadModule suphp/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^\#AddModule mod_suphp.c/AddModule mod_suphp.c/' /etc/httpd/conf/httpd.conf
		# Add to httpd-phpmodules.conf
		echo "LoadModule	suphp_module		/usr/lib/apache/mod_suphp.so" >> ${PHPMODULES}
		# Add to httpd-phpaddmodules.conf
		echo "AddModule	mod_suphp.c" >> ${PHPADDMODULES}
	else
		do_exit 1 "Something is wrong with your ${OPTIONS_CONF}"
	fi

	if [ "${NEWCONFIGS}" = "1" ]; then
		perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
		perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
	fi
	
	doPhpConf;

	echo "Rewriting all users httpd.conf files, please wait...";
	echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
	/usr/local/directadmin/dataskq d

	if [ "${PHP5_CGI_OPT}" = "yes" ] && [ "${PHP6_CLI_OPT}" = "no" ]; then
		ln -sf /usr/local/php5/bin/php /usr/local/bin/php
	elif [ "${PHP6_CGI_OPT}" = "yes" ] && [ "${PHP5_CLI_OPT}" = "no" ]; then
		ln -sf /usr/local/php6/bin/php /usr/local/bin/php
	fi

	if [ -s /usr/local/bin/php ] && [ ! -e /bin/php ]; then
		ln -s /usr/local/bin/php /bin/php
	fi

	echo "Restarting apache."
	${INITDDIR}/httpd restart
}

####################################################

secure_php(){
	secure_phpini ${PHP_INI};
	secure_phpini ${PHP_INI_SUPHP5};
	secure_phpini ${PHP_INI_SUPHP6};
	echo "PHP has been secured."
}

####################################################

compile_coreutils() {
	if [ "${JAIL_OPT}" != "yes" ]; then
		echo "You cannot install jail environment, because you do not have it set in options.conf file.";
		exit 1;
	fi
	
	cd ${CWD};
	getFile coreutils-${COREUTILS_VER}.tar.gz
	if [ $OS = "FreeBSD" ]; then
		cp -f /usr/bin/su ./jail/su
		cd ${CWD}
		return;
	fi

	NAME=coreutils-${COREUTILS_VER}
	FILE=${NAME}.tar.gz
	
	if [ ! -e $FILE ]; then
		echo "Cannot find $FILE.  Run './build update_data'";
		cd ${CWD}
		return; 
	fi

	tar xzf $FILE --no-same-owner;

	cd $NAME;
	./configure
	
	if [ $? -ne 0 ]; then
		$ECHO -e "\n*** The configure has failed ***";
		cd ${CWD}
		return;
	fi

	make
	cd src
	make su
	
	if [ $? -ne 0 ]; then
		$ECHO -e "\n*** The make has failed ***";
		cd ${CWD}
		return;
	fi

	cd ..

	cp -f ./src/su ../jail/su
}

####################################################

compile_shell() {
	if [ "${JAIL_OPT}" != "yes" ]; then
		echo "You cannot install jail environment, because you do not have it set in options.conf file.";
		exit 1;
	fi

	cd ${CWD};

	getFile jail-${JAIL_VER}.tar.gz jail
	tar xzf jail-${JAIL_VER}.tar.gz --no-same-owner
		
	if [ ! -d ${JAIL_DIR} ]; then
		mkdir -p ${JAIL_DIR}
	fi
	cd ${JAIL_DIR};

	gcc -o jail chrootshell.c
	
	if [ $? -ne 0 ]; then
		$ECHO -e "\n*** The make has failed ***";
		cd ${CWD};
		return;
	fi

	cp -f jail /bin/jail
	chmod 6755 /bin/jail

	COUNT=`grep -c '/bin/jail' $SHELLS`;
	if [ $COUNT -eq 0 ]; then
		echo "/bin/jail" >> $SHELLS;
	fi
}

####################################################

compile_nbsmtp() {
	if [ "${JAIL_OPT}" != "yes" ]; then
		echo "You cannot install jail environment, because you do not have it set in options.conf file.";
		exit 1;
	fi
	
	cd ${CWD};
	getFile nbsmtp-${NB_SMTP_VER}.tar.gz
	FILE=nbsmtp-${NB_SMTP_VER}.tar.gz

	tar xzf $FILE --no-same-owner
	cd nbsmtp-${NB_SMTP_VER}
	./configure
	make
        if [ $? -ne 0 ]; then
        	$ECHO -e "\n*** The make has failed ***";
			cd ${JAIL_DIR};
        	return;
        fi

	cp nbsmtp ../jail/nbsmtp
}

####################################################

doProftpd(){
	if [ "${PROFTPD_OPT}" != "yes" ]; then
		echo "You cannot install ProFTPD, because you do not have it set in options.conf file.";
		exit 1;
	fi

	getFile proftpd-${PROFTPD_VER}.tar.gz proftpd
	getFile proftpd
	getFile proftpd_freebsd
	getFile proftpd_debian

	quitIfLocked doProftpd
	
	# Setting a new temp dir (in case /tmp is noexec,nosuid)
	if [ "${OS}" = "FreeBSD" ]; then
		TDIR=/root/.pkg.tmp
		mkdir -p $TDIR
		setenv PKG_TMPDIR $TDIR
	fi
	cd ${CWD};
	FILE=${CWD}/proftpd-${PROFTPD_VER}.tar.gz
	checkFile ${FILE};
	echo "Extracting ${FILE}...";

	tar xzf ${FILE} --no-same-owner
	chown -R root:${ROOT_GRP} proftpd-${PROFTPD_VER}
	cd proftpd-${PROFTPD_VER}

	# Backup ProFTPD config
	rm -f /etc/proftpd.conf.old
	cp /etc/proftpd.conf /etc/proftpd.conf.old

	#swap prefix for freebsd
	if [ "$OS" = "FreeBSD" ]; then
		perl -pi -e "s#prefix=/usr #prefix=$PROFTPD_PREFIX #" ${CWD}/${PROFTPD_CONFIGURE}

		if [ "${PROFTPD_CONFIGURE}" = "configure/proftpd/configure.proftpd" ]; then
			perl -pi -e 's/enable-nls/disable-nls/' ${CWD}/${PROFTPD_CONFIGURE}
		fi

	fi

	echo "Configuring proftpd-${PROFTPD_VER}...";
	${CWD}/${PROFTPD_CONFIGURE}

	echo "Done. Making proftpd-${PROFTPD_VER}...";
	while
	echo "Trying to make ProFTPD..."
	do
	{
                if [ "${OS}" = "FreeBSD" ]; then
                        /usr/local/bin/gmake -j ${CPU_CORES}
                else
			make -j ${CPU_CORES}
		fi

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
			 else
                                if [ "${INPUT_VALUE}" = "d" ]; then
					yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                         fi

			 if [ "${yesno}" = "n" ]
			 then
				do_exit 0;
			 fi
		else
			break;
		fi
	}
	done
	echo "Make complete";

	echo "Installing proftpd-${PROFTPD_VER}...";
	make install
	
	if [ ! -e ${INITDDIR}/proftpd ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/proftpd_freebsd ${INITDDIR}/proftpd
			chmod 755 ${INITDDIR}/proftpd
		elif [ -e /etc/debian_version ]; then
			mkdir -p /var/run/proftpd
			mkdir -p /var/lock/subsys
			cp ${CWD}/proftpd_debian ${INITDDIR}/proftpd
			chmod 755 ${INITDDIR}/proftpd
			update-rc.d proftpd defaults
			if [ -e ${INITDDIR}/pure-ftpd ]; then
				update-rc.d -f pure-ftpd remove
			fi
		else
			mkdir -p /var/run/proftpd
			cp ${CWD}/proftpd ${INITDDIR}/proftpd
			chmod 755 ${INITDDIR}/proftpd
			/sbin/chkconfig proftpd on
			if [ -e ${INITDDIR}/pure-ftpd ]; then
				/sbin/chkconfig pure-ftpd off
			fi
		fi
	fi
	
	echo "Done proftpd.";
	removeLockfile

	# Removing the temp dir
	if [ "${OS}" = "FreeBSD" ]; then
		rm -rf $TDIR
		unsetenv PKG_TMPDIR
	fi

	# Linking configs
	rm -f /usr/local/etc/proftpd.conf
	ln -sf /etc/proftpd.conf /usr/local/etc/proftpd.conf

	perl -pi -e 's/DisplayFirstChdir/DisplayChdir/' /etc/proftpd.conf

	#setup the directadmin.conf
	setVal pureftp 0 ${DACONF_TEMPLATE_FILE}
	setVal pureftp 0 ${DACONF_FILE}
	
	if [ -e ${SERVICES} ];	then
		/usr/bin/perl -pi -e 's/pure-ftpd=/proftpd=/' ${SERVICES};
	fi
	
	killall pure-ftpd
	
	if [ ! -e /etc/logrotate.d/proftpd ] && [ ${OS} != "FreeBSD" ]; then
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/proftpd.logrotate -O /etc/logrotate.d/proftpd
	fi
	
	cd ${CWD}
	echo "Restarting ProFTPd."
	${INITDDIR}/proftpd restart
}

####################################################

doPureftpd(){
	if [ "${PUREFTPD_OPT}" != "yes" ]; then
		echo "You cannot install Pure-FTPd, because you do not have it set in options.conf file.";
		exit 1;
	fi

	PURE_MD5=pureftpd
	if [ "`version_cmp ${PUREFTPD_VER} 1.0.39 'pure-ftpd ver check'`" -ge 0 ]; then
		if [ ! -e /usr/include/openssl/ec.h ]; then
			echo "${boldon}pure-ftpd ${PUREFTPD_VER} requires /usr/include/openssl/ec.h${boldoff}";
			echo "${boldon}Dropping pure-ftpd version down to 1.0.38${boldoff}";
			PUREFTPD_VER=1.0.38
			PURE_MD5=
		fi
	fi

	getFile pure-ftpd-${PUREFTPD_VER}.tar.gz ${PURE_MD5}
	getFile pure-ftpd pure-ftpd_boot
	getFile pure-ftpd_freebsd pure-ftpd_boot_freebsd
	getFile pure-ftpd_debian pure-ftpd_boot_debian
	getFile patches/pure-ftpd-logjam.patch
	
	quitIfLocked doPureftpd

	cd ${CWD};
	FILE=${CWD}/pure-ftpd-${PUREFTPD_VER}.tar.gz
	checkFile ${FILE};
	echo "Extracting ${FILE}...";

	tar xzf ${FILE} --no-same-owner
	chown -R root:${ROOT_GRP} pure-ftpd-${PUREFTPD_VER}
	cd pure-ftpd-${PUREFTPD_VER}

	patch -p0 < ../patches/pure-ftpd-logjam.patch

	# Backup Pure-FTPd config
	rm -f /etc/pure-ftpd.conf.old
	cp /etc/pure-ftpd.conf /etc/pure-ftpd.conf.old

	echo "Configuring pure-ftpd-${PUREFTPD_VER}...";
	${CWD}/${PUREFTPD_CONFIGURE}

	echo "Done. Making pure-ftpd-${PUREFTPD_VER}...";
	while
	echo "Trying to make Pure-FTPd..."
	do
	{
                if [ "${OS}" = "FreeBSD" ]; then
                        /usr/local/bin/gmake -j ${CPU_CORES}
                else
			make -j ${CPU_CORES}
		fi

		if [ $? -ne 0 ]
		then
			if [ ${USER_INPUT} -eq 1 ]; then
				$ECHO -e "\n*** The make has failed, would you like to try to make again? (y,n): ";
				read yesno;
				echo "";
			 else
                                if [ "${INPUT_VALUE}" = "d" ]; then
					yesno=n
                                else
                                        yesno=${INPUT_VALUE}
                                fi
                         fi

			 if [ "${yesno}" = "n" ]
			 then
				do_exit 0;
			 fi
		else
			break;
		fi
	}
	done
	echo "Make complete";

	echo "Installing pure-ftpd-${PUREFTPD_VER}...";
	make install
	
	if [ ! -e /etc/pure-ftpd.pem ]; then
		if [ -e /etc/exim.cert ] && [ -e /etc/exim.key ]; then
			cat /etc/exim.cert > /etc/pure-ftpd.pem
			cat /etc/exim.key >> /etc/pure-ftpd.pem
		fi
	fi

	if [ ! -e /etc/pure-ftpd.pem ]; then
		if [ -e /etc/httpd/conf/ssl.crt/server.crt ] && [ -e /etc/httpd/conf/ssl.key/server.key ]; then
			cat /etc/httpd/conf/ssl.crt/server.crt > /etc/pure-ftpd.pem
			cat /etc/httpd/conf/ssl.key/server.key >> /etc/pure-ftpd.pem
		fi
	fi
	
	if [ ! -e ${INITDDIR}/pure-ftpd ]; then
		if [ "${OS}" = "FreeBSD" ]; then
			cp ${CWD}/pure-ftpd_freebsd ${INITDDIR}/pure-ftpd
			chmod 755 ${INITDDIR}/pure-ftpd
		elif [ -e /etc/debian_version ]; then
			cp ${CWD}/pure-ftpd_debian ${INITDDIR}/pure-ftpd
			chmod 755 ${INITDDIR}/pure-ftpd
			update-rc.d pure-ftpd defaults
			if [ -e ${INITDDIR}/proftpd ]; then
				update-rc.d -f proftpd remove
			fi
		else
			cp ${CWD}/pure-ftpd ${INITDDIR}/pure-ftpd
			chmod 755 ${INITDDIR}/pure-ftpd
			/sbin/chkconfig pure-ftpd on
			if [ -e ${INITDDIR}/proftpd ]; then
				/sbin/chkconfig proftpd off
			fi
		fi

		killall -9 proftpd
	fi
	
	echo "Done pure-ftpd.";
	removeLockfile

	#setup the directadmin.conf
	setVal pureftp 1 ${DACONF_TEMPLATE_FILE}
	setVal pureftp 1 ${DACONF_FILE}

	killall proftpd
	
	doRestartDA;
	
	if [ -e ${SERVICES} ];	then
		/usr/bin/perl -pi -e 's/proftpd=/pure-ftpd=/' ${SERVICES};
	fi
	
	killall proftpd
	
	pure-pw mkdb /etc/pureftpd.pdb -f /etc/proftpd.passwd

	if [ ! -e /etc/logrotate.d/pure-ftpd ] && [ ${OS} != "FreeBSD" ]
        then
		${WGET} ${WGET_CONNECT_OPTIONS} ${WEBPATH}/pure-ftpd.logrotate -O /etc/logrotate.d/pure-ftpd
	fi
	
	cd ${CWD}
	echo "Restarting Pure-FTPd."
	${INITDDIR}/pure-ftpd restart
}

####################################################

doUpdateDA()
{
    echo "${boldon}Updating DirectAdmin${boldoff}"
    echo "action=update&value=program" >> /usr/local/directadmin/data/task.queue
    /usr/local/directadmin/dataskq
}

####################################################

doVersions() {
	cd ${CWD}

	VERSIONS=$1

	if [ "${DA_AUTOUPDATE_OPT}" = "yes" ] && [ -e /usr/local/directadmin/directadmin ]; then
			DIRECTADMINV="`/usr/local/directadmin/directadmin v | grep -m1 '^Version:' | grep -oE '[^ ]+$' | cut -d. -f2,3,4`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of DirectAdmin: ${DIRECTADMIN_VER}"
				echo "Installed version of DirectAdmin: ${DIRECTADMINV}"
				echo ""
			fi
			if [ "${DIRECTADMIN_VER}" != "${DIRECTADMINV}" ]; then
				if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "3" ]; then
					doUpdateDA;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}DirectAdmin ${DIRECTADMINV} to ${DIRECTADMIN_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
	fi
	
	if [ -e /usr/sbin/httpd ]; then
		APACHEV="`/usr/sbin/httpd -V | grep 'Server version:' | awk '{ print $3 }' | cut -d/ -f2`"
		if [ "${VERSIONS}" = "1" ]; then
			if [ "${APACHE_OPT}" = "1.3" ]; then
				echo "Latest version of Apache: ${APACHE_VER}"
			elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
				echo "Latest version of Apache: ${APACHE2_VER}"
			fi
			echo "Installed version of Apache: ${APACHEV}"
			echo ""
		fi
		if [ "${APACHE_OPT}" = "1.3" ]; then
			if [ "${APACHE_VER}" != "${APACHEV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating Apache${boldoff}"
					doApache;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Apache ${APACHEV} to {APACHE_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
			if [ "${APACHE2_VER}" != "${APACHEV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating Apache${boldoff}"
					doApache2;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Apache ${APACHEV} to ${APACHE2_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${PROFTPD_OPT}" = "yes" ]; then
		if [ -e $PROFTPD_PREFIX/sbin/proftpd ]; then
			PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $3 }'`"
                        if [ "$PROFTPDV" = "Version" ]; then
                                PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $4 }'`"
                        fi
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of ProFTPD: ${PROFTPD_VER}"
				echo "Installed version of ProFTPD: ${PROFTPDV}"
				echo ""
			fi
			if [ "${PROFTPD_VER}" != "${PROFTPDV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating ProFTPD${boldoff}"
					doProftpd;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}ProFTPD ${PROFTPDV} to ${PROFTPD_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${PUREFTPD_OPT}" = "yes" ]; then
		if [ -e /usr/sbin/pure-ftpd ]; then
			PUREFTPDV="`/usr/sbin/pure-ftpd -h | grep pure-ftpd | awk '{print $2}' | cut -dv -f2`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of Pure-FTPD: ${PUREFTPD_VER}"
				echo "Installed version of Pure-FTPd: ${PUREFTPDV}"
				echo ""
			fi
			if [ "${PUREFTPD_VER}" != "${PUREFTPDV}" ] && [ -e /usr/include/openssl/ec.h ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating Pure-FTPd${boldoff}"
					doPureftpd;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Pure-FTPD ${PUREFTPDV} to ${PUREFTPD_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi
	
	if [ "${AUTOCONF_OPT}" = "yes" ]; then
		if [ -e /usr/local/bin/autoconf ]; then
			AUTOCONFV="`/usr/local/bin/autoconf --version | grep '(GNU Autoconf)' | awk '{ print $4 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of autoconf: ${AUTOCONF_VER}"
				echo "Installed version of autoconf: ${AUTOCONFV}"
				echo ""
			fi
			if [ "${AUTOCONF_VER}" != "${AUTOCONFV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating autoconf${boldoff}"
					doAutoconf;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Autoconf ${AUTOCONFV} to ${AUTOCONF_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi
	
	if [ "${AUTOMAKE_OPT}" = "yes" ]; then
		if [ -e /usr/local/bin/automake ]; then
			AUTOMAKEV="`/usr/local/bin/automake --version | grep '(GNU automake)' | awk '{ print $4 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of automake: ${AUTOMAKE_VER}"
				echo "Installed version of automake: ${AUTOMAKEV}"
				echo ""
			fi
			if [ "${AUTOMAKE_VER}" != "${AUTOMAKEV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating automake${boldoff}"
					doAutomake;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Automake ${AUTOMAKEV} to ${AUTOMAKE_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${LIBTOOL_OPT}" = "yes" ]; then
		if [ -e /usr/local/bin/libtool ]; then
			LIBTOOLV="`/usr/local/bin/libtool --version | grep '(GNU libtool)' | awk '{ print $4 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of libtool: ${LIBTOOL_VER}"
				echo "Installed version of libtool: ${LIBTOOLV}"
				echo ""
			fi
			if [ "${LIBTOOL_VER}" != "${LIBTOOLV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating libtool${boldoff}"
					doLibtool;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Libtool ${LIBTOOLV} to ${LIBTOOL_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ -e /usr/local/bin/pcre-config ]; then
		PCREV="`/usr/local/bin/pcre-config --version`"
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of PCRE: ${PCRE_VER}"
			echo "Installed version of PCRE: ${PCREV}"
			echo ""
		fi
		if [ "${PCRE_VER}" != "${PCREV}" ]; then
			if [ "${VERSIONS}" = "0" ]; then
				echo "${boldon}Updating PCRE${boldoff}"
				doPCRE;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}PCRE ${PCREV} to ${PCRE_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi

	if [ "${CURL_OPT}" = "yes" ]; then
		if [ -e /usr/local/bin/curl ]; then
			CURLV="`/usr/local/bin/curl --version | grep libcurl | awk '{ print $2}'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of curl: ${CURL_VER}"
				echo "Installed version of curl: ${CURLV}"
				echo ""
			fi
			if [ "${CURL_VER}" != "${CURLV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating cURL${boldoff}"
					doCURL;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}cURL ${CURLV} to ${CURL_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ -e /usr/local/bin/freetype-config ]; then
		FREETYPEV="`/usr/local/bin/freetype-config --ftversion`"
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of FreeType: ${FREETYPE_VER}"
			echo "Installed version of FreeType: ${FREETYPEV}"
			echo ""
		fi
		if [ "`version_cmp ${FREETYPE_VER} ${FREETYPEV} 'doVersions::freetype'`" != "0" ]; then
			if [ "${VERSIONS}" = "0" ]; then
				echo "${boldon}Updating FreeType${boldoff}"
				doFreeType;
				echo "It is recommended to run \"$0 php n\" after FreeType update."
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}FreeType ${FREETYPEV} to ${FREETYPE_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi

	if [ "${AWSTATS_OPT}" = "yes" ]; then
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of AWstats: ${AWSTATS_VER}"
		fi
		AWSTATSV=0
		if [ -e /usr/local/awstats ]; then
			AWSTATSV="`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Installed version of AWstats: ${AWSTATSV}"
			fi
		fi
		echo ""
		if [ "${AWSTATS_VER}" != "${AWSTATSV}" ]; then
			if [ "${VERSIONS}" = "0" ]; then
				echo "${boldon}Updating AWstats.${boldoff}"
				doawstats;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}AWstats ${AWSTATSV} to ${AWSTATS_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
		
		if [ "${AWSTATS_PROCESS_VER}" != "0" ]; then
			AWS_PROCESS_V=0
			AWS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh
			
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of awstats_process.sh: ${AWSTATS_PROCESS_VER}"
			fi
			
			if [ -s "${AWS_PROCESS_SH}" ]; then
				AWS_PROCESS_V=`grep ^VERSION= ${AWS_PROCESS_SH} | cut -d= -f2`
				echo "Installed version of awstats_process.sh: ${AWS_PROCESS_V}"
				echo ""
			fi
			
			if [ "${AWSTATS_PROCESS_VER}" != "${AWS_PROCESS_V}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating awstats_process.sh.${boldoff}"
					doawstats_process
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}awstats_process.sh ${AWS_PROCESS_V} to ${AWSTATS_PROCESS_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi		
	fi
	
	if [ "${DOVECOT_OPT}" = "yes" ]; then
		if [ -e /usr/sbin/dovecot ]; then
			DOVECOTV="`/usr/sbin/dovecot --version | cut -d\  -f1`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of dovecot: ${DOVECOT_VER}"
				echo "Installed version of dovecot: ${DOVECOTV}"
				echo ""
			fi
			if [ "${DOVECOT_VER}" != "${DOVECOTV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating Dovecot${boldoff}"
					doDovecot;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Dovecot ${DOVECOTV} to ${DOVECOT_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi
	
	if [ "${EXIM_OPT}" = "yes" ]; then
		if [ -e /usr/sbin/exim ]; then
			EXIMV="`exim_version`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of Exim: ${EXIM_VER}"
				echo "Installed version of Exim: ${EXIMV}"
				echo ""
			fi
			if [ "${EXIM_VER}" != "${EXIMV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating Exim${boldoff}"
					doExim
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}Exim ${EXIMV} to ${EXIM_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${SPAMASSASSIN_OPT}" = "yes" ]; then
		if [ -e /usr/bin/spamd ]; then
			SPAMASSASSINV=`/usr/bin/spamd --version | grep 'version' | awk '{print $4}'`
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of SpamAssassin: ${SPAMASSASSIN_VER}"
				echo "Installed version of SpamAssassin: ${SPAMASSASSINV}"
				echo ""
			fi
			if [ "${SPAMASSASSIN_VER}" != "${SPAMASSASSINV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating SpamAssassin.${boldoff}"
					dospamassassin;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}SpamAssassin ${SPAMASSASSINV} to ${SPAMASSASSIN_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi
	
	if [ "${CLAMAV_OPT}" = "yes" ]; then
		CLAMAVV=0
		if [ -e /usr/local/sbin/clamd ]; then
			CLAMAVV=`/usr/local/sbin/clamd --version | cut -d/ -f1 | awk '{print $2}'`
		fi
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of ClamAV: ${CLAMAV_VER}"
			echo "Installed version of ClamAV: ${CLAMAVV}"
			echo ""
		fi
		if [ "${CLAMAV_VER}" != "${CLAMAVV}" ]; then
			if [ "${VERSIONS}" = "0" ]; then
				echo "${boldon}Updating ClamAV.${boldoff}"
				doclamav;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}ClamAV ${CLAMAVV} to ${CLAMAV_VER} update is available.${boldoff}"
				echo ""			
			fi
		fi
	fi

	if [ "${MAILMAN_OPT}" = "yes" ]; then
		MAILMANV=0
		if [ -e /usr/local/mailman/bin/version ]; then
			MAILMANV=`/usr/local/mailman/bin/version | awk '{print $4}'`
		fi
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of Mailman: ${MAILMAN_VER}"
			echo "Installed version of Mailman: ${MAILMANV}"
			echo ""
		fi
		if [ "${MAILMAN_VER}" != "${MAILMANV}" ]; then
			if [ "${VERSIONS}" = "0" ]; then
				echo "${boldon}Updating Mailman.${boldoff}"
				domailman;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}Mailman ${MAILMANV} to ${MAILMAN_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi
	
	UPDATED_MYSQL=0
	if [ "${MYSQLINST_OPT}" = "yes" ]; then
		if [ -e $MYSQL_BIN ]; then
			MYSQLV="`$MYSQL_BIN --version | awk '{ print $5 }' | cut -d , -f1`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of MySQL: ${MYSQL_VER}"
				echo "Installed version of MySQL: ${MYSQLV}"
				echo ""
			fi
			if [ "${MYSQL_VER}" != "${MYSQLV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating MySQL.${boldoff}"
					doMySQL;
					UPDATED_MYSQL=1
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}MySQL ${MYSQLV} to ${MYSQL_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi
	
	if [ "${PHP5_CLI_OPT}" = "yes" ] || [ "${PHP6_CLI_OPT}" = "yes" ]; then
		if [ -e /usr/local/bin/php ]; then
			PHPVCLI="`/usr/local/bin/php -v | grep built | awk '{ print $2 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				if [ "`/usr/local/bin/php -v | grep built | awk '{ print $2 }' | cut -d. -f1`" = "5" ]; then
					echo "Latest version of PHP (CLI): ${PHP5_VER}"
				elif [ "`/usr/local/bin/php -v | grep built | awk '{ print $2 }' | cut -d. -f1`" = "6" ]; then
					echo "Latest version of PHP (CLI): ${PHP6_VER}"
				fi
				echo "Installed version of PHP (CLI): ${PHPVCLI}"
				echo ""
			fi
			if [ "`/usr/local/bin/php -v | grep built | awk '{ print $2 }' | cut -d. -f1`" = "5" ]; then
				if [ "${PHP5_VER}" != "${PHPVCLI}" ] || [ "$UPDATED_MYSQL" -eq 1 ]; then
					if [ "${VERSIONS}" = "0" ]; then
						echo "${boldon}Updating PHP5 (CLI)${boldoff}"
						./build php5-cli n;
						${INITDDIR}/httpd restart
					elif [ "${VERSIONS}" = "1" ]; then
						echo "${boldon}PHP5 (CLI) ${PHPVCLI} to ${PHP5_VER} update is available.${boldoff}"
						echo ""
					fi
				fi
			elif [ "`/usr/local/bin/php -v | grep built | awk '{ print $2 }' | cut -d. -f1`" = "6" ]; then
				if [ "${PHP6_VER}" != "${PHPVCLI}" ] || [ "$UPDATED_MYSQL" -eq 1 ]; then
						if [ "${VERSIONS}" = "0" ]; then
							echo "${boldon}Updating PHP6 (CLI)${boldoff}"
							./build php6-cli n;
							${INITDDIR}/httpd restart
						elif [ "${VERSIONS}" = "1" ]; then
							echo "${boldon}PHP6 (CLI) ${PHPVCLI} to ${PHP6_VER} update is available.${boldoff}"
							echo ""
						fi
				fi
			fi
		fi
	fi

	if [ "${PHP6_CGI_OPT}" = "yes" ]; then
		if [ -e /usr/local/php6/bin/php ]; then
			PHP6VCGI="`/usr/local/php6/bin/php -v | grep built | awk '{ print $2 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of PHP6 (CGI): ${PHP6_VER}"
				echo "Installed version of PHP6 (CGI): ${PHP6VCGI}"
				echo ""
			fi
			if [ "${PHP6_VER}" != "${PHP6VCGI}" ] || [ "$UPDATED_MYSQL" -eq 1 ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating PHP6 (CGI)${boldoff}"
					./build php6-cgi n;
					${INITDDIR}/httpd restart
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}PHP6 (CGI) ${PHP6VCGI} to ${PHP6_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${PHP5_CGI_OPT}" = "yes" ]; then
		if [ -e /usr/local/php5/bin/php ]; then
			PHP5VCGI="`/usr/local/php5/bin/php -v | grep built | awk '{ print $2 }'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of PHP5 (CGI): ${PHP5_VER}"
				echo "Installed version of PHP5 (CGI): ${PHP5VCGI}"
				echo ""
			fi
			if [ "${PHP5_VER}" != "${PHP5VCGI}" ] || [ "$UPDATED_MYSQL" -eq 1 ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating PHP5 (CGI)${boldoff}"
					./build php5-cgi n;
					${INITDDIR}/httpd restart
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}PHP5 (CGI) ${PHP5VCGI} to ${PHP5_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${PHP5_CGI_OPT}" = "yes" ] || [ "${PHP6_CGI_OPT}" = "yes" ]; then
		if [ -e /usr/local/suphp/sbin/suphp ]; then
			SUPHPV="`/usr/local/suphp/sbin/suphp 2>&1 | grep 'suPHP version' | awk '{print $3}'`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Latest version of suPHP: ${SUPHP_VER}"
				echo "Installed version of suPHP: ${SUPHPV}"
				echo ""
			fi
			if [ "${SUPHP_VER}" != "${SUPHPV}" ]; then
				if [ "${VERSIONS}" = "0" ]; then
					echo "${boldon}Updating suPHP.${boldoff}"
					doSuPhp;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}suPHP ${SUPHPV} to ${SUPHP_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${ATMAIL_OPT}" = "yes" ]; then
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of Atmail: ${ATMAIL_VER}"
		fi
		ATMAILV=0
		if [ -e ${WWWDIR}/atmail ]; then
			ATMAILV="`ls -ld ${WWWDIR}/atmail | cut -d\> -f2 | cut -d- -f2`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Installed version of Atmail: ${ATMAILV}"
				echo ""
			fi
		fi
		if [ "${ATMAIL_VER}" != "${ATMAILV}" ]; then
			if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
				echo "${boldon}Updating Atmail webmail.${boldoff}"
				doatmail;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}Atmail webmail ${ATMAILV} to ${ATMAIL_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi
	
	if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of RoundCube webmail: ${ROUNDCUBE_VER}"
		fi
		ROUNDCUBEV=0
		if [ -e ${WWWDIR}/roundcube ]; then
			ROUNDCUBEV="`roundcube_version`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Installed version of RoundCube webmail: ${ROUNDCUBEV}"
				echo ""
			fi
		fi
		if [ "${ROUNDCUBE_VER}" != "${ROUNDCUBEV}" ]; then
			if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
				echo "${boldon}Updating RoundCube webmail.${boldoff}"
				doroundcube;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}RoundCube webmail ${ROUNDCUBEV} to ${ROUNDCUBE_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi

	if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of phpMyAdmin: ${PHPMYADMIN_VER}"
		fi
		PHPMYADMINV=0
		if [ -e ${WWWDIR}/phpMyAdmin ]; then
			PHPMYADMINV="`ls -ld ${WWWDIR}/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Installed version of phpMyAdmin: ${PHPMYADMINV}"
				echo ""
			fi
		fi
		if [ "${PHPMYADMIN_VER}" != "${PHPMYADMINV}" ]; then
			if [ "${PHP5_VER_OPT}" != "5.3" ] && [ "${PHP5_VER_OPT}" != "5.4" ]; then
				if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
					echo "${boldon}Updating phpMyAdmin.${boldoff}"
					dophpMyAdmin;
				elif [ "${VERSIONS}" = "1" ]; then
					echo "${boldon}phpMyAdmin ${PHPMYADMINV} to ${PHPMYADMIN_VER} update is available.${boldoff}"
					echo ""
				fi
			fi
		fi
	fi

	if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
		if [ "${VERSIONS}" = "1" ]; then
			echo "Latest version of SquirrelMail: ${SQUIRRELMAIL_VER}"
		fi
		SQUIRRELMAILV=0
		if [ -e ${WWWDIR}/squirrelmail ]; then
			SQUIRRELMAILV="`ls -ld ${WWWDIR}/squirrelmail | cut -d\> -f2 | cut -d- -f2,3`"
			if [ "${VERSIONS}" = "1" ]; then
				echo "Installed version of SquirrelMail: ${SQUIRRELMAILV}"
				echo ""
			fi
		fi
		if [ "${SQUIRRELMAIL_VER}" != "${SQUIRRELMAILV}" ]; then
			if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
				echo "${boldon}Updating SquirrelMail webmail.${boldoff}"
				doSquirrelmail;
			elif [ "${VERSIONS}" = "1" ]; then
				echo "${boldon}SquirrelMail webmail ${SQUIRRELMAILV} to ${SQUIRRELMAIL_VER} update is available.${boldoff}"
				echo ""
			fi
		fi
	fi
	
	if [ "${VERSIONS}" = "1" ]; then
		echo "If you want to update all the available versions run: ${boldon}$0 update_versions${boldoff}"
	fi
}

####################################################

doAll_jail() {
	compile_coreutils;
	compile_shell;
	compile_nbsmtp;
}

####################################################

SPEED_FILE_SMALL=10.kb
SPEED_FILE_LARGE=100.kb
#max time for small file test allowed to proceed with large file test.
LARGE_TEST_MAX=25
SPEED_VERBOSE=1
BEST=0
BEST_SEVER=""
KB=1024
MB=1048576
GB=1073741824

speedtest()
{
	${WGET} -O /dev/null --timeout=2 --tries=1 http://${1}/services/${2} 2>&1 | grep saved | cut -d\( -f2 | cut -d\) -f1
}
 
test_server()
{
	i=$1
	VALUE=0
	SPEED=`speedtest $i $2`;

	#can be MB/s or KB/s or B/s

	if [ "${SPEED}" = "" ]; then
		echo "$i is too slow, skipping.";
		continue;
	fi

	NUM=`echo $SPEED | cut -d\  -f1`
	TYPE=`echo $SPEED | cut -d\  -f2`

	case "$TYPE" in
		B/s)    VALUE=$NUM;
			;;
		KB/s)   VALUE=`perl -e "print $KB * $NUM"`;
			;;
		MB/s)   VALUE=`perl -e "print $MB * $NUM"`;
			;;
		GB/s)   VALUE=`perl -e "print $GB * $NUM"`;
			;;
		*)      echo "Unknown speed type $TYPE";
			;;
	esac

	#chop off any decimal bytes.. we dont care about 0.5 byte/second
	VALUE=`echo $VALUE | cut -d. -f1`

	if [ ${SPEED_VERBOSE} -eq 1 ]; then
		$ECHO -e "$VALUE B/s \t- $i"
	fi

	if [ "${VALUE}" -gt "${BEST}" ]; then
		BEST=$VALUE;
		BEST_SERVER=$i
	fi
}
 
 
speed_test()
{
	if [ ${SPEED_VERBOSE} -eq 1 ]; then
		echo "Testing with file $1:";
	fi
	BEST=0
	BEST_SERVER=""
	SPEED_START=`date +%s`
	for s in `cat servers.txt`; do
	{
		test_server $s $1
	};
	done;
	SPEED_END=`date +%s`
	DURATION=`expr $SPEED_END - $SPEED_START`

	if [ ${SPEED_VERBOSE} -eq 1 ]; then
		echo "Total test duration: $DURATION seconds";
		echo "";
	fi
}
 
set_fastest() {

	#quiet mode. Will only output the quickest server.
	if [ "$1" -eq 1 ]; then
		SPEED_VERBOSE=0;
	fi

	getFile servers.txt servers

	speed_test ${SPEED_FILE_SMALL}

	#try and get a more accurate reading with larger file.
	if [ "${DURATION}" -lt ${LARGE_TEST_MAX} ]; then
		speed_test ${SPEED_FILE_LARGE}
	else
		if [ ${SPEED_VERBOSE} -eq 1 ]; then     
			echo "Small file test took longer than ${LARGE_TEST_MAX} seconds.  Not proceeding with large file test.";
		fi
	fi

	if [ ${SPEED_VERBOSE} -eq 1 ]; then
		echo "Fastest server is $BEST_SERVER at $BEST B/s";
	else
		echo "${BEST_SERVER}";
	fi

	if [ "${BEST_SERVER}" != "" ]; then
		setOpt downloadserver ${BEST_SERVER}
	else
		echo "Unable to determine fastest server";
	fi
}

fix_curl_link_for_yum() {
	#check for broken yums on CentOS 6.
	if [ -e /usr/bin/yum ]; then
		BROKEN=`yum --version 2>&1 | head -n 2 | grep -c CRITICAL`
		if [ "$BROKEN" -eq 1 ]; then
			CURLLIB=/usr/local/lib/libcurl.so.4.2.0
			if [ -e $CURLLIB ]; then
				echo "*** Re-linking curl to fix the yum issue: http://help.directadmin.com/item.php?id=385 ***";
				mv $CURLLIB /root/libcurl.so.4.2.0.moved
				ln -s /usr/lib/libcurl.so $CURLLIB
				echo "*** done curl re-link ***";
			else
				echo "*** yum is broken, but cannot find $CURLLIB.  See http://help.directadmin.com/item.php?id=385 ***";
			fi		
		fi		
	fi
}
 
####################################################

doAll() {
        FORCE=1;

	doPCRE;

        if [ "${APACHE_OPT}" = "1.3" ]; then
                doApache;
        elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
		checkLibz;
                doApache2;
        fi

#        doAutoconf;

#        doAutomake;

#        doLibtool;

        doLibJpeg;

        doLibPng;

        doCURL;

        doMCrypt;

        doMHash;

        doFreeType;

        doIconv;

        if [ "${MYSQLINST_OPT}" = "yes" ]; then
                doMySQL;
        fi

		if [ "${JAIL_OPT}" = "yes" ]; then
			doAll_jail;
		fi

		if [ ! -d /usr/local/icu ]; then
			doICU;
		fi

		doLibxml2;

		doLibxslt;

        doPhp n;

        #Removed June 14, 2010. Nobody uses this.
        #can still be installed with ./build mod_perl
        #doModPerl;

		if [ "${WEBALIZER_OPT}" = "yes" ]; then
			doWebalizer;
		fi
		
		if [ "${AWSTATS_OPT}" = "yes" ]; then
			doawstats;
		fi
		
        if [ "${EXIM_OPT}" = "yes" ]; then
                doExim;
        fi

        if [ "${DOVECOT_OPT}" = "yes" ]; then
                doDovecot;
        fi

        if [ "${PROFTPD_OPT}" = "yes" ]; then
                doProftpd;
        fi
		
		if [ "${PUREFTPD_OPT}" = "yes" ]; then
                doPureftpd;
        fi

		if [ "${SPAMASSASSIN_OPT}" = "yes" ]; then
			dospamassassin;
		fi
		
		if [ "${CLAMAV_OPT}" = "yes" ]; then
			doclamav;
		fi
		
		if [ "${MAILMAN_OPT}" = "yes" ]; then
			domailman;
		fi
		
        chown -R root:${ROOT_GRP} ${WORKDIR}

		if [ "${ATMAIL_OPT}" = "yes" ]; then
				doatmail;
        fi
		
        if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
                doroundcube;
        fi

        if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
                dophpMyAdmin;
        fi

        if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
                doSquirrelmail;
        fi

        if [ "${UEBIMIAU_OPT}" = "yes" ]; then
                doUebimiau;
        fi

        if [ "${ZEND_OPT}" = "yes" ]; then
                doZend;
        fi
		
		if [ "${IONCUBE_OPT}" = "yes" ]; then
                doIoncube;
        fi

        if [ "${EXIMCONF_OPT}" = "yes" ]; then
                doEximConf;
        fi

        if [ "${PHPINI_OPT}" = "yes" ]; then
                doPhpIni;
        fi
        
        fix_curl_link_for_yum;

        $ECHO -e "\n\n\n";
        echo "*************************************";
        echo "*                                   *";
        echo "*   All parts have been installed   *";
        echo "*                                   *";
        echo "*************************************";
        echo "";
        if [ ${OS} = "FreeBSD" ]; then
                echo "Type: /usr/local/etc/rc.d/httpd restart";
        elif [ -e ${DEBIAN_VERSION} ]; then
                echo "Type: /etc/init.d/httpd restart";
        else
                echo "Type: /sbin/service httpd restart";
        fi
}

####################################################


if [ $# -eq 2 ]; then
	USER_INPUT=0
	INPUT_VALUE=$2
fi

writeLog $@

case "$1" in
	all) doChecks; doAll;
		;;
	all_jail) doAll_jail;
		;;
	options) doChecks; options;
		;;
	create_options) create_options;
		;;
	used_configs) used_configs;
		;;
	apache) doChecks;
		if [ "${APACHE_OPT}" = "1.3" ]; then
			doApache;
		elif [ "${APACHE_OPT}" = "2.0" ] || [ "${APACHE_OPT}" = "2.2" ] || [ "${APACHE_OPT}" = "2.4" ]; then
			doApache2;
		fi
		;;
	libjpeg) doLibJpeg;
		;;
	libpng) doLibPng;
		;;
	coreutils) compile_coreutils;
		;;
	shell) compile_shell;
		;;
	smtp_mail) compile_nbsmtp;
		;;
	zlib) doZlib;
		;;
	cron) doCron;
		;;
	curl) doCURL;
		;;
	mcrypt) doMCrypt;
		;;
	mhash) doMHash;
		;;
	freetype) doFreeType;
		;;
	iconv) doIconv;
		;;
	icu) doICU;
		;;
	autoconf) doAutoconf;
		;;
	automake) doAutomake;
		;;
	m4) doM4;
		;;
	libtool) doLibtool;
		;;
	libxml2) doLibxml2;
		;;
	libxslt) doLibxslt;
		;;
	mod_perl) doModPerl;
		;;
	clean) doClean;
		;;
	clean_old_webapps) doclean_old_webapps;
		;;
	clean_old_tarballs) doclean_old_tarballs;
		;;
	update) doUpdate;
		;;
	pcre) doPCRE;
		;;
	phpmyadmin) dophpMyAdmin;
		;;
	atmail) doatmail;
		;;
	roundcube) doroundcube;
		;;
	squirrelmail) doSquirrelmail;
		;;
	uebimiau) doUebimiau;
		;;
	update_script) doUpdateScript;
		;;
	update_data) doUpdateData;
		;;
	rewrite_confs) doChecks; doRewriteConfs;
		;;
	secure_php) secure_php
		;;
	update_da) doUpdateDA
		;;
	versions) doChecks; doVersions 1;
		;;
	versions_nobold) BOLD_OPT=no; boldon=""; boldoff=""; doChecks; doVersions 1;
		;;
	update_versions) doChecks; doVersions 0;
		;;
	update_webapps) doVersions 2;
		;;
	awstats) doawstats;
		;;
	awstats_process|awstats_process.sh) doawstats_process;
		;;
	webalizer) doWebalizer;
		;;
	proftpd) doChecks; doProftpd;
		;;
	pureftpd) doChecks; doPureftpd;
		;;
	zend) doZend;
		;;
	ioncube) doIoncube;
		;;
	mysql) doChecks; doMySQL;
		;;
	mysql_backup) doMySQLback;
		;;
	exim) doExim;
		;;
	exim_conf) doEximConf;
		;;
	php) doChecks; doPhp;
		;;
	php-ini) doChecks; doPhpIni;
		;;
	php5-cli) doChecks; doPhp5;
		;;
	php6-cli) doChecks; doPhp6;
		;;
	php5-cgi) doChecks; doPhp5_suphp;
		;;
	php6-cgi) doChecks; doPhp6_suphp;
		;;
	suphp) doSuPhp;
		;;
	todovecot) convertToDovecot;
		;;
	dovecot) doDovecot;
		;;
	spamassassin) dospamassassin;
		;;
	version) showVersion;
		;;
	clamav) doclamav;
		;;
	mailman) domailman;
		;;
	set_fastest) set_fastest 0;
		;;
	set_fastest_quiet) set_fastest 1
		;;
	set) setOpt $2 $3;
		;;
	* )	showHelp;
		do_exit 0;
		;;
esac

if [ "${CLEAN_OPT}" = "yes" ]; then
	doClean;
fi

if [ "${CAGEFS_OPT}" = "yes" ]; then
	echo "CageFS: Executing 'cagefsctl --force-update'..."
	cagefsctl --force-update
fi

do_exit 0;

