From a0f75035ad869ac27f6102ab485bee70ecc4d4a4 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 24 Jun 2023 02:14:45 +0200 Subject: [PATCH] install_postfixadmin.sh: support transfer 'setup_password' from old installation. --- install_postfixadmin.sh | 195 ++++++++++++++++++++++++++++------------ 1 file changed, 140 insertions(+), 55 deletions(-) diff --git a/install_postfixadmin.sh b/install_postfixadmin.sh index eb5b83f..70bb8c7 100755 --- a/install_postfixadmin.sh +++ b/install_postfixadmin.sh @@ -424,13 +424,85 @@ else fatal "No PHP binary found in PATH environment.." fi +_actual_config_file="" +_actual_password_hash="" +_actual_pfa_dir="" +_actual_pfa_documentroot="" +if [[ -d "${WEBSITE_BASEDIR}/htdocs" ]] ; then + PFA_UPDATE=true + _actual_pfa_documentroot="$(realpath "${WEBSITE_BASEDIR}/htdocs")" + if [[ "$(basename "$(dirname "${_actual_pfa_documentroot}")")" =~ ^postfixadmin ]]; then + _actual_pfa_dir="$(dirname "${_actual_pfa_documentroot}")" + else + _actual_pfa_dir="${_actual_pfa_documentroot}" + fi +else + PFA_UPDATE=false +fi + +echononl "\tKeep passwordhasch from actual installation in mind.." +if [[ -n "$_actual_pfa_dir" && -d "$_actual_pfa_dir" ]] ; then + if [[ -f "${_actual_pfa_dir}/config.local.php" ]]; then + _actual_config_file="${_actual_pfa_dir}/config.local.php" + else + _actual_config_file="${_actual_pfa_dir}/config.inc.php" + fi +fi + + +if [[ -f "$_actual_config_file" ]]; then + _actual_password_hash="$(grep -E "^\s*\\\$CONF\['setup_password'\]" $_actual_config_file 2> /dev/null \ + | grep -v changeme \ + | awk -F '=' '{print$2}'\ + | awk -F ';' '{print$1}')" + + _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[![:space:]]*}"}" + # - Remove trailing whitespace characters + _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[![:space:]]}"}" + # - Remove leading single quote + _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[!\']*}"}" + # - Remove trailing single quote + _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[!\']}"}" + # - Remove leading double quote + _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[!\"]*}"}" + # - Remove trailing double quote + _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[!\"]}"}" + + echo_ok +else + echo_skipped +fi + +_installed_version="" +if $PFA_UPDATE ; then + echononl "\tDetermine installed version of PFA .." + _installed_version="$(echo "$(basename "${_actual_pfa_dir}")" | cut -d'-' -f2)" + echo_ok +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" +if $PFA_UPDATE ; then + echo -e "\tUpdate Postfixadmin..................: YES" + if [[ -n "${_installed_version}" ]] ; then + echo -e "\tinstalled PFA verion.................: $_installed_version" + else + echo -e "\tinstalled PFA verion.................: "** \033[33mnot detected\033[m ** + fi + if [[ -n "$_actual_password_hash" ]]; then + echo -e "\tactual Passwordhash..................: $_actual_password_hash" + else + echo -e "\tactual Passwordhash..................: ** \033[33mnot found\033[m **" + fi +else + echo -e "\tInstall Postfixadmin first time......: YES" +fi +echo "" +echo -e "\tPostfix Admin new Version............: $PF_ADMIN_VERSION" echo "" echo -e "\tName of the Website..................: $WEBSITE_NAME" echo "" @@ -538,45 +610,6 @@ _failed=false > $log_file -_actual_config_file="" -_actual_password_hash="" -_actual_pfa_dir="" -if [[ -d "${WEBSITE_BASEDIR}/htdocs" ]] ; then - _actual_pfa_dir="$(realpath "${WEBSITE_BASEDIR}/htdocs")" -fi -echononl "\tKeep passwordhasch from actual installation in mind.." -if [[ -n "$_actual_pfa_dir" && -d "$_actual_pfa_dir" ]] ; then - if [[ -f "${_actual_pfa_dir}/config.local.php" ]]; then - _actual_config_file="${_actual_pfa_dir}/config.local.php" - else - _actual_config_file="${_actual_pfa_dir}/config.inc.php" - fi -fi - - -if [[ -f "$_actual_config_file" ]]; then - _actual_password_hash="$(grep -E "^\s*\\\$CONF\['setup_password'\]" $_actual_config_file 2> /dev/null \ - | grep -v changeme \ - | awk -F '=' '{print$2}'\ - | awk -F ';' '{print$1}')" - - _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[![:space:]]*}"}" - # - Remove trailing whitespace characters - _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[![:space:]]}"}" - # - Remove leading single quote - _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[!\']*}"}" - # - Remove trailing single quote - _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[!\']}"}" - # - Remove leading double quote - _actual_password_hash="${_actual_password_hash#"${_actual_password_hash%%[!\"]*}"}" - # - Remove trailing double quote - _actual_password_hash="${_actual_password_hash%"${_actual_password_hash##*[!\"]}"}" - - echo_ok -else - echo_skipped -fi - if [[ "$POSTFIX_DB_TYPE" = "mysql" ]] ; then echononl "\tCheck if database '$POSTFIX_DB_NAME' already exists.." _db_response="$(mysql $MYSQL_CREDENTIALS -N -s -e \ @@ -659,9 +692,14 @@ else if [[ ! -d "${WEBSITE_BASEDIR}" ]] ; then echo_skipped else + if [[ -n "$_installed_version" ]] ; then + _db_backup_file_name="${POSTFIX_DB_NAME}-pfa-${_installed_version}.${backup_date}.sql" + else + _db_backup_file_name="${POSTFIX_DB_NAME}-pfa.${backup_date}.sql" + fi if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then echo -n " (MySQL).." - mysqldump $MYSQL_CREDENTIALS --opt $POSTFIX_DB_NAME > ${WEBSITE_BASEDIR}/${POSTFIX_DB_NAME}.${backup_date}.sql 2> $log_file + mysqldump $MYSQL_CREDENTIALS --opt $POSTFIX_DB_NAME > ${WEBSITE_BASEDIR}/${_db_backup_file_name} 2> $log_file if [[ $? -eq 0 ]]; then echo_ok else @@ -675,7 +713,7 @@ else fi elif [[ "$POSTFIX_DB_TYPE" = "pgsql" ]]; then echo -n " (PostgreSQL).." - su - postgres -c "pg_dump -c $POSTFIX_DB_NAME" >> ${WEBSITE_BASEDIR}/${POSTFIX_DB_NAME}.${backup_date}.sql 2> $log_file + su - postgres -c "pg_dump -c $POSTFIX_DB_NAME" >> ${WEBSITE_BASEDIR}/${_db_backup_file_name} 2> $log_file if [[ $? -eq 0 ]]; then echo_ok else @@ -1406,22 +1444,22 @@ EOF cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file DocumentRoot "${WEBSITE_BASEDIR}/htdocs/" - EOF if $PHP_DEBIAN_INSTALLATION ; then php_socket_file="/run/php/php${php_major_version}-fpm.sock" if [[ -S "/run/php$(echo $php_major_version | cut -d'.' -f1)-fpm.sock" ]]; then php_socket_file="/run/php$(echo $php_major_version | cut -d'.' -f1)-fpm.sock" fi - cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file - SetHandler "proxy:unix:${php_socket_file}|fcgi://127.0.0.1" -EOF else - cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file - SetHandler "proxy:unix:/tmp/php-${php_latest_ver}-fpm.www.sock|fcgi://127.0.0.1" -EOF + php_socket_file="/run/php/php-${php_latest_ver}-fpm.www.sock" + if [[ -S "/tmp/php-${php_latest_ver}-fpm.www.sock" ]]; then + php_socket_file="/run/php/php-${php_latest_ver}-fpm.www.sock" + fi fi + cat <> ${APACHE_VHOST_DIR}/${WEBSITE_NAME}.conf 2>> $log_file + + SetHandler "proxy:unix:${php_socket_file}|fcgi://127.0.0.1" @@ -2425,13 +2463,47 @@ fi # - echononl "\tTake passwordhash from previosly installation.." if [[ -n "$_actual_password_hash" ]] ; then - perl -i -n -p -e "s#^(\s*\\\$CONF\['setup_password'\]\s*=.*)#//!\1\n\\\$CONF['setup_password'] = '$_actual_password_hash';#" \ - $pfa_conf_file >> $log_file 2>&1 - if [[ $? -eq 0 ]] ; then - echo_ok - else - echo_failed + + _failed=false + _backup_file="/tmp/$(basename "${pfa_conf_file}")" + mv "$pfa_conf_file" "$_backup_file" > $log_file 2>&1 + if [[ $? -ne 0 ]] ; then + _failed=true fi + + > $pfa_conf_file + _found=false + while IFS='' read -r _line || [[ -n $_line ]] ; do + if echo "$_line" | grep -i -E "^\s*\\\$CONF\['setup_password'\]\s*=.*;" > /dev/null 2>&1 ; then + echo -n '//!' >> $pfa_conf_file + echo "$_line" >> $pfa_conf_file + if ! $_found ; then + echo "\$CONF['setup_password'] = '$_actual_password_hash';" >> $pfa_conf_file + _found=true + fi + else + echo "$_line" >> $pfa_conf_file + fi + done < $_backup_file + + if [[ $? -ne 0 ]] ; then + _failed=true + fi + + if $_failed ; then + echo_failed + else + echo_ok + fi + + #perl -i -n -p -e "s#^(\s*\\\$CONF\['setup_password'\]\s*=.*)#//!\1\n\\\$CONF['setup_password'] = '$_actual_password_hash';#" \ + # $pfa_conf_file > $log_file 2>&1 + #if [[ $? -eq 0 ]] ; then + # echo_ok + #else + # echo_failed + #fi + else echo_skipped fi @@ -3360,6 +3432,11 @@ fi echo "" info "Browse to \033[1mhttp://${WEBSITE_NAME}/setup.php\033[m to create a 'setup password'\n$(cat <