diff --git a/.gitignore b/.gitignore index 26b77c7..bda151b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /conf/*.conf postfixadmin-* +*.swp diff --git a/install_postfixadmin.sh b/install_postfixadmin.sh index a713d5a..703ee86 100755 --- a/install_postfixadmin.sh +++ b/install_postfixadmin.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash - -echo -e "\n\tScript is not yet ready for running.\n" -exit # It's not ready for running +clear +echo -e "\n\t\033[32mStart script for installation Postfix Admin and vacation script..\033[m" ## =================================================================== ## - Install Postfixadmin @@ -21,13 +20,14 @@ exit # It's not ready for running # - Settings # ------------- -#_src_base_dir="$(realpath $(dirname $0))" -_src_base_dir=/usr/local/src/postfixadmin +_src_base_dir="$(realpath $(dirname $0))" +#_src_base_dir=/usr/local/src/postfixadmin conf_file="${_src_base_dir}/conf/install_postfixadmin.conf" curdir=`pwd` log_file="$(mktemp)" +declare -A check_entry_main_cf_arr # ------------- # - Functions @@ -63,7 +63,19 @@ warn (){ echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" echo "" } - +info (){ + echo "" + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + echo "" +} +# - remove leading/trailling whitespaces +# - +trim() { + local var="$*" + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + echo -n "$var" +} echo_ok() { echo -e "\033[75G[ \033[32mok\033[m ]" @@ -74,12 +86,12 @@ echo_failed(){ ## echo -e " [ failed ]" } echo_skipped() { - echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" + echo -e "\033[75G[ \033[30m\033[1mskipped\033[m ]" } -if [ "$_db_type" = "postgres" -o "$_db_type" = "postgresql" -o "$_db_type" = "pgsql" -o "$_db_type" = "psql" ];then - _db_type=pgsql +if [ "$POSTFIX_DB_TYPE" = "postgres" -o "$POSTFIX_DB_TYPE" = "postgresql" -o "$POSTFIX_DB_TYPE" = "pgsql" -o "$POSTFIX_DB_TYPE" = "psql" ];then + POSTFIX_DB_TYPE=pgsql fi echo @@ -92,48 +104,660 @@ else echo_ok fi + + +# - Default values +# - +DEFAULT_HTTP_USER="www-data" +DEFAULT_HTTP_GROUP="www-data" +DEFAULT_APACHE_LOG_DIR="/var/log/apache2" +DEFAULT_WEBSITE_BASEDIR="/var/www/${WEBSITE_NAME}" +DEFAULT_DEBIAN_APACHE_CERT_DIR="/etc/apache2" +DEFAULT_APACHE_CERT_DIR="/usr/local/apache2/conf" +DEFAULT_APACHE_SERVER_CERT="server-bundle.crt" +DEFAULT_APACHE_SERVER_KEY="server.key" +DEFAULT_DEBIAN_APACHE_VHOST_DIR="/etc/apache2/sites-available" +DEFAULT_APACHE_VHOST_DIR="/usr/local/apache2/conf/vhosts" +DEFAULT_POSTFIX_DB_HOST="localhost" +DEFAULT_POSTFIX_DB_NAME="postfix" +DEFAULT_POSTFIX_DB_USER="postfix" +DEFAULT_POSTFIX_DB_SOCKET_PG="/var/run/postgresql" +DEFAULT_DEBIAN_MYSQL_CREDENTIALS="/etc/mysql/debian.cnf" +DEFAULT_MYSQL_CREDENTIALS="/usr/local/mysql/sys-maint.cnf" + +DEFAULT_DOVEADM_PW="/usr/local/dovecot/bin/doveadm pw" +DEFAULT_DELETED_MAILBOX_DIR="/var/deleted-maildirs" +DEFAULT_DELETED_DOMAINS_DIR="/var/deleted-maildomains" + +DEFAULT_VACATION_USER="vacation" +DEFAULT_VACATION_GROUP="vacation" + + +[[ -n "$PF_ADMIN_VERSION" ]] || fatal "Version of Postfix Admin to install (PF_ADMIN_VERSION) not present!" +[[ -n "$WEBSITE_NAME" ]] || fatal "Website's name (WEBSITE_NAME) not present!" + +TLD=${WEBSITE_NAME##*.} +_tmp_string=${WEBSITE_NAME%.*} +MAIN_DOMAIN=${_tmp_string##*.} + +DOMAIN="${MAIN_DOMAIN}.$TLD" + +[[ -n "$WEBMASTER_EMAIL" ]] || WEBMASTER_EMAIL="admin@${MAIN_DOMAIN}.$TLD" + +[[ -n "$IPV4" ]] || fatal "IPv4 Address (IPV4) not present!" +[[ -n "$IPV6" ]] || fatal "IPv4 Address (IPV6) not present!" + +[[ -n "$APACHE_DEBIAN_INSTALLATION" ]] || APACHE_DEBIAN_INSTALLATION=false + +httpd_binary="`which httpd`" +if [ -z "$httpd_binary" ]; then + httpd_binary="`ps -C httpd -f | grep -e \"^root\" | awk '{print$8}'`" + if [ -z "$httpd_binary" ]; then + if [ -x "/usr/local/apache2/bin/httpd" ]; then + httpd_binary="/usr/local/apache2/bin/httpd" + fi + fi +fi + +if [ -x "$httpd_binary" ];then + + # - Determin websever user + # - + HTTP_USER="`$httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^User" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + HTTP_GROUP="`$httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^Group" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + + [[ -n "$HTTP_USER" ]] || HTTP_USER=$DEFAULT_HTTP_USER + [[ -n "$HTTP_GROUP" ]] || HTTP_GROUP=$DEFAULT_HTTP_GROUP + + # - Is webserver running ? + # - + PID=$(ps aux | grep "$(realpath $httpd_binary)" | grep -e "^root" | grep -v grep | awk '{print$2}') + if [[ "X${PID}X" = "XX" ]] ;then + IS_HTTPD_RUNNING=false + else + IS_HTTPD_RUNNING=true + fi +fi + +[[ -n "$WEBMASTER_EMAIL" ]] || fatal "E-Mail (WEBMASTER_EMAIL) for webmaster not present!" +[[ -n "$WEBSITE_BASEDIR" ]] || WEBSITE_BASEDIR=$DEFAULT_WEBSITE_BASEDIR + + +if [[ -z "$APACHE_CERT_DIR" ]] ; then + if $APACHE_DEBIAN_INSTALLATION ; then + APACHE_CERT_DIR="$DEFAULT_DEBIAN_APACHE_CERT_DIR" + else + APACHE_CERT_DIR="$DEFAULT_APACHE_CERT_DIR" + fi +fi + +[[ -n "$APACHE_SERVER_CERT" ]] || APACHE_SERVER_CERT=$DEFAULT_APACHE_SERVER_CERT +[[ -n "$APACHE_SERVER_KEY" ]] || APACHE_SERVER_KEY=$DEFAULT_APACHE_SERVER_KEY + +[[ -n "$APACHE_LOG_DIR" ]] || APACHE_LOG_DIR=$DEFAULT_APACHE_LOG_DIR + +if [[ -z "$PHP_TYPE" ]]; then + PHP_TYPE="php_fpm" +else + [[ "$PHP_TYPE" = "php_fpm" ]] || [[ "$PHP_TYPE" = "fcgid" ]] || [[ "$PHP_TYPE" = "mod_php" ]] || fatal "Wrong type of PHP (PHP_TYPE) given!" +fi + + +if [[ -z "$APACHE_VHOST_DIR" ]] ; then + if $APACHE_DEBIAN_INSTALLATION ; then + APACHE_VHOST_DIR="$DEFAULT_DEBIAN_APACHE_VHOST_DIR" + else + APACHE_VHOST_DIR="$DEFAULT_APACHE_VHOST_DIR" + fi +fi + +[[ -n "$AUTOREPLY_HOSTNAME" ]] || AUTOREPLY_HOSTNAME=autoreply.${MAIN_DOMAIN}.$TLD + +[[ -n "$AUTOREPLY_HOSTNAME" ]] || AUTOREPLY_HOSTNAME=autoreply.${MAIN_DOMAIN}.$TLD + + +[[ -n "$POSTFIX_DB_TYPE" ]] || fatal "Database Type of Postfix Database (POSTFIX_DB_TYPE) not present!" +[[ -n "$POSTFIX_DB_HOST" ]] || POSTFIX_DB_HOST="$DEFAULT_POSTFIX_DB_HOST" +[[ -n "$POSTFIX_DB_NAME" ]] || POSTFIX_DB_NAME="$DEFAULT_POSTFIX_DB_NAME" +[[ -n "$POSTFIX_DB_USER" ]] || POSTFIX_DB_USER="$DEFAULT_POSTFIX_DB_USER" +[[ -n "$POSTFIX_DB_PASS" ]] || fatal "Password of Postfix Database (POSTFIX_DB_PASS) not given!" + +if [[ -n "$POSTFIX_DB_SOCKET" ]]; then + if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then + fatal "MySQL Socket (POSTFIX_DB_SOCKET) is not supported by this script" + fi +else + POSTFIX_DB_SOCKET="$DEFAULT_POSTFIX_DB_SOCKET_PG" +fi + +[[ -n "$MYSQL_DEBIAN_INSTALLATION" ]] || MYSQL_DEBIAN_INSTALLATION=false + +if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then + if $MYSQL_DEBIAN_INSTALLATION ; then + [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_DEBIAN_MYSQL_CREDENTIALS" + else + [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_MYSQL_CREDENTIALS" + fi +else + [[ "$POSTFIX_DB_TYPE" = "pgsql" ]] || fatal "Unknown Database Type '$POSTFIX_DB_TYPE' (POSTFIX_DB_TYPE)" +fi + +[[ -n "$ENCRYPTION_METHOD" ]] || fatal "Encryption method for Passwords (ENCRYPTION_METHOD) not set!" + +if [[ "$ENCRYPTION_METHOD" =~ dovecot ]]; then + [[ -n "$DOVEADM_PW" ]] || DOVEADM_PW=$DEFAULT_DOVEADM_PW +fi + +[[ -n "$DELETED_MAILBOX_DIR" ]] || DELETED_MAILBOX_DIR=$DEFAULT_DELETED_MAILBOX_DIR +[[ -n "$DELETED_DOMAINS_DIR" ]] || DELETED_DOMAINS_DIR=$DEFAULT_DELETED_DOMAINS_DIR + +# - Vacation +# - + +[[ -n "$VACATION_USER" ]] || VACATION_USER=$DEFAULT_VACATION_USER +[[ -n "$VACATION_GROUP" ]] || VACATION_GROUP=$DEFAULT_VACATION_GROUP + + +# - Determin PHP of all installed versions +# - +echononl "\tGet major numbers of all installed PHP versions" +php_major_versions=`find /usr/local/ -maxdepth 1 -mindepth 1 -type l -name "php-*" -print | cut -d "-" -f2 | sort` +if [[ -z "$php_major_versions" ]]; then + echo_failed + error "Getting major numbers of installed PHP versions failed! No installed PHP versiond found!" +else + echo_ok +fi + +# - Get the latest PHP version +# - +echononl "\tGet major number of latest installed PHP version" +php_latest_ver="" +if [[ -n "$php_major_versions" ]]; then + for _ver in $php_major_versions ; do + if [[ -z "$php_latest_ver" ]] ; then + php_latest_ver=$_ver + elif [[ "${_ver%.*}" -gt "${php_latest_ver%.*}" ]] ; then + php_latest_ver=$_ver + elif [[ "${_ver%.*}" -eq "${php_latest_ver%.*}" ]] ; then + [[ "${_ver#*.}" -gt "${php_latest_ver#*.}" ]] && php_latest_ver=$_ver + fi + done + echo_ok +else + echo_skipped + warn "Getting major number of latest installed PHP version failed! - No installed PHP versiond found!" +fi + +# - Is 'systemd' supported on this system +# - +if [ "X`which systemd`" = "X" ]; then + SYSTEMD_EXISTS=false +else + SYSTEMD_EXISTS=true +fi + + +echo "" +echo "" +echo -e "\033[1;32mSettings for installation of \033[1;37mPostfix Admin / Vacation\033[m" +echo "" +echo -e "\tPostfix Admin Version................: $PF_ADMIN_VERSION" +echo "" +echo -e "\tName of the Website..................: $WEBSITE_NAME" +echo "" +echo -e "\tIPv4 Address.........................: $IPV4" +echo -e "\tIPv6 Address.........................: $IPV6" +echo "" +echo -e "\tApache from Debian Package System....: $APACHE_DEBIAN_INSTALLATION" +echo -e "\tApache User..........................: $HTTP_USER" +echo -e "\tApache Group.........................: $HTTP_GROUP" +echo -e "\tApache VHOST Directory...............: $APACHE_VHOST_DIR" +echo -e "\tApache LOG Directory.................: $APACHE_LOG_DIR" +echo "" +echo -e "\tApache Cert directory................: $APACHE_CERT_DIR" +echo -e "\tWebsite Certificate..................: $APACHE_SERVER_CERT" +if [[ -n "$CERT_ChainFile" ]] ; then + echo -e "\tCertificate Chain File...............: $CERT_ChainFile" +fi +echo -e "\tWebsite Key..........................: $APACHE_SERVER_KEY" +echo "" +echo -e "\tWebmasters E-Mail Address............: $WEBMASTER_EMAIL" +echo -e "\tBase Directory of PFA Website........: $WEBSITE_BASEDIR" +echo "" +echo -e "\tType of PHP connection...............: $PHP_TYPE" +echo "" +echo -e "\tInstalled PHP versions...............: $php_major_versions" +echo -e "\tNewest PHP Version...................: $php_latest_ver" +echo "" +if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then + echo -e "\tDatabase type of Postfix Database....: MySQL" + echo -e "\tMySQL from Debian Package System.....: $MYSQL_DEBIAN_INSTALLATION" +else + echo -e "\tDatabase type of Postfix Database....: PostgreSQL" +fi +echo -e "\tHost of Postfix Database.............: $POSTFIX_DB_HOST" +echo -e "\tName of Postfix Database.............: $POSTFIX_DB_NAME" +echo -e "\tUser of Postfix Database.............: $POSTFIX_DB_USER" +echo -e "\tPassword of Postfix Database.........: $POSTFIX_DB_PASS" +if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then + echo -e "\tMySQL Credentials (root access)......: $MYSQL_CREDENTIALS" +fi +echo "" +echo -e "\tEncryption Method used for Passwords.: $ENCRYPTION_METHOD" +if [[ "$ENCRYPTION_METHOD" =~ dovecot ]]; then + echo -e "\t'doveadm' binary.....................: $DOVEADM_PW" +fi +echo "" +echo -e "\tDirectory for deleted mailboxes......: $DELETED_MAILBOX_DIR" + +echo -e "\tDirectory for deleted mail domains...: $DELETED_DOMAINS_DIR" +echo "" +echo -e "\tHostname for Vacation Messages.......: $AUTOREPLY_HOSTNAME" +echo -e "\tUser of vacation script..............: $VACATION_USER" +echo -e "\tGroup of vacation script.............: $VACATION_GROUP" +echo "" +echo -e "\tSystem supports systemd..............: $SYSTEMD_EXISTS" +echo "" +echo "" + +echo "" +echo -n "Type upper case 'YES' to continue executing with this parameters: " +read OK +if [[ "$OK" = "YES" ]] ; then + echo "" + echo "" + echo -e "\t\033[1;32mGoing to install Postfix Admin / Vacation \033[1;37m\033[m" +else + fatal "Abort by user request - Answer as not 'YES'" +fi + + + _log_dir=${_src_base_dir}/log-postfixadmin-$_version +echo -e "\n\n\t\033[37m\033[1mPre-installion tasks ..\033[m\n" -## - Create temp directory for php -## - -mkdir -p ${APACHE_BASE_WEBDIR}/${HOSTNAME}/{logs,sessions,tmp} -chown ${APACHE_USER}:${APACHE_GROUP} ${APACHE_BASE_WEBDIR}/${HOSTNAME}/{sessions,tmp} - -# - Determin PHP all Versions +# - Datenbank etstellen: # - -_php_major_versions=`find /usr/local/ -maxdepth 1 -mindepth 1 -type l -name "php-*" -print | cut -d "-" -f2 | sort` - -# - Get the lates PHP version +# - MySQL/PostgreSQL Datenbank erstellen # - -php_apache_ver="" -for _ver in $_php_major_versions ; do - if [[ -z "$php_apache_ver" ]] ; then - php_apache_ver=$_ver - elif [[ "${_ver%.*}" -gt "${php_apache_ver%.*}" ]] ; then - php_apache_ver=$_ver - elif [[ "${_ver%.*}" -eq "${php_apache_ver%.*}" ]] ; then - [[ "${_ver#*.}" -gt "${php_apache_ver#*.}" ]] && php_apache_ver=$_ver +# - +_failed=false +> $log_file +echononl "\tCreate Postfix Database '$POSTFIX_DB_NAME'" +if [ "$POSTFIX_DB_TYPE" = "mysql" ]; then + echo -n " (MySQL).." + if ! mysql $mysql_credential_args -N -s -e \ + "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$POSTFIX_DB_NAME'" 2>> $log_file \ + | grep $POSTFIX_DB_NAME >> $log_file 2>&1 ; then + mysql $mysql_credential_args -N -s -e \ + "CREATE DATABASE IF NOT EXISTS $POSTFIX_DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci" >> $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + mysql $mysql_credential_args -N -s -e \ + "GRANT ALL ON $POSTFIX_DB_NAME.* TO '$POSTFIX_DB_USER'@'localhost' IDENTIFIED BY '$POSTFIX_DB_PASS'" >> $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + mysql $mysql_credential_args -N -s -e "FLUSH PRIVILEGES" >> $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + if $_failed; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi + else + echo_skipped + fi +elif [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then + echo -n " (PostgreSQL).." + count=`su - postgres -c "psql -q -A -t -l" | grep -c -e "^$POSTFIX_DB_NAME"` + if [ $count -eq 0 ];then + echo "CREATE ROLE $POSTFIX_DB_USER WITH LOGIN NOCREATEDB NOCREATEROLE NOSUPERUSER ENCRYPTED PASSWORD '$POSTFIX_DB_PASS'" \ + | su - postgres -c "psql" >> $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + su - postgres -c "createdb -E utf8 -O $POSTFIX_DB_USER $POSTFIX_DB_NAME" >> $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + if $_failed; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi + else + echo_skipped + fi +fi + +echononl "\tInstall needed debian packages.." +needed_packages="" +_needed_packages=" + libdbi-perl + libmime-encwords-perl + libemail-valid-perl + libmail-sendmail-perl + liblog-log4perl-perl + libmail-sender-perl + libdbi-dev + cpanminus" +if [[ "$POSTFIX_DB_TYPE" = "pgsql" ]] ; then + _needed_packages="$_needed_packages + libdbd-pgsql + libdbd-pg-perl + libdbi-perl + libdbi-dev" +else + _needed_packages="$_needed_packages + libdbd-mysql + libdbd-mysql-perl" +fi +for _pkg in $_needed_packages ; do + if aptitude search "$_pkg" | grep " $_pkg " | grep -e "^i" > /dev/null 2>&1 ; then + continue + else + needed_packages="$needed_packages $_pkg" fi done +if [[ -n "$needed_packages" ]]; then + DEBIAN_FRONTEND=noninteractive apt-get -y install $needed_packages > /dev/null 2> "$log_file" + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +echononl "\tInstall database related CPAN Modules" +_failed=false +> $log_file +_needed_cpan_modules=" + CPAN + DBI" +if [[ "$POSTFIX_DB_TYPE" = "pgsql" ]] ; then + _needed_cpan_modules="$_needed_cpan_modules + DBD::Pg" +else + _needed_cpan_modules="$_needed_cpan_modules + DBD::mysql" +fi +for _module in $_needed_cpan_modules ; do + cpanm -q --skip-installed $_module >> "$log_file" 2>&1 + if [[ "$?" -ne 0 ]] ; then + error "$(cat $tmp_err_msg)" + fi +done +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -if $_use_mod_fcgid ; then - mkdir -p ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf - chown root:$APACHE_USER ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf - chmod 750 ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf + +echo -e "\n\n\t\033[37m\033[1mBase install Postfixadmin..\033[m\n" - for _version in $_php_major_versions ; do - cp /usr/local/php-${_version}/etc/php.ini ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/php.ini-$_version - chown root:$APACHE_USER ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/php.ini-$_version - chmod 640 ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/php.ini-$_version +# - Get postfixadmin sources if not yet downloaded +# - +echononl "\tDownload 'postfixadmin-${PF_ADMIN_VERSION}'.." +if [[ ! -f "${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION}.tar.gz" ]];then + wget -O ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION}.tar.gz http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${PF_ADMIN_VERSION}/postfixadmin-${PF_ADMIN_VERSION}.tar.gz > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi - cat < ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid-$_version +echononl "\tBackup existing source directory 'postfixadmin-${PF_ADMIN_VERSION}'.." +if [[ -d "${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION}" ]]; then + mv ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION} \ + ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION}.$(date +%Y%m%d-%H%M) + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +echononl "\tUnpack 'postfixadmin-${PF_ADMIN_VERSION}.." +gunzip < ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION}.tar.gz | tar -C ${_src_base_dir} -xf - 2> $log_file +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tCreate '$WEBSITE_BASEDIR'.." +if [[ ! -d "$WEBSITE_BASEDIR" ]]; then + mkdir $WEBSITE_BASEDIR > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +echononl "\tBackup existing web-directory 'postfixadmin-${PF_ADMIN_VERSION}'.." +if [[ -d "${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}" ]]; then + mv ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION} \ + ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}.`date +%Y%m%d-%H%M` > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + + +echononl "\tCopy Postfix Admin Directory to web-directory" +cp -a ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION} ${WEBSITE_BASEDIR}/ +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +_failed=false +echononl "\tSet Permissions on \n\t ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}" +find ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION} -type f -print0 2> $log_file \ + | xargs -0 chmod 640 2>> $log_file +if [[ $? -ne 0 ]] ; then + _failed=true +fi + +find ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION} -type f -print0 2>> $log_file \ + | xargs -0 chown root:$HTTP_GROUP 2>> $log_file +if [[ $? -ne 0 ]] ; then + _failed=true +fi + +find ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION} -type d -print0 2>> $log_file \ + | xargs -0 chown root:$HTTP_GROUP 2>> $log_file +if [[ $? -ne 0 ]] ; then + _failed=true +fi + +chown -R ${HTTP_USER}:$HTTP_GROUP ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/templates_c >> $log_file 2>&1 +if [[ $? -ne 0 ]] ; then + _failed=true +fi + +if $_failed; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + + +echononl "\tRemove existing symlink '${WEBSITE_BASEDIR}/htdocs'" +if [[ -h "${WEBSITE_BASEDIR}/htdocs" ]]; then + rm ${WEBSITE_BASEDIR}/htdocs + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi +echononl "\tCreate Symlink for DocumentRoot Directory 'htdocs'.." +if [[ ! -h "${WEBSITE_BASEDIR}/htdocs" ]]; then + ln -s postfixadmin-${PF_ADMIN_VERSION} ${WEBSITE_BASEDIR}/htdocs > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + + + + +if [[ "$PHP_TYPE" = "fcgid" ]] ; then + echo -e "\n\n\t\033[37m\033[1mConfiguration for FastCGI PHP Connections (mod_fcgid)..\033[m\n" +elif [[ "$PHP_TYPE" = "php_fpm" ]] ; then + echo -e "\n\n\t\033[37m\033[1mConfiguration for PHP-FPM Connection ..\033[m\n" +elif [[ "$PHP_TYPE" = "mod_php" ]] ; then + echo -e "\n\n\t\033[37m\033[1mConfiguration for PHP Connection using Apache's mod_php..\033[m\n" +else + fatal "Wrong PHP Type '$PHP_TYPE' (PHP_TYPE)!" +fi + +echononl "\tCreate Log Directory '$APACHE_LOG_DIR'.." +if [[ ! -d "$APACHE_LOG_DIR" ]]; then + mkdir $APACHE_LOG_DIR > $log_file 2>&1 + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +if [[ "$PHP_TYPE" = "fcgid" ]] ; then + + _dirs="${WEBSITE_BASEDIR}/sessions ${WEBSITE_BASEDIR}/tmp ${WEBSITE_BASEDIR}/logs" + for _dir in $_dirs ; do + echononl "\tCreate Directory '$_dir'" + if [[ ! -d "$_dir" ]]; then + mkdir $_dir > $log_file 2>&1 + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + else + echo_skipped + fi + + echononl "\tSet Permissons on '$_dir'.." + chown ${HTTP_USER}:${HTTP_GROUP} $_dir > $log_file 2>&1 + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + done + + echononl "\tCreate directory '${WEBSITE_BASEDIR}/conf'.." + if [[ ! -d "${WEBSITE_BASEDIR}/conf" ]]; then + mkdir ${WEBSITE_BASEDIR}/conf > $log_file 2>&1 + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + else + echo_skipped + fi + + echononl "\tSet Permissions on '${WEBSITE_BASEDIR}/conf'.." + _failed=false + chown root:$HTTP_USER ${WEBSITE_BASEDIR}/conf > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + chmod 750 ${WEBSITE_BASEDIR}/conf > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + if ! $_failed ; then + echo_ok + fi + + for _version in $php_major_versions ; do + + echononl "\tPlace file '${WEBSITE_BASEDIR}/conf/php.ini-$_version'" + cp /usr/local/php-${_version}/etc/php.ini ${WEBSITE_BASEDIR}/conf/php.ini-$_version > $log_file 2>&1 + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + + echononl "\tSet Permissions on '${WEBSITE_BASEDIR}/conf'.." + _failed=false + chown root:$HTTP_USER ${WEBSITE_BASEDIR}/conf/php.ini-$_version > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + chmod 640 ${WEBSITE_BASEDIR}/conf/php.ini-$_version > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + if ! $_failed ; then + echo_ok + fi + + echononl "\tCreate file '${WEBSITE_BASEDIR}/conf/fcgid-$_version'.." + cat < ${WEBSITE_BASEDIR}/conf/fcgid-$_version 2> $log_file #!/bin/sh -export PHPRC="${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/" -export TMPDIR="${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" +export PHPRC="${WEBSITE_BASEDIR}/conf/" +export TMPDIR="${WEBSITE_BASEDIR}/tmp" # PHP child process management (PHP_FCGI_CHILDREN) should # always be disabled with mod_fcgid, which will only route one # request at a time to application processes it has spawned; @@ -147,410 +771,885 @@ export PHP_FCGI_CHILDREN exec /usr/local/php-${_version}/bin/php-cgi EOF + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi - chown root:$APACHE_USER ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid-$_version - chmod 750 ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid-$_version + echononl "\tSet Permissions on '${WEBSITE_BASEDIR}/conf/fcgid-$_version'.." + _failed=false + chown root:$HTTP_USER ${WEBSITE_BASEDIR}/conf/fcgid-$_version > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + chmod 750 ${WEBSITE_BASEDIR}/conf/fcgid-$_version > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + if ! $_failed ; then + echo_ok + fi done - ln -s php.ini-$_version ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/php.ini - ln -s fcgid-$_version ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid + # - Create Symlinks in fcgid's config directory + # - + if [[ "$_version" = "$php_latest_ver" ]]; then + echononl "\tCreate symlink '${WEBSITE_BASEDIR}/conf/php.ini'.." + if [[ ! -h "${WEBSITE_BASEDIR}/conf/php.ini" ]]; then + ln -s php.ini-$_version ${WEBSITE_BASEDIR}/conf/php.ini > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + else + echo_skipped + fi - cat << EOF > ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/changes.php.ini.txt -error_log = "${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_errors.log" -sys_temp_dir = "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" -upload_tmp_dir = "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" -session.save_path = "${APACHE_BASE_WEBDIR}/${HOSTNAME}/sessions" -soap.wsdl_cache_dir = "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" + echononl "\tCreate symlink '${WEBSITE_BASEDIR}/conf/fcgid'.." + if [[ ! -h "${WEBSITE_BASEDIR}/conf/fcgid" ]]; then + ln -s fcgid-$_version ${WEBSITE_BASEDIR}/conf/fcgid > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + else + echo_skipped + fi + + fi + + echononl "\tCreate file '${WEBSITE_BASEDIR}/conf/changes.php.ini.txt'.." + cat << EOF > ${WEBSITE_BASEDIR}/conf/changes.php.ini.txt +error_log = "${WEBSITE_BASEDIR}/logs/php_errors.log" +sys_temp_dir = "${WEBSITE_BASEDIR}/tmp" +upload_tmp_dir = "${WEBSITE_BASEDIR}/tmp" +session.save_path = "${WEBSITE_BASEDIR}/sessions" +soap.wsdl_cache_dir = "${WEBSITE_BASEDIR}/tmp" EOF + if [[ "$?" = "0" ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi - touch ${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_errors.log - chown ${APACHE_USER}:${APACHE_GROUP} ${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_errors.log + echononl "\tCreate file '${WEBSITE_BASEDIR}/logs/php_errors.log'.." - _php_ini_file="${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/php.ini-*" + if [[ ! -f "${WEBSITE_BASEDIR}/logs/php_errors.log" ]]; then + touch ${WEBSITE_BASEDIR}/logs/php_errors.log > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + chown ${HTTP_USER}:${HTTP_GROUP} ${WEBSITE_BASEDIR}/logs/php_errors.log > $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + if ! $_failed ; then + echo_ok + fi + else + echo_skipped + fi + _php_ini_file="${WEBSITE_BASEDIR}/conf/php.ini-*" + + echononl "\tAdjust files '${WEBSITE_BASEDIR}/conf/php.ini-*'.." + _failed=false _key=error_log - _val="${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_errors.log" + _val="${WEBSITE_BASEDIR}/logs/php_errors.log" if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then #sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file - perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file - _retval=$? + perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file > $log_file 2>&1 elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then - sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file - _retval=$? + sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file > $log_file 2>&1 + fi + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" fi _key="sys_temp_dir" - _val="${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" + _val="${WEBSITE_BASEDIR}/tmp" if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then #sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file - perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file - _retval=$? + perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file > $log_file 2>&1 elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then - sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file - _retval=$? + sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file > $log_file 2>&1 + fi + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" fi _key="upload_tmp_dir" - _val="${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" + _val="${WEBSITE_BASEDIR}/tmp" if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then #sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file - perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file - _retval=$? + perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file > $log_file 2>&1 elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then - sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file - _retval=$? + sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file > $log_file 2>&1 + fi + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" fi _key="session.save_path" - _val="${APACHE_BASE_WEBDIR}/${HOSTNAME}/sessions" + _val="${WEBSITE_BASEDIR}/sessions" if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then #sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file - perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file - _retval=$? + perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file > $log_file 2>&1 elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then - sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file - _retval=$? + sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file > $log_file 2>&1 + fi + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" fi _key="soap.wsdl_cache_dir" - _val="${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" + _val="${WEBSITE_BASEDIR}/tmp" if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then #sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file - perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file - _retval=$? + perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file > $log_file 2>&1 elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then - sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file - _retval=$? + sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file > $log_file 2>&1 + fi + if [[ $? -ne 0 ]]; then + _failed=true + error "$(cat $log_file)" + fi + + if ! $_failed ; then + echo_ok fi fi -## - DocumentRoot -## - -mkdir -p ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs -#chown ${APACHE_USER}:$APACHE_GROUP ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs + +echo -e "\n\n\t\033[37m\033[1mConfigure Apache Webservice\033[m\n" -cat < ${APACHE_VHOST_DIR}/$HOSTNAME.conf -# -- ${HOSTNAME} -- # +SSLCertificateChainFile="" +# - Create SSCertificateChainFile rule for apache vhost entry +# - +echononl "\tCreate SSCertificateChainFile rule for apache vhost entry" +if [ -n "$CERT_ChainFile" ];then + SSLCertificateChainFile="SSLCertificateChainFile ${APACHE_CERT_DIR}/$CERT_ChainFile" + echo_ok +else + echo_skipped +fi - - ServerAdmin $ADMIN_EMAIL +echo "" - ServerName $HOSTNAME + +# - Save existing vhost file +# - +echononl "\tSave existing vhost file.." +if [ -f ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf ];then + if [[ -f "${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf" ]]; then + mv ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf.`date +%Y%m%d-%H%M` > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi + else + echo_skipped + fi +else + echo_skipped +fi + +echononl "\tCreate VHost Configuration '${WEBSITE_NAME}.conf'.." +_failed=false +cat < ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file +# -- $WEBSITE_NAME -- # + + + + ServerAdmin $WEBMASTER_EMAIL + + ServerName $WEBSITE_NAME RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - CustomLog ${APACHE_LOG_DIR}/${HOSTNAME}-access.log combined - ErrorLog ${APACHE_LOG_DIR}/${HOSTNAME}-error.log + CustomLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-access.log combined + ErrorLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-error.log - + - ServerAdmin $ADMIN_EMAIL + ServerAdmin $WEBMASTER_EMAIL + + ServerName $WEBSITE_NAME - ServerName $HOSTNAME EOF -if $_use_mod_php_fpm ; then - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf +if [[ $? -ne 0 ]]; then + failed=true +fi - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" +if [[ "$PHP_TYPE" = "mod_php" ]] ; then + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + ## - its allowed to overwrite by .htaccess + ## - + php_value error_reporting "E_ALL & ~E_NOTICE" + + ## - Overwriting by .htaccess NOT allowd + ## - + php_admin_value upload_tmp_dir "${WEBSITE_BASEDIR}/tmp/" + php_admin_flag log_errors on + php_admin_value error_log "${WEBSITE_BASEDIR}/logs/php_error.log" + + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" +EOF + if [[ $? -ne 0 ]]; then + failed=true + fi +elif [[ "$PHP_TYPE" = "fcgid" ]]; then + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" + + Require all granted + FCGIWrapper ${WEBSITE_BASEDIR}/conf/fcgid .php + + SetHandler fcgid-script + + Options +ExecCGI + +EOF + if [[ $? -ne 0 ]]; then + failed=true + fi +elif [[ "$PHP_TYPE" = "php_fpm" ]]; then + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" - SetHandler "proxy:unix:/tmp/php-${php_apache_ver}-fpm.www.sock|fcgi://127.0.0.1" + SetHandler "proxy:unix:/tmp/php-${php_latest_ver}-fpm.www.sock|fcgi://127.0.0.1" DirectoryIndex index.php index.html EOF + if [[ $? -ne 0 ]]; then + failed=true + fi +fi +cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file -elif $_use_mod_php ; then - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf + SSLEngine on + # - HTTP Strict Transport Security (HSTS) + # - + # - HSTS tells a browser that the website should only be accessed through + # - a secure connection. The HSTS header will be remembered by a standard + # compliant browser for max-age seconds. + # - + # - Remember this settings for 1 year + # - + Header always set Strict-Transport-Security "max-age=31536000" + + SSLCertificateFile ${APACHE_CERT_DIR}/$APACHE_SERVER_CERT + SSLCertificateKeyFile ${APACHE_CERT_DIR}/$APACHE_SERVER_KEY + $SSLCertificateChainFile + + CustomLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-access.log combined + ErrorLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-error.log + + + + +# --- +# --- IPv6 +# --- + + + + ServerAdmin $WEBMASTER_EMAIL + + ServerName $WEBSITE_NAME + + RewriteEngine on + RewriteCond %{HTTPS} !=on + RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] + + CustomLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-access.log combined + ErrorLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-error.log + + + + + + + ServerAdmin $WEBMASTER_EMAIL + + ServerName $WEBSITE_NAME + +EOF +if [[ $? -ne 0 ]]; then + _failed=true +fi + +if [[ "$PHP_TYPE" = "mod_php" ]]; then + + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file ## - its allowed to overwrite by .htaccess ## - php_value error_reporting "E_ALL & ~E_NOTICE" ## - Overwriting by .htaccess NOT allowd - php_admin_value sys_temp_dir "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" - php_admin_value upload_tmp_dir "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" + ## - + php_admin_value upload_tmp_dir "${WEBSITE_BASEDIR}/tmp/" php_admin_flag log_errors on - php_admin_value error_log "${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_error.log" - php_admin_value session.save_path "${APACHE_BASE_WEBDIR}/${HOSTNAME}/sessions" + php_admin_value error_log "${WEBSITE_BASEDIR}/logs/php_error.log" - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" EOF + if [[ $? -ne 0 ]]; then + _failed=true + fi +elif [[ "$PHP_TYPE" = "fcgid" ]]; then + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" + + Require all granted + FCGIWrapper ${WEBSITE_BASEDIR}/conf/fcgid .php + + SetHandler fcgid-script + + Options +ExecCGI + +EOF + if [[ $? -ne 0 ]]; then + _failed=true + fi +elif [[ "$PHP_TYPE" = "php_fpm" ]]; then + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" + + + SetHandler "proxy:unix:/tmp/php-${php_latest_ver}-fpm.www.sock|fcgi://127.0.0.1" + + + + DirectoryIndex index.php index.html + +EOF + if [[ $? -ne 0 ]]; then + failed=true + fi +fi +cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + + SSLEngine on + + # - HTTP Strict Transport Security (HSTS) + # - + # - HSTS tells a browser that the website should only be accessed through + # - a secure connection. The HSTS header will be remembered by a standard + # compliant browser for max-age seconds. + # - + # - Remember this settings for 1 year + # - + Header always set Strict-Transport-Security "max-age=31536000" + + SSLCertificateFile ${APACHE_CERT_DIR}/$APACHE_SERVER_CERT + SSLCertificateKeyFile ${APACHE_CERT_DIR}/$APACHE_SERVER_KEY + $SSLCertificateChainFile + + CustomLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-access.log combined + ErrorLog ${APACHE_LOG_DIR}/${WEBSITE_NAME}-error.log + + +EOF +if [[ $? -ne 0 ]]; then + _failed=true +fi +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + +if $APACHE_DEBIAN_INSTALLATION ; then + ## - add to /etc/apache2/ports.conf + ## - + ## - NameVirtualHost 46.4.73.217:80 + ## - NameVirtualHost [2a01:4f8:140:34c1::4]:80 + ## - Listen 46.4.73.217:80 + ## - Listen [2a01:4f8:140:34c1::4]:80 + ## - + ## - .. + ## - NameVirtualHost 46.4.73.217:443 + ## - NameVirtualHost [2a01:4f8:140:34c1::4]:443 + ## - Listen 46.4.73.217:443 + ## - Listen [2a01:4f8:140:34c1::4]:443 + ## - + ## - .. + #vim /etc/apache2/ports.conf + + + ## - enable site webmail.warenform.de + ## - + echononl "\tEnable ${WEBSITE_NAME}.conf" + a2ensite ${WEBSITE_NAME}.conf > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +fi + +echononl "\tCreate 'robots.txt'.." +cat < ${WEBSITE_BASEDIR}/htdocs/robots.txt 2> $log_file +User-agent: * +Disallow: / +EOF +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tRestart Apache Webservice.." +if $APACHE_DEBIAN_INSTALLATION ; then + /etc/init.d/apache2 reload > $log_file 2>&1 +else + /etc/init.d/apache2 restart > $log_file 2>&1 +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + + +echo -e "\n\n\t\033[37m\033[1mInstall Vacation\033[m\n" + + +echononl "\tCreate system group '$VACATION_GROUP'" +if ! grep -q "$VACATION_GROUP" /etc/group /etc/group > /dev/null 2>&1 ; then + addgroup --system --gid 65501 $VACATION_GROUP > "$log_file" 2>&1 + if [[ $? -ne 0 ]]; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi +else + echo_skipped +fi + +echononl "\tCreate system user '$VACATION_USER'" +if ! grep -q "$VACATION_USER" /etc/passwd > /dev/null 2>&1 ; then + adduser --system --home /var/spool/vacation --no-create-home --uid 65501 --gid 65501 --shell /usr/sbin/nologin $VACATION_USER > "$log_file" 2>&1 -else - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" - - Require all granted - FCGIWrapper ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid .php - - SetHandler fcgid-script - - Options +ExecCGI - -EOF -fi -cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - SSLEngine on - - ## - HTTP Strict Transport Security (HSTS) - ## - - ## - HSTS tells a browser that the website should only be accessed through - ## - a secure connection. The HSTS header will be remembered by a standard - ## compliant browser for max-age seconds. - ## - - ## - Remember this settings for 1 year - ## - - Header add Strict-Transport-Security "max-age=31536000" - - SSLCertificateFile ${APACHE_CONF_DIR}/$APACHE_SERVER_CERT - SSLCertificateKeyFile ${APACHE_CONF_DIR}/$APACHE_SERVER_KEY - $_SSLCertificateChainFile - - CustomLog ${APACHE_LOG_DIR}/${HOSTNAME}-access.log combined - ErrorLog ${APACHE_LOG_DIR}/${HOSTNAME}-error.log - - - -## ------ -## - IPv6 -## ------ - -# -- ${HOSTNAME} -- # - - - - ServerAdmin $ADMIN_EMAIL - - ServerName $HOSTNAME - - RewriteEngine on - RewriteCond %{HTTPS} !=on - RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - - CustomLog ${APACHE_LOG_DIR}/${HOSTNAME}-access.log combined - ErrorLog ${APACHE_LOG_DIR}/${HOSTNAME}-error.log - - - - - - - ServerAdmin $ADMIN_EMAIL - - ServerName $HOSTNAME -EOF -if $_use_mod_php_fpm ; then - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" - - - SetHandler "proxy:unix:/tmp/php-${php_apache_ver}-fpm.www.sock|fcgi://127.0.0.1" - - - - DirectoryIndex index.php index.html - -EOF - -elif $_use_mod_php ; then - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - ## - its allowed to overwrite by .htaccess - ## - - php_value error_reporting "E_ALL & ~E_NOTICE" - - ## - Overwriting by .htaccess NOT allowd - php_admin_value sys_temp_dir "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" - php_admin_value upload_tmp_dir "${APACHE_BASE_WEBDIR}/${HOSTNAME}/tmp" - php_admin_flag log_errors on - php_admin_value error_log "${APACHE_BASE_WEBDIR}/${HOSTNAME}/logs/php_error.log" - php_admin_value session.save_path "${APACHE_BASE_WEBDIR}/${HOSTNAME}/sessions" - - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" -EOF -else - cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - DocumentRoot "${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/" - - Require all granted - FCGIWrapper ${APACHE_BASE_WEBDIR}/${HOSTNAME}/conf/fcgid .php - - SetHandler fcgid-script - - Options +ExecCGI - -EOF -fi -cat <> ${APACHE_VHOST_DIR}/$HOSTNAME.conf - - SSLEngine on - - ## - HTTP Strict Transport Security (HSTS) - ## - - ## - HSTS tells a browser that the website should only be accessed through - ## - a secure connection. The HSTS header will be remembered by a standard - ## compliant browser for max-age seconds. - ## - - ## - Remember this settings for 1 year - ## - - Header add Strict-Transport-Security "max-age=31536000" - - SSLCertificateFile ${APACHE_CONF_DIR}/$APACHE_SERVER_CERT - SSLCertificateKeyFile ${APACHE_CONF_DIR}/$APACHE_SERVER_KEY - $_SSLCertificateChainFile - - CustomLog ${APACHE_LOG_DIR}/${HOSTNAME}-access.log combined - ErrorLog ${APACHE_LOG_DIR}/${HOSTNAME}-error.log - - - -EOF - -debian_installed_apache=false -if $debian_installed_apache ; then - a2ensite $HOSTNAME -fi - -apachectl configtest -apachectl graceful - - -## - Datenbank etstellen: -## - -## - MySQL/PostgreSQL Datenbank erstellen -## - -## - - -if [ "$_db_type" = "mysql" ]; then - if ! mysql $mysql_credential_args -N -s -e \ - "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$_db_name'" 2>/dev/null \ - | grep $_db_name > /dev/null 2>&1 ; then - mysql $mysql_credential_args -N -s -e \ - "CREATE DATABASE IF NOT EXISTS $_db_name CHARACTER SET utf8 COLLATE utf8_general_ci" - mysql $mysql_credential_args -N -s -e \ - "GRANT ALL ON $_db_name.* TO '$_db_user'@'localhost' IDENTIFIED BY '$_db_pass'" - mysql $mysql_credential_args -N -s -e "FLUSH PRIVILEGES" + if [[ $? -ne 0 ]]; then + echo_failed + error "$(cat $log_file)" + else + echo_ok fi -elif [ "$_db_type" = "pgsql" ]; then - count=`su - postgres -c "psql -q -A -t -l" | grep -c -e "^$_db_name"` - if [ $count -eq 0 ];then - echo "CREATE ROLE $_db_user WITH LOGIN NOCREATEDB NOCREATEROLE NOSUPERUSER ENCRYPTED PASSWORD '$_db_pass'" \ - | su - postgres -c "psql" > /dev/null - su - postgres -c "createdb -E utf8 -O $_db_user $_db_name" +else + echo_skipped +fi + +echononl "\tCreate directory '/var/spool/vacation'" +if [[ ! -d "/var/spool/vacation" ]]; then + mkdir /var/spool/vacation > "$log_file" 2>&1 + if [[ $? -ne 0 ]]; then + echo_failed + error "$(cat $log_file)" + else + echo_ok fi +else + echo_skipped fi -## - Get postfixadmin sources if not yet downloaded -## - -cd $_src_base_dir -if [ ! -f postfixadmin-${_pf_admin_version}.tar.gz ];then - wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${_pf_admin_version}/postfixadmin-${_pf_admin_version}.tar.gz +echononl "\tSet Permissions on directoy '/var/spool/vacation'" +chown -R ${VACATION_USER}:$VACATION_GROUP /var/spool/vacation > "$log_file" 2>&1 +if [[ $? -ne 0 ]]; then + echo_failed + error "$(cat $log_file)" +else + echo_ok fi -if [ -d postfixadmin-${_pf_admin_version} ]; then - mv postfixadmin-${_pf_admin_version} postfixadmin-${_pf_admin_version}.`date "+%Y%m%d-%H%M"` +echononl "\tBackup existing script 'vacation.pl'" +if [[ -f "/var/spool/vacation/vacation.pl" ]] ; then + mv /var/spool/vacation/vacation.pl /var/spool/vacation/vacation.pl.$(date +%Y%m%d-%H%M) > "$log_file" 2>&1 + if [[ $? -ne 0 ]]; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi +else + echo_skipped fi -gunzip < postfixadmin-${_pf_admin_version}.tar.gz | tar -xf - - -## - Get postfixadmin patch if not yet downloaded -## - -## - That patch adds the capability to include the subject of the original mail in the -## - subject of the vacation message. -## - A good vacation subject could be: 'Re: $SUBJECT' -## - Also corrected log entry about "Already informed ..." to show the $orig_from, not $email -## - -## - !! Note: -## - Since Postfixadmin version 2.9.1, this patch is already included -## - -#if [ ! -f /usr/local/src/mailsystem/tarballs/vacation.pl_SUBJECT.patch ];then -# cd /usr/local/src/mailsystem/tarballs -# wget http://sourceforge.net/p/postfixadmin/patches/_discuss/thread/69a7ce85/b4e9/attachment/vacation.pl_SUBJECT.patch -# cd /usr/local/src/mailsystem -#fi - -## - Apply patch -## - -#patch -p0 /usr/local/src/mailsystem/postfixadmin-${_pf_admin_version}/VIRTUAL_VACATION/vacation.pl \ -# /usr/local/src/mailsystem/tarballs/vacation.pl_SUBJECT.patch -## - postfixadmin, version 2.91 is broken if database backend is PostgreSQL -## - -## - I have written a pacth, which fixes that errors -## - -#patch /usr/local/src/mailsystem/postfixadmin-${_pf_admin_version}/VIRTUAL_VACATION/vacation.pl \ -# /usr/local/src/mailsystem/tarballs/vacation-4.0r1.pl_PGSQL.patch - - -if [ -f /var/spool/vacation/vacation.pl ]; then - mv /var/spool/vacation/vacation.pl /var/spool/vacation/vacation.pl.`date "+%Y%m%d-%H%M"` +echononl "\tCopy vacation script to '/var/spool/vacation/vacation.pl'" +_vacacion_script="$(find ${_src_base_dir}/postfixadmin-${PF_ADMIN_VERSION} -type f -name vacation.pl -print 2>/dev/null)" +if [[ -z "$(trim "$_vatacion_script")" ]] ; then + cp -a ${_vacacion_script} /var/spool/vacation/ > "$log_file" 2>&1 + if [[ $? -eq 0 ]];then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + error "Vacation script not found!" fi -cp ${_src_base_dir}/postfixadmin-${_pf_admin_version}/VIRTUAL_VACATION/vacation.pl \ - /var/spool/vacation/vacation.pl -## - Encoding does not work as exspected. -## - -## - NOTE: -## - this IS NOT a fix, but a workaround -## - +# - Encoding does not work as exspected. +# - +# - NOTE: +# - this IS NOT a fix, but a workaround +# - +echononl "\tWorkaround, because encoding does not work as exspected." perl -i -n -p -e "s/(\s*\'ctype\'\s* =>\s*)\'text\/plain.*$/\1\'text\/plain; charset=iso-8859-1\',/" \ - /var/spool/vacation/vacation.pl + /var/spool/vacation/vacation.pl > "$log_file" 2>&1 +if [[ $? -eq 0 ]];then + echo_ok + info "This IS NOT a fix, but a workaround." +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tSet Permission on vacation script" +_failed=false +chown ${VACATION_USER}:$VACATION_GROUP /var/spool/vacation/vacation.pl > "$log_file" 2>&1 +if [[ $? -ne 0 ]]; then + _failed=true +fi +chmod 700 /var/spool/vacation/vacation.pl > "$log_file" 2>&1 +if [[ $? -ne 0 ]]; then + _failed=true +fi +if $_failed ;then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + +# - Script vacation.pl tries to reads setting from +# - +# - /etc/mail/postfixadmin/vacation.conf +# - /etc/postfixadmin/vacation.conf +# - +# - Instead of changing this script, we put the needed entries +# - to file /etc/postfixadmin/vacation.conf: +# - +echononl "\tCreate directory '/etc/postfixadmin' " +if [[ ! -d "/etc/postfixadmin" ]]; then + mkdir /etc/postfixadmin > "$log_file" 2>&1 + if [[ $? -eq 0 ]];then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +echononl "\tBackup existing file '/etc/postfixadmin/vacation.conf'" +if [[ -f "/etc/postfixadmin/vacation.conf" ]]; then + mv /etc/postfixadmin/vacation.conf /etc/postfixadmin/vacation.conf.$(date +%Y%m%d-%H%M) > "$log_file" 2>&1 + if [[ $? -eq 0 ]];then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +# - Create configuration file '/etc/postfixadmin/vacation.conf' +# - +echononl "\tCreate configuration file '/etc/postfixadmin/vacation.conf'" +if [[ "$POSTFIX_DB_TYPE" = "pgsql" ]]; then + _db_type="Pg" +else + _db_type="mysql" +fi + +cat < /etc/postfixadmin/vacation.conf 2> "$log_file" +\$db_type = '$_db_type'; +\$db_username = '${POSTFIX_DB_USER}'; +\$db_password = '${POSTFIX_DB_PASS}'; +\$db_name = '${POSTFIX_DB_NAME}'; +\$vacation_domain = '${AUTOREPLY_HOSTNAME}'; +\$syslog = 0; +\$log_to_file = 1; +\$logfile = '/var/log/vacation.log'; +\$log_level = 1; +\$interval = 60*60*24; +EOF +if [[ $? -eq 0 ]];then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi -chown ${vacation_user}:${vacation_group} /var/spool/vacation/vacation.pl -chmod 700 /var/spool/vacation/vacation.pl +echononl "\tCreate logfile /var/log/vacation.log" +touch /var/log/vacation.log > "$log_file" 2>&1 +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi +echononl "\tSet permissions on /var/log/vacation.log" +chown ${VACATION_USER}:$VACATION_GROUP /var/log/vacation.log > "$log_file" 2>&1 +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi +echononl "\tConfigure logrotation for '/var/log/vacation.log'" +cat < /etc/logrotate.d/vacation 2> "$log_file" +/var/log/vacation.log { + daily + start 0 + rotate 7 + missingok + compress + delaycompress + notifempty + create 640 vacation vacation + copytruncate +} +EOF +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi -## - Use 'Re: $SUBJECT' as the default subject template in postfixadmin +# - Create an entry in /etc/hosts for the (non-existant domain) +# - $AUTOREPLY_HOSTNAME +# - +# - add: +# - +# - 127.0.0.1 $AUTOREPLY_HOSTNAME +# - +echononl "\tCreate entry in /etc/hosts for '$AUTOREPLY_HOSTNAME'" +if ! grep -q "$AUTOREPLY_HOSTNAME" /etc/hosts > $log_file 2>&1 ; then + perl -i -n -p -e"s#(^\s*127.0.0.1\s+localhost.*)#\1\n\n127.0.0.1 ${AUTOREPLY_HOSTNAME}" /etc/hosts > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +# - Define the transport type in the Postfix master file +# - /etc/postfix/master.cf +# - +# - vacation unix - n n - - pipe +# - flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient} +# - +echononl "\tDefine transport for vacation in /etc/postfix/master.cf" +if ! grep -q -E "^\s*vacation\s+unix" /etc/postfix/master.cf > $log_file 2>&1 ; then + cat <> /etc/postfix/master.cf + +vacation unix - n n - - pipe + flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f \${sender} -- \${recipient} +EOF + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +# - Setup the transport maps file /etc/postfix/transport +# - +# - add line: +# - +# - $AUTOREPLY_HOSTNAME vacation: +# - +echononl "\tSetup the transport maps for vacation domain in '/etc/postfix/transport'" +if ! grep -q -E "^\s*$AUTOREPLY_HOSTNAME\s+vacation:" /etc/postfix/transport > $log_file 2>&1 ; then + _failed=false + echo "$AUTOREPLY_HOSTNAME vacation:" >> /etc/postfix/transport 2> $log_file + if [[ $? -ne 0 ]] ; then + _failed=true + fi + postmap btree:/etc/postfix/transport > $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true + fi + if [[ $? -ne 0 ]]; then + _failed=true + fi + if $_failed ;then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi +else + echo_skipped +fi + +check_entry_main_cf_arr["transport_maps"]="btree:/etc/postfix/transport" +# - Add 'btree:/etc/postfix/transport' ton parameter transport_maps in /etc/postfix/main.cf +# - +# - take care the entry for transport_maps in /etc/postfix/main.cf +# - contains "btree:/etc/postfix/transport" +# - +echononl "\tAdd 'btree:/etc/postfix/transport' to parameter transport_maps" +if ! grep -q "btree:/etc/postfix/transport" /etc/postfix/main.cf > $log_file 2>&1 ; then + perl -i -n -p -e "s#(^transport_maps\s+=.*)#\1\n btree:/etc/postfix/transport#" /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi + +echononl "\tReload/Restart postfix" +if $SYSTEMD_EXISTS ; then + systemctl reload postfix > $log_file 2>&1 +else + /etc/init.d/postfix reload > $log_file 2>&1 +fi +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + + +echo -e "\n\n\t\033[37m\033[1mConfigure Postfix Admin\033[m\n" + +pfa_conf_file=${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/config.inc.php + +# - Use 'Re: $SUBJECT' as the default subject template for vacation +# - in postfixadmin +# - +echononl "\tUse 'Re: \$SUBJECT' as default subject of autorespons messages" +perl -i -n -p -e "s#(^\s*\\\$PALANG\['pUsersVacation_subject_text'\].*$)#\#\1\n\\\$PALANG['pUsersVacation_subject_text'] = 'Re: \\\$SUBJECT';#" ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/languages/*.lang > $log_file 2>&1 +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tAdjust file 'languages/de.lang'" +perl -i -n -p -e "s#^(\s*\\\$PALANG\['reply_every_mail'\]\s+=.*)#\1\n\\\$PALANG['reply_once_per_day'] = 'Einmal pro Tag antworten';#" \ + ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/languages/de.lang >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$PALANG\['reply_every_mail'\]\s+=.*)#\1\n\\\$PALANG['reply_once_per_day'] = 'Reply once per day';#" \ + ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/languages/en.lang >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + + +## - Adjust Postfix Admin's Configuration - Part 1 ## - -perl -i -n -p -e "s#(^\s*\\\$PALANG\['pUsersVacation_subject_text'\].*$)#\#\1\n\\\$PALANG['pUsersVacation_subject_text'] = 'Re: \\\$SUBJECT';#" ${_src_base_dir}/postfixadmin-${_pf_admin_version}/languages/*.lang - - -cp -a ${_src_base_dir}/postfixadmin-${_pf_admin_version} ${APACHE_BASE_WEBDIR}/$HOSTNAME - -cd ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} -find -type f -print0 | xargs -0 chmod 640 -find -type f -print0 | xargs -0 chown root:$APACHE_GROUP -find -type d -print0 | xargs -0 chown root:$APACHE_GROUP -chown -R ${APACHE_USER}:$APACHE_GROUP templates_c - -mkdir -p ${APACHE_BASE_WEBDIR}/$HOSTNAME/logs - -cd ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} - ## - configure postfixadmin ## - ## - edit file config.inc.php ## - ## - set: ## - -## - $CONF['postfix_admin_url'] = 'https://$HOSTNAME'; -## - ## - $CONF['default_language'] = 'de'; -## - $CONF['database_type'] = '$_db_type'; +## - $CONF['database_type'] = '$POSTFIX_DB_TYPE'; ## - $CONF['database_host'] = 'localhost'; -## - $CONF['database_user'] = '$_db_user'; -## - $CONF['database_password'] = '$_db_pass'; -## - $CONF['database_name'] = '$_db_name'; +## - $CONF['database_user'] = '$POSTFIX_DB_USER'; +## - $CONF['database_password'] = '$POSTFIX_DB_PASS'; +## - $CONF['database_name'] = '$POSTFIX_DB_NAME'; ## - $CONF['database_prefix'] = ''; -## - $CONF['admin_email'] = '$ADMIN_EMAIL'; -## - $CONF['encrypt'] = '$_encrypt'; +## - $CONF['admin_email'] = '$WEBMASTER_EMAIL'; +## - $CONF['encrypt'] = '$ENCRYPTION_METHOD'; +## - $CONF['dovecotpw'] = "$DOVEADM_PW"; +## - +echo "" +echononl "\tAdjust Postfix Admin's Configuration - Part 1" +_failed=false +> $log_file +perl -i.ORIG -n -p -e "s#^(\s*\\\$CONF\['default_language'\]\s*=.*)#//!\1\n\\\$CONF['default_language'] = 'de';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_type'\]\s*=.*)#//!\1\n\\\$CONF['database_type'] = '$POSTFIX_DB_TYPE';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_host'\]\s*=.*)#//!\1\n\\\$CONF['database_host'] = 'localhost';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_user'\]\s*=.*)#//!\1\n\\\$CONF['database_user'] = '$POSTFIX_DB_USER';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_password'\]\s*=.*)#//!\1\n\\\$CONF['database_password'] = '$POSTFIX_DB_PASS';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_name'\]\s*=.*)#//!\1\n\\\$CONF['database_name'] = '$POSTFIX_DB_NAME';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['database_prefix'\]\s*=.*)#//!\1\n\\\$CONF['database_prefix'] = '';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['admin_email'\]\s*=.*)#//!\1\n\\\$CONF['admin_email'] = '$WEBMASTER_EMAIL';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['encrypt'\]\s*=.*)#//!\1\n\\\$CONF['encrypt'] = '$ENCRYPTION_METHOD';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['dovecotpw'\]\s*=.*)#//!\1\n\\\$CONF['dovecotpw'] = '$DOVEADM_PW';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + + +## - Adjust Postfix Admin's Configuration - Part 2 +## - ## - $CONF['default_aliases'] = array ( ## - 'abuse' => 'postmaster@$DOMAIN', ## - 'postmaster' => 'postmaster@$DOMAIN', @@ -564,6 +1663,55 @@ cd ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} ## - $CONF['quota'] = 'YES'; ## - $CONF['domain_quota'] = 'Yes'; ## - $CONF['quota_multiplier'] = '1048576'; +## - +echononl "\tAdjust Postfix Admin's Configuration - Part 2" +_failed=false +> $log_file +perl -i -n -p -e "s#^(\s*\\\$CONF\['default_aliases'\]\s*=.*)#//\n//! 'default_aliases' will be overridden - see end of configfile\n//\n\1#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true + +cat <> $pfa_conf_file 2> $log_file + +// Default Aliases +// The default aliases that need to be created for all domains. +// You can specify the target address in two ways: +// a) a full mail address +// b) only a localpart ('postmaster' => 'admin') - the alias target will point to the same domain +// +\$CONF['default_aliases'] = array ( + 'abuse' => 'postmaster@$DOMAIN', + 'postmaster' => 'postmaster@$DOMAIN' +); +EOF + +perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_path'\]\s*=.*)#//!\1\n\\\$CONF['domain_path'] = 'YES';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_in_mailbox'\]\s*=.*)#//!\1\n\\\$CONF['domain_in_mailbox'] = 'NO';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['aliases'\]\s*=.*)#//!\1\n\\\$CONF['aliases'] = '100';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['mailboxes'\]\s*=.*)#//!\1\n\\\$CONF['mailboxes'] = '100';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['maxquota'\]\s*=.*)#//!\1\n\\\$CONF['maxquota'] = '0';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_quota_default'\]\s*=.*)#//!\1\n\\\$CONF['domain_quota_default'] = '0';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['quota'\]\s*=.*)#//!\1\n\\\$CONF['quota'] = 'YES';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_quota'\]\s*=.*)#//!\1\n\\\$CONF['domain_quota'] = 'YES';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['quota_multiplier'\]\s*=.*)#//!\1\n\\\$CONF['quota_multiplier'] = '1048576';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + + +## - Adjust Postfix Admin's Configuration - Part 3 +## - ## - $CONF['transport_options'] = array ( ## - 'lmtp:unix:private/dovecot-lmtp', // for virtual accounts ## - 'local', // for system accounts @@ -571,7 +1719,39 @@ cd ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} ## - ); ## - $CONF['transport_default'] = 'lmtp:unix:private/dovecot-lmtp'; ## - $CONF['vacation'] = 'YES'; -## - $CONF['vacation_domain'] = '$_autoreply_domain'; +## - $CONF['vacation_domain'] = '$AUTOREPLY_HOSTNAME'; +## - +echononl "\tAdjust Postfix Admin's Configuration - Part 3" +_failed=false +> $log_file +perl -i -n -p -e "s#^(\s*\\\$CONF\['transport_options'\]\s*=.*)#//\n//! \"transport_options\" will be overridden - see end of configfile\n//\n\1#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true + +cat <> $pfa_conf_file 2> $log_file + +// Transport options +// If you want to define additional transport options put them in array below. +// +\$CONF['transport_options'] = array ( + 'lmtp:unix:private/dovecot-lmtp', // for virtual accounts + 'local', // for system accounts + 'relay' // for backup mx +); +EOF + +perl -i -n -p -e "s#^(\s*\\\$CONF\['vacation'\]\s*=.*)#//!\1\n\\\$CONF['vacation'] = 'YES';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['vacation_domain'\]\s*=.*)#//!\1\n\\\$CONF['vacation_domain'] = '$AUTOREPLY_HOSTNAME';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + + +## - Adjust Postfix Admin's Configuration - Part 4 ## - ## - $CONF['vacation_choice_of_reply'] = array ( ## - 0 => 'reply_once', // Sends only Once the message during Out of Office @@ -580,93 +1760,13 @@ cd ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} ## - 60*60*24*7 => 'reply_once_per_week' // Reply if last autoreply was at least a week ago ## - ); ## - -## - $CONF['alias_control_admin'] = 'YES'; -## - $CONF['alias_control'] = 'YES'; -## - $CONF['special_alias_control'] = 'NO'; -## - $CONF['backup'] = 'YES'; -## - $CONF['fetchmail'] = 'NO'; -## - $CONF['user_footer_link'] = "https://${HOSTNAME}/main.php"; -## - $CONF['footer_text'] = "Main Menu"; -## - $CONF['footer_link'] = "http://${HOSTNAME}/main.php"; -## - $CONF['emailcheck_resolve_domain']='NO'; -## - $CONF['show_status']='YES'; -## - $CONF['show_status_key']='YES'; -## - $CONF['show_undeliverable']='NO'; -## - $CONF['show_popimap']='NO'; -## - -## - $CONF['used_quotas'] = 'YES'; -## - $CONF['new_quota_table'] = 'YES'; -## - -## - $CONF['welcome_text'] = << 'postmaster@$DOMAIN',\n 'postmaster' => 'postmaster@$DOMAIN'\n);\n" >> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php - -perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_path'\]\s*=.*)#//!\1\n\\\$CONF['domain_path'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_in_mailbox'\]\s*=.*)#//!\1\n\\\$CONF['domain_in_mailbox'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['aliases'\]\s*=.*)#//!\1\n\\\$CONF['aliases'] = '100';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['mailboxes'\]\s*=.*)#//!\1\n\\\$CONF['mailboxes'] = '100';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['maxquota'\]\s*=.*)#//!\1\n\\\$CONF['maxquota'] = '0';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_quota_default'\]\s*=.*)#//!\1\n\\\$CONF['domain_quota_default'] = '0';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['quota'\]\s*=.*)#//!\1\n\\\$CONF['quota'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['domain_quota'\]\s*=.*)#//!\1\n\\\$CONF['domain_quota'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['quota_multiplier'\]\s*=.*)#//!\1\n\\\$CONF['quota_multiplier'] = '1048576';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php - - -perl -i -n -p -e "s#^(\s*\\\$CONF\['transport_options'\]\s*=.*)#//\n//! \"transport_options\" will be overridden - see end of configfile\n//\n\1#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -echo -e "\n\n\$CONF['transport_options'] = array (\n 'lmtp:unix:private/dovecot-lmtp', // for virtual accounts\n 'local', // for system accounts\n 'relay' // for backup mx\n);\n\$CONF['transport_default'] = 'lmtp:unix:private/dovecot-lmtp';\n" >> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['transport_default'\]\s*=.*)#//!\1\n\\\$CONF['transport_default'] = 'lmtp:unix:private/dovecot-lmtp';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php - -perl -i -n -p -e "s#^(\s*\\\$CONF\['vacation'\]\s*=.*)#//!\1\n\\\$CONF['vacation'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['vacation_domain'\]\s*=.*)#//!\1\n\\\$CONF['vacation_domain'] = '$_autoreply_domain';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php - - +echononl "\tAdjust Postfix Admin's Configuration - Part 4" +_failed=false +> $log_file perl -i -n -p -e "s#^(\s*\\\$CONF\['vacation_choice_of_reply'\]\s*=.*)#//\n//! 'vacation_choice_of_reply' will be overridden - see end of configfile\n//\n\1#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true -cat <> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php +cat <> $pfa_conf_file 2> $log_file // ReplyType options // If you want to define additional reply options put them in array below. @@ -691,9 +1791,22 @@ cat <> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} EOF perl -i -n -p -e "s#^(\s*\\\$CONF\['welcome_text'\]\s*=.*)#//\n//! 'welcome_text' will be overridden - see end of configfile\n//\n\1#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -cat <> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + +## - $CONF['welcome_text'] = <<> $pfa_conf_file 2> $log_file // Welcome Message // This message is send to every newly created mailbox. @@ -702,188 +1815,400 @@ cat <> ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version} $_welcome_email EOM; EOF - -perl -i -n -p -e "s#^(\s*\\\$PALANG\['reply_every_mail'\]\s+=.*)#\1\n\\\$PALANG['reply_once_per_day'] = 'Einmal pro Tag antworten';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/languages/de.lang -perl -i -n -p -e "s#^(\s*\\\$PALANG\['reply_every_mail'\]\s+=.*)#\1\n\\\$PALANG['reply_once_per_day'] = 'Reply once per day';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/languages/en.lang + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_failed +fi +## - Adjust Postfix Admin's Configuration - Part 5 +## - +## - $CONF['alias_control_admin'] = 'YES'; +## - $CONF['alias_control'] = 'YES'; +## - $CONF['special_alias_control'] = 'NO'; +## - $CONF['backup'] = 'YES'; +## - $CONF['fetchmail'] = 'NO'; +## - $CONF['user_footer_link'] = "https://${WEBSITE_NAME}/main.php"; +## - $CONF['footer_text'] = "Main Menu"; +## - $CONF['footer_link'] = "http://${WEBSITE_NAME}/main.php"; +## - $CONF['emailcheck_resolve_domain']='NO'; +## - $CONF['show_status']='YES'; +## - $CONF['show_status_key']='YES'; +## - $CONF['show_undeliverable']='NO'; +## - $CONF['show_popimap']='NO'; +## - +## - $CONF['used_quotas'] = 'YES'; +## - $CONF['new_quota_table'] = 'YES'; +## - +echononl "\tAdjust Postfix Admin's Configuration - Part 5" +_failed=false +> $log_file perl -i -n -p -e "s#^(\s*\\\$CONF\['alias_control_admin'\]\s+=.*)#//!\1\n\\\$CONF['alias_control_admin'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['alias_control'\]\s*=.*)#//!\1\n\\\$CONF['alias_control'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['special_alias_control'\]\s*=.*)#//!\1\n\\\$CONF['special_alias_control'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['backup'\]\s*=.*)#//!\1\n\\\$CONF['backup'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['fetchmail'\]\s*=.*)#//!\1\n\\\$CONF['fetchmail'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['user_footer_link'\]\s+=.*)#//!\1\n\\\$CONF['user_footer_link'] = 'https://${HOSTNAME}/main.php';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['user_footer_link'\]\s+=.*)#//!\1\n\\\$CONF['user_footer_link'] = 'https://${WEBSITE_NAME}/main.php';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['footer_text'\]\s+=.*)#//!\1\n\\\$CONF['footer_text'] = 'Main Menu';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php -perl -i -n -p -e "s#^(\s*\\\$CONF\['footer_link'\]\s+=.*)#//!\1\n\\\$CONF['footer_link'] = 'http://${HOSTNAME}/main.php';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*\\\$CONF\['footer_link'\]\s+=.*)#//!\1\n\\\$CONF['footer_link'] = 'http://${WEBSITE_NAME}/main.php';#" \ + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['emailcheck_resolve_domain'\]\s*=.*)#//!\1\n\\\$CONF['emailcheck_resolve_domain'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['show_status'\]\s*=.*)#//!\1\n\\\$CONF['show_status'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['show_status_key'\]\s*=.*)#//!\1\n\\\$CONF['show_status_key'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['show_undeliverable'\]\s*=.*)#//!\1\n\\\$CONF['show_undeliverable'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['show_popimap'\]\s*=.*)#//!\1\n\\\$CONF['show_popimap'] = 'NO';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['used_quotas'\]\s*=.*)#//!\1\n\\\$CONF['used_quotas'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*\\\$CONF\['new_quota_table'\]\s*=.*)#//!\1\n\\\$CONF['new_quota_table'] = 'YES';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -## - after finished, you must alos change the value of $CONF['configured'] -## - to 'true' -## - -## - $CONF['configured'] = true; + +# - After finished, you must alos change the value of $CONF['configured'] +# - to 'true' +# - +# - $CONF['configured'] = true; +echononl "\tSet '\$CONF['configured'] = true'" perl -i -n -p -e "s#^(\s*\\\$CONF\['configured'\]\s*=.*)#//!\1\n\\\$CONF['configured'] = true;#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file > $log_file 2>&1 +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed +fi +# - AFTER DELETION MAILBOX +# - +# - activate script for moving a mailbox from the mailboxdirectory +# - and save it to the backupb directory /var/deleted-maildirs +# - +echo -e "\n\t\033[32mMailbox post-deletion script\033[m" +echononl "\tCreate folder '${DELETED_MAILBOX_DIR}" +if [[ ! -d "${DELETED_MAILBOX_DIR}" ]] ; then + mkdir $DELETED_MAILBOX_DIR > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -## - AFTER DELETION MAILBOX -## - -## - activate script for moving a mailbox from the mailboxdirectory -## - and save it to the backupb directory /var/deleted-maildirs -## - -mkdir -p $deleted_maildirs -chown vmail:vmail $deleted_maildirs -chmod 700 $deleted_maildirs +echononl "\tChange permissions on '${DELETED_MAILBOX_DIR}" +_failed=false +chown vmail:vmail $DELETED_MAILBOX_DIR > $log_file 2>&1 || _failed=true +chmod 700 $DELETED_MAILBOX_DIR >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -if [ -f /usr/local/bin/postfixadmin-mailbox-postdeletion.sh ]; then +echononl "\tBackup existing post-deletion script" +if [[ -f "/usr/local/bin/postfixadmin-mailbox-postdeletion.sh" ]]; then mv /usr/local/bin/postfixadmin-mailbox-postdeletion.sh \ - /usr/local/bin/postfixadmin-mailbox-postdeletion.sh.`date "+%Y%m%d-%H%M"` + /usr/local/bin/postfixadmin-mailbox-postdeletion.sh.$(date +%Y%m%d-%H%M) > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped fi -cp ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/ADDITIONS/postfixadmin-mailbox-postdeletion.sh \ - /usr/local/bin/ -chmod 755 /usr/local/bin/postfixadmin-mailbox-postdeletion.sh +echononl "\tCopy 'postfixadmin-mailbox-postdeletion.sh' to /usr/local/bin/" +cp -a ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/ADDITIONS/postfixadmin-mailbox-postdeletion.sh \ + /usr/local/bin/ > $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi -## - chnage the posdeletion scripts to your needs: -## - -## - set: -## - basedir=/var/vmail -## - trashbase=$deleted_maildirs -## - -## - trashdir="${trashbase}/$2/`date +%F_$H-%M`_${subdir}" -## - +echononl "\tSet Permissions on 'postfixadmin-mailbox-postdeletion.sh'" +chmod 755 /usr/local/bin/postfixadmin-mailbox-postdeletion.sh > $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +# - Change the posdeletion scripts to your needs: +# - +# - set: +# - basedir=/var/vmail +# - trashbase=$DELETED_MAILBOX_DIR +# - +# - trashdir="${trashbase}/$2/`date +%F_$H-%M`_${subdir}" +# - +echononl "\tAdjust 'postfixadmin-mailbox-postdeletion.sh'" +_failed=false +> $log_file 2>&1 perl -i -n -p -e "s#^(\s*)(basedir=.*)#\#\1\2\n\1basedir=/var/vmail#" \ - /usr/local/bin/postfixadmin-mailbox-postdeletion.sh -perl -i -n -p -e "s#^(\s*)(trashbase=.*)#\#\1\2\n\1trashbase=${deleted_maildirs}#" \ - /usr/local/bin/postfixadmin-mailbox-postdeletion.sh + /usr/local/bin/postfixadmin-mailbox-postdeletion.sh >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*)(trashbase=.*)#\#\1\2\n\1trashbase=${DELETED_MAILBOX_DIR}#" \ + /usr/local/bin/postfixadmin-mailbox-postdeletion.sh >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*)(trashdir=.*)#\#\1\2\n\1trashdir=\"\\\${trashbase}/\\\$2/\`date +%F_%H-%M\`_\\\${subdir}\"#" \ - /usr/local/bin/postfixadmin-mailbox-postdeletion.sh + /usr/local/bin/postfixadmin-mailbox-postdeletion.sh >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -## - edit ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/config.inc.php -## - -## - in section add line -## - $CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh'; -## - + +# - Edit ${WEBSITE_BASEDIR}/htdocs/config.inc.php +# - +# - in section add line +# - $CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh'; +# - +echononl "\tAdjust 'config.inc.php' to make script available" perl -i -n -p -e "s#^(\s*[/*]?\s*\\\$CONF\['mailbox_postdeletion_script'\]\s*=.*)#//!\1\n\\\$CONF['mailbox_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file > $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed +fi ## - !! Notice: -## - Have a look at ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php +## - Have a look at ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/config.inc.php ## - and see if changes affected ## - -## - you need also an entry in /etc/sudores -## - -## - ues visudo-command to add: -## - www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh -## - -visudo +# - You need also an entry in /etc/sudores +# - +# - ues visudo-command to add: +# - www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh +# - +_failed=false +echononl "\tCreate needed entry in '/etc/sudores'" +if ! grep -q -E "${HTTP_USER}.*NOPASSWD:\s*/usr/local/bin/postfixadmin-mailbox-postdeletion.sh" /etc/sudoers ; then + touch /etc/sudoers.tmp >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + fi + cat /etc/sudoers > /tmp/sudoers.new 2>> $log_file + if [[ $? -ne 0 ]]; then + _failed=true + fi + echo "" >> /tmp/sudoers.new + echo "${HTTP_USER} ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh" >> /tmp/sudoers.new 2>> $log_file + if [[ $? -ne 0 ]]; then + _failed=true + fi + visudo -c -f /tmp/sudoers.new >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + else + cp /tmp/sudoers.new /etc/sudoers >> $log_file 2>&1 + if [ $? -ne 0 ]; then + _failed=true + fi + fi + rm /etc/sudoers.tmp >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + fi + rm -f /tmp/sudoers.new + if $_failed ; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi +else + echo_skipped +fi -## - AFTER DELETION MAILDOMIAN -## - -## - activate script for moving a mailbox from the mailboxdirectory -## - and save it to the backupb directory $deleted_maildomains -## - -mkdir -p $deleted_maildomains -chown vmail:vmail $deleted_maildomains -chmod 700 $deleted_maildomains +# - AFTER DELETION MAILDOMIAN +# - +# - activate script for moving a mailbox from the mailboxdirectory +# - and save it to the backupb directory $DELETED_DOMAINS_DIR +# - +echo -e "\n\t\033[32mMaildomain post-deletion script\033[m" +echononl "\tCreate folder '${DELETED_DOMAINS_DIR}" +if [[ ! -d "${DELETED_DOMAINS_DIR}" ]] ; then + mkdir $DELETED_DOMAINS_DIR > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -if [ -f /usr/local/bin/postfixadmin-domain-postdeletion.sh ]; then +echononl "\tChange permissions on '${DELETED_DOMAINS_DIR}" +_failed=false +chown vmail:vmail $DELETED_DOMAINS_DIR > $log_file 2>&1 || _failed=true +chmod 700 $DELETED_DOMAINS_DIR >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi + +echononl "\tBackup existing post-deletion script" +if [[ -f "/usr/local/bin/postfixadmin-domain-postdeletion.sh" ]]; then mv /usr/local/bin/postfixadmin-domain-postdeletion.sh \ - /usr/local/bin/postfixadmin-domain-postdeletion.sh.`date "+%Y%m%d-%H%M"` + /usr/local/bin/postfixadmin-domain-postdeletion.sh.$(date +%Y%m%d-%H%M) > $log_file 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped fi -cp ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/ADDITIONS/postfixadmin-domain-postdeletion.sh \ - /usr/local/bin/ -chmod 755 /usr/local/bin/postfixadmin-domain-postdeletion.sh -## - chnage the posdeletion scripts to your needs: -## - -## - set: -## - basedir=/var/vmail -## - trashbase=$deleted_maildomains -## - -## - trashdir="${trashbase}/`date +%F_%H-%M`_$1" -## - +echononl "\tCopy 'postfixadmin-domain-postdeletion.sh' to /usr/local/bin/" +cp -a ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/ADDITIONS/postfixadmin-domain-postdeletion.sh \ + /usr/local/bin/ > $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + + +echononl "\tSet Permissions on 'postfixadmin-domain-postdeletion.sh'" +chmod 755 /usr/local/bin/postfixadmin-domain-postdeletion.sh > $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + + +# - Change the posdeletion scripts to your needs: +# - +# - set: +# - basedir=/var/vmail +# - trashbase=$DELETED_DOMAINS_DIR +# - +# - trashdir="${trashbase}/`date +%F_%H-%M`_$1" +# - +echononl "\tAdjust 'postfixadmin-domain-postdeletion.sh'" +_failed=false +> $log_file 2>&1 perl -i -n -p -e "s#^(\s*)(basedir=.*)#\#\1\2\n\1basedir=/var/vmail#" \ - /usr/local/bin/postfixadmin-domain-postdeletion.sh -perl -i -n -p -e "s#^(\s*)(trashbase=.*)#\#\1\2\n\1trashbase=${deleted_maildomains}#" \ - /usr/local/bin/postfixadmin-domain-postdeletion.sh + /usr/local/bin/postfixadmin-domain-postdeletion.sh >> $log_file 2>&1 || _failed=true +perl -i -n -p -e "s#^(\s*)(trashbase=.*)#\#\1\2\n\1trashbase=${DELETED_DOMAINS_DIR}#" \ + /usr/local/bin/postfixadmin-domain-postdeletion.sh >> $log_file 2>&1 || _failed=true perl -i -n -p -e "s#^(\s*)(trashdir=.*)#\#\1\2\n\1trashdir=\"\\\${trashbase}/\`date +%F_%H-%M\`_\\\$1\"#" \ - /usr/local/bin/postfixadmin-domain-postdeletion.sh + /usr/local/bin/postfixadmin-domain-postdeletion.sh >> $log_file 2>&1 || _failed=true +if $_failed ; then + echo_failed + error "$(cat $log_file)" +else + echo_ok +fi -## - edit ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/config.inc.php -## - -## - in section add line -## - $CONF['domain_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh'; -## - +# - edit ${WEBSITE_BASEDIR}/htdocs/config.inc.php +# - +# - in section add line +# - $CONF['domain_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh'; +# - +echononl "\tAdjust 'config.inc.php' to make script available" perl -i -n -p -e "s#^(\s*[/*]?\s*\\\$CONF\['domain_postdeletion_script'\]\s*=.*)#//!\1\n\\\$CONF['domain_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh';#" \ - ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php + $pfa_conf_file >> $log_file 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed +fi ## - !! Notice: -## - Have a look at ${APACHE_BASE_WEBDIR}/${HOSTNAME}/postfixadmin-${_pf_admin_version}/config.inc.php +## - Have a look at ${WEBSITE_BASEDIR}/postfixadmin-${PF_ADMIN_VERSION}/config.inc.php ## - and see if changes affected ## - -## - you need also an entry in /etc/sudores -## - -## - ues visudo-command to add: -## - www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh -## - -visudo - - -cd ${APACHE_BASE_WEBDIR}/$HOSTNAME -if [ -h ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs ]; then - rm ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs -elif [ -d ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs -o -f ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs ]; then - mv ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs.`date +%Y%m%d-%H%M` +# - You need also an entry in /etc/sudores +# - +# - ues visudo-command to add: +# - www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh +# - +_failed=false +echononl "\tCreate needed entry in '/etc/sudores'" +if ! grep -q -E "${HTTP_USER}.*NOPASSWD:\s*/usr/local/bin/postfixadmin-domain-postdeletion.sh" /etc/sudoers ; then + touch /etc/sudoers.tmp >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + fi + cat /etc/sudoers > /tmp/sudoers.new 2>> $log_file + if [[ $? -ne 0 ]]; then + _failed=true + fi + echo "" >> /tmp/sudoers.new + echo "${HTTP_USER} ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh" >> /tmp/sudoers.new 2>> $log_file + if [[ $? -ne 0 ]]; then + _failed=true + fi + visudo -c -f /tmp/sudoers.new >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + else + cp /tmp/sudoers.new /etc/sudoers >> $log_file 2>&1 + if [ $? -ne 0 ]; then + _failed=true + fi + fi + rm /etc/sudoers.tmp >> $log_file 2>&1 + if [[ $? -ne 0 ]]; then + _failed=true + fi + rm -f /tmp/sudoers.new + if $_failed ; then + echo_failed + error "$(cat $log_file)" + else + echo_ok + fi +else + echo_skipped fi -ln -s postfixadmin-${_pf_admin_version} htdocs -## - Configure Postfixadmin - this will also create tables in database postfix -## - -http://${HOSTNAME}/setup.php - - -## - Afterwords you have to change configuration vaiable $CONF['setup_password'] -## - Setup password: EadGl15E -## - $CONF['setup_password'] = '5ae65a138fad97191ebdb7c4ed3a1826:5ae467dac6075eed6f5573d40286a65bf1ddd554'; - -## - Now create admin account -## - -## - admin account: -## - user......: admin@warenform.net -## - password..: dbddhkpuka - -vim ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/config.inc.php - ## - Using Postfixadmin, all changes (create/delete maildomains, mailboxes, ## - aliases, etc..) will result in concerning entries in the tables of the ## - specified database. @@ -902,82 +2227,122 @@ vim ${APACHE_BASE_WEBDIR}/${HOSTNAME}/htdocs/config.inc.php ## - pgsql_virtual_domains_maps.cf ## - pgsql_virtual_mailbox_limit_maps.cf ## - pgsql_virtual_mailbox_maps.cf +## - +echo -e "\n\t\033[32mSetup Postfix\033[m" -if [ "$_db_type" = "pgsql" ]; then +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_relay-domain-maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf 2> $log_file +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_relay-domain-maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf 2> $log_file +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT domain FROM domain WHERE domain = "%s" AND backupmx = 1 EOF else - echo "[ FATAL ]: Unknown database type $_db_type" + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +check_entry_main_cf_arr["relay_domains"]="proxy:$POSTFIX_DB_TYPE:/etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf" +# - /etc/postfix/main.cf +# - +# - add to relay_domains: +# - proxy:$POSTFIX_DB_TYPE:/etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(relay_domains\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_relay-domain-maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped fi -## - /etc/postfix/main.cf -## - -## - add to relay_domains: -## - proxy:$_db_type:/etc/postfix/$_db_type_relay-domain-maps.cf -## - -perl -i -n -p -e "s#\s*(relay_domains\s*=.*$)#\1\n proxy:${_db_type}:/etc/postfix/${_db_type}_relay-domain-maps.cf#" /etc/postfix/main.cf +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then -## --- - -if [ "$_db_type" = "pgsql" ]; then - - cat < /etc/postfix/${_db_type}_sender_login_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf 2> $log_file +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT username AS allowedUser FROM mailbox WHERE username='%s' AND active = true UNION SELECT goto FROM alias WHERE address='%s' AND active = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_sender_login_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf 2> $log_file +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND active = 1 UNION SELECT goto FROM alias WHERE address="%s" AND active = 1 EOF else - echo "[ FATAL ]: Unknown database type $_db_type" + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -## - /etc/postfix/main.cf -## - -## - add to smtpd_sender_login_maps: -## - proxy:$_db_type:/etc/postfix/${_db_type}_sender_login_maps.cf -## - -perl -i -n -p -e "s#\s*(smtpd_sender_login_maps\s*=.*$)#\1 proxy:${_db_type}:/etc/postfix/${_db_type}_sender_login_maps.cf#" /etc/postfix/main.cf +check_entry_main_cf_arr["smtpd_sender_login_maps"]="proxy:$POSTFIX_DB_TYPE:/etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf" +# - /etc/postfix/main.cf +# - +# - add to smtpd_sender_login_maps: +# - proxy:$POSTFIX_DB_TYPE:/etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(smtpd_sender_login_maps\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_sender_login_maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -## --- -if [ "$_db_type" = "pgsql" ]; then +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_transport_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME ## - #table = domain #select_field = transport @@ -985,12 +2350,12 @@ dbname = $_db_name query = SELECT transport FROM domain WHERE domain ='%s'; EOF -elif [ "$_db_type" = "mysql" ];then - cat < /etc/postfix/${_db_type}_transport_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then + cat < /etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME ## - #table = domain #select_field = transport @@ -998,302 +2363,436 @@ dbname = $_db_name query = SELECT transport FROM domain WHERE domain ='%s'; EOF +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" fi - -## - /etc/postfix/main.cf -## - -## - add to transport_maps: -## - proxy:${_db_type}:/etc/postfix/${_db_type}_transport_maps.cf -## - -perl -i -n -p -e "s#\s*(transport_maps\s*=.*$)#\1\n proxy:${_db_type}:/etc/postfix/${_db_type}_transport_maps.cf#" /etc/postfix/main.cf - - -## --- - -if [ "$_db_type" = "pgsql" ]; then - - cat < /etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true -EOF - -elif [ "$_db_type" = "mysql" ];then - - cat < /etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' -EOF - +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -if [ "$_db_type" = "pgsql" ]; then - - cat < /etc/postfix/${_db_type}_virtual_alias_domain_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '%u' || '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true -EOF - -elif [ "$_db_type" = "mysql" ];then - - cat < /etc/postfix/${_db_type}_virtual_alias_domain_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' -EOF - +check_entry_main_cf_arr["transport_maps"]="proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf" +# - /etc/postfix/main.cf +# - +# - add to transport_maps: +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(transport_maps\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_transport_maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped fi -if [ "$_db_type" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_virtual_alias_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then + + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT goto FROM alias WHERE address='%s' AND active = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_virtual_alias_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT goto FROM alias WHERE address='%s' AND active = '1' EOF +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then + + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '%u' || '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true +EOF + +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then + + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' +EOF + +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true +EOF + +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then + + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' +EOF + +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -## - Edit /etc/postfix/main.cf -## - -## - add to virtual_alias_maps: -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_maps.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_maps.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf -## - ## - mailman -## - #hash:/var/lib/mailman/data/virtual-mailman -## - -perl -i -n -p -e "s#\s*(virtual_alias_maps\s*=.*$)#\1\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_maps.cf\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_maps.cf\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf#" /etc/postfix/main.cf +check_entry_main_cf_arr["virtual_alias_maps"]="proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf,proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf,proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf" +# - Edit /etc/postfix/main.cf +# - +# - add to virtual_alias_maps: +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf +# - ## - mailman +# - #hash:/var/lib/mailman/data/virtual-mailman +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(virtual_alias_maps\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -## --- -if [ "$_db_type" = "pgsql" ]; then +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_virtual_mailbox_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_virtual_mailbox_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' EOF +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -if [ "$_db_type" = "pgsql" ]; then +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_virtual_alias_domain_mailbox_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = '%u' || '@' || alias_domain.target_domain AND mailbox.active = true AND alias_domain.active = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_virtual_alias_domain_mailbox_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1' EOF +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -## - for the last 2 definitions write concerning entries -## - to virtual_mailbox_maps in /etc/postfix/main.cf -## - -## - might look like this: -## - virtual_mailbox_maps = -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_mailbox_maps.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_mailbox_maps.cf -## - -perl -i -n -p -e "s#\s*(virtual_mailbox_maps\s*=.*$)#\1\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_mailbox_maps.cf\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_mailbox_maps.cf#" /etc/postfix/main.cf +check_entry_main_cf_arr["virtual_mailbox_maps"]="proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf,proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf" +# - Edit /etc/postfix/main.cf +# - +# - add to virtual_mailbox_maps: +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(virtual_mailbox_maps\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_mailbox_maps.cf\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_mailbox_maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -## --- -if [ "$_db_type" = "pgsql" ]; then +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then - cat < /etc/postfix/${_db_type}_virtual_domains_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT domain FROM domain WHERE domain = '%s' AND active = true EOF -elif [ "$_db_type" = "mysql" ];then +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then - cat < /etc/postfix/${_db_type}_virtual_domains_maps.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' EOF +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -## - Edit /etc/postfix/main.cf -## - -## - Add to virtual_mailbox_domains: -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_domains_maps.cf -## - -perl -i -n -p -e "s#\s*(virtual_mailbox_domains\s*=.*$)#\1\n proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_domains_maps.cf#" /etc/postfix/main.cf +check_entry_main_cf_arr["virtual_mailbox_domains"]="proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf" +# - Edit /etc/postfix/main.cf +# - +# - Add to virtual_mailbox_domains: +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#\s*(virtual_mailbox_domains\s*=.*$)#\1\n proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_domains_maps.cf#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" + fi +else + echo_skipped +fi -## --- +# - address-extension with delimeter "-" +# - +echononl "\tCreate file '/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf'" +if [ "$POSTFIX_DB_TYPE" = "pgsql" ]; then -## - address-extension with delimeter "-" -## - -if [ "$_db_type" = "pgsql" ]; then - - cat < /etc/postfix/${_db_type}_virtual_alias_address_rewriting.cf + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf ## - this address rewriting acts as address extension ## - with delimeter "-" ## - -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name +hosts = $POSTFIX_DB_SOCKET +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT username FROM mailbox WHERE domain = '%d' AND '%u' LIKE local_part || '-%%' AND active = true ORDER BY username DESC LIMIT 1; EOF -elif [ "$_db_type" = "mysql" ];then - cat < /etc/postfix/${_db_type}_virtual_alias_address_rewriting.cf -hosts = $_db_host -user = $_db_user -password = $_db_pass -dbname = $_db_name +elif [ "$POSTFIX_DB_TYPE" = "mysql" ];then + cat < /etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf +hosts = $POSTFIX_DB_HOST +user = $POSTFIX_DB_USER +password = $POSTFIX_DB_PASS +dbname = $POSTFIX_DB_NAME query = SELECT username FROM mailbox WHERE domain = '%d' AND '%u' LIKE CONCAT(local_part, '-%%') AND active = '1' ORDER BY username DESC LIMIT 1; EOF + +else + echo "[ FATAL ]: Unknown database type $POSTFIX_DB_TYPE" +fi +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error "$(cat $log_file)" fi -## - Edit /etc/postfix/main.cf -## - -## - NOTICE!! -## - add this entry to virtual_alias_maps AT THE END, BUT BEFOR CATCH-ALL MAPS -## - if exists -## - -## - might look like this: -## - virtual_alias_maps = -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_maps.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_maps.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_address_rewriting.cf, -## - proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf -## - ## - mailman -## - #hash:/var/lib/mailman/data/virtual-mailman -## - -perl -i -n -p -e "s#(\s*proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_domain_catchall_maps.cf.*$)# proxy:${_db_type}:/etc/postfix/${_db_type}_virtual_alias_address_rewriting.cf\n\1#" /etc/postfix/main.cf - - -## --- - -## - add a cronjob for analyzing and reindexing the postfix tables -## - - -## - create a script doing tha staff -## - -mkdir -p /root/bin - -if [ "$_db_type" = "pgsql" ]; then - - cat < /root/bin/analyze_reindex_pg-databases.sh -#!/bin/bash - -curdir=\`pwd\` -cd /tmp - -psql=\`which psql\` -grep=\`which grep\` -awk=\`which awk\` - -DATABASES=\`/bin/su postgres -c "\$psql -lt" | \$grep -v -e"^\$" | \$grep -v -e "^\s*[:|]" | \$awk '{print\$1}'\` - -for db in \$DATABASES ; do - if [ "\$db" == "template0" ]; then - continue +check_entry_main_cf_arr["virtual_alias_maps"]="${check_entry_main_cf_arr['virtual_alias_maps']},proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf" +# - Edit /etc/postfix/main.cf +# - +# - NOTICE!! +# - add this entry to virtual_alias_maps AT THE END, BUT BEFOR CATCH-ALL MAPS +# - if exists +# - +# - might look like this: +# - virtual_alias_maps = +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_maps.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_maps.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf, +# - proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf +# - ## - mailman +# - #hash:/var/lib/mailman/data/virtual-mailman +# - +echononl "\tUpdate '/etc/postfix/main.cf'" +if ! grep -q "proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf" /etc/postfix/main.cf > /dev/null 2>&1 ; then + perl -i -n -p -e "s#(\s*proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_domain_catchall_maps.cf.*$)# proxy:${POSTFIX_DB_TYPE}:/etc/postfix/${POSTFIX_DB_TYPE}_virtual_alias_address_rewriting.cf\n\1#" \ + /etc/postfix/main.cf > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "$(cat $log_file)" fi - - #echo "Database...: \$db" - - TABLES=\`/bin/su postgres -c "\$psql -t -q -c \"\dt \" \$db" | awk '{print\$3}'\` - - #echo - for tbl in \$TABLES ; do - #echo -e "\tvacuum analyze table $tbl .." - /bin/su postgres -c "\$psql -q -c \"VACUUM ANALYZE \$tbl\" \$db" - [[ \$? -gt 0 ]] && echo "[ERROR]: vacuum/analyzing table \"\${tbl}\" of database \"\$db\" failed !!" - #echo -e "\treindex table \$tbl ..\n" - /bin/su postgres -c "\$psql -q -c \"REINDEX TABLE \$tbl\" \$db" - [[ \$? -gt 0 ]] && echo "[ERROR]: reindexing table \"\${tbl}\" of database \"\$db\" failed !!" - done - #echo -done - -cd \$curdir - -exit -EOF - - chmod 755 /root/bin/analyze_reindex_pg-databases.sh - - ## - add crontab entry - ## - - crontab -l > /tmp/tmp_crontab - - cat <> /tmp/tmp_crontab - -## - analyze/reindex postgres tables and backup -## - -45 02 * * * /root/bin/analyze_reindex_pg-databases.sh -EOF - - crontab /tmp/tmp_crontab - rm /tmp/tmp_crontab - +else + echo_skipped fi +echo -e "\n\n\t\033[37m\033[1mSome final checks\033[m\n" + +# - Check, if previously created entries in /etc/postfix/main.cf are really present +# - +echononl "\tCheck /etc/postfix/main.cf" +first_err=true +_found_err=false +for _key in ${!check_entry_main_cf_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${check_entry_main_cf_arr[$_key]}" + for _val in ${_val_arr[@]} ; do + if ! grep "$_val" /etc/postfix/main.cf > /dev/null 2>&1 ; then + if $first_err ; then + echo_failed + first_err=false + fi + _found_err=true + error "No Entry '${_val}' found for parameter '${_key}' in /etc/postfix/main.cf" + fi + done +done +if ! $_found_err ; then + echo_ok +fi + + +echo "" +echononl "\tReload/Restart postfix" +if $SYSTEMD_EXISTS ; then + systemctl reload postfix > $log_file 2>&1 +else + /etc/init.d/postfix reload > $log_file 2>&1 +fi +if [[ $? -eq 0 ]] ; then + echo_ok +else + echo_failed + error "$(cat $log_file)" +fi + +echo "" +info "Browse to \033[1mhttp://${WEBSITE_NAME}/setup.php\033[m to create a 'setup password'\n$(cat <