diff --git a/handle_domain_on_webserver.sh b/handle_domain_on_webserver.sh index 7f3a247..62819e5 100755 --- a/handle_domain_on_webserver.sh +++ b/handle_domain_on_webserver.sh @@ -330,6 +330,8 @@ else fi fi +index_subdir_apache_vhost_dir="$(expr ${#apache_vhost_dir} + 1)" + if [[ "$(basename $apache_vhost_dir)" = 'sites-enabled' ]]; then apache_vhost_base_dir="$(dirname $apache_vhost_dir)/sites-available" elif [[ "$(basename $apache_vhost_dir)" =~ vhost ]]; then @@ -338,6 +340,61 @@ elif [[ "$(basename $(dirname $apache_vhost_dir))" =~ vhost ]]; then apache_vhost_base_dir="$(dirname $apache_vhost_dir)" fi + +declare -i _num=1 +while IFS='' read -r -d '' fq_name ; do + dirname="$(basename "$fq_name")" + [[ "$dirname" = "DELETED" ]] && continue + [[ "$dirname" = "BAK" ]] && continue + [[ "$dirname" =~ ^Moved ]] && continue + if [[ $_num -eq 1 ]]; then + _apache_additional_vhost_dirs="$(basename "$dirname")" + else + _apache_additional_vhost_dirs="$_apache_additional_vhost_dirs $(basename "$dirname")" + fi + ((_num++)) +done < <(find $apache_vhost_dir -mindepth 1 -maxdepth 1 -type d -print0) + + +echo "" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "If there are additional apache vhost directories, enter them here .." +echo "" +echo -e "\033[33m\033[1mNotice\033[m:" +echo -e " only first level subdiirectories of \033[1m$apache_vhost_dir\033[m" +echo -e " are posible values." +echo "" +echo "Blank seperated list of directories" +echo "" +apache_additional_vhost_dirs= +if [ -z "$_apache_additional_vhost_dirs" ]; then + echononl "Apache VHost directory: " + read apache_additional_vhost_dirs + while [[ "X$apache_additional_vhost_dirs" = "X" ]] ; do + echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n" + echononl "Apache VHost directory: " + read apache_additional_vhost_dirs + done +else + echononl "Apache VHost directory [${_apache_additional_vhost_dirs}]: " + read apache_additional_vhost_dirs + if [[ "X$apache_additional_vhost_dirs" = "X" ]] ; then + apache_additional_vhost_dirs="$_apache_additional_vhost_dirs" + fi +fi + +declare -a apache_additional_vhost_dir_arr=() +for _dir in $apache_additional_vhost_dirs ; do + if [[ -d "${apache_vhost_dir}/$_dir" ]] ; then + apache_additional_vhost_dir_arr+=("$_dir") + else + warn "$_dir is not a subdirectory of ${apache_vhost_dir}.\n\n \033[33m\033[1mIgnoring directory $_dir\033[m.." + fi +done + + echo "" echo "" echo -e "\033[32m--\033[m" @@ -380,6 +437,14 @@ done unset counter echo "" echo -e " Apache Vhosts Directory................: \033[1m$apache_vhost_dir\033[m" +if [[ ${#apache_additional_vhost_dir_arr[@]} -gt 0 ]] ; then + echo -en " Additional VHost Directories...........:\033[1m" + for _dir in ${apache_additional_vhost_dir_arr[@]} ; do + echo -n " $_dir" + done + echo -e "\033[m" + echo "" +fi echo -e " Base Directory Apache Websites.........: \033[1m$apache_web_base_dir\033[m" if $delete_mode ; then @@ -559,6 +624,19 @@ for domain in "${domain_req_for_del_arr[@]}" ; do # ----- _vhost_files="$(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" $apache_vhost_dir/* 2> /dev/null)" + + if [[ ${#apache_additional_vhost_dirs[@]} -gt 0 ]] ; then + for _dir in ${apache_additional_vhost_dirs[@]} ; do + if [[ -z "$_vhost_files" ]]; then + _vhost_files="$(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" \ + ${apache_vhost_dir}/${_dir}/* 2> /dev/null)" + else + _vhost_files="$_vhost_files $(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" \ + ${apache_vhost_dir}/${_dir}/* 2> /dev/null)" + fi + done + fi + if [[ -z "$_vhost_files" ]]; then error "No VHost Configuration found for domain \033[37m\033[1m${domain}\033[m." @@ -572,7 +650,8 @@ for domain in "${domain_req_for_del_arr[@]}" ; do for _vhost_file in $_vhost_files ; do - _basename_vhost_file="$(basename $_vhost_file)" + #_basename_vhost_file="$(basename $_vhost_file)" + _basename_vhost_file="${_vhost_file:$index_subdir_apache_vhost_dir}" containsElement "$_basename_vhost_file" "${vhost_file_arr[@]}" && continue vhost_file_arr+=("$_basename_vhost_file") @@ -1308,9 +1387,7 @@ for _vhost_file in ${vhost_file_req_for_del_arr[@]}; do if ! $_found ; then vhost_file_marked_for_del_arr+=("$_vhost_file") _dehydrated_name="$(grep ServerName $(realpath ${apache_vhost_dir})/$_vhost_file | awk '{print$2}' | sort -u)" -echo "" -echo "$_vhost_file - $dehydrated_domains_file - $_dehydrated_name" -echo "" + if [[ -n "$_dehydrated_name" ]] \ && grep -q -E "^\s*$_dehydrated_name" $dehydrated_domains_file 2> /dev/null ; then if ! containsElement "$_dehydrated_name" "${dehydrated_name_req_for_del_arr[@]}" ; then @@ -1403,6 +1480,14 @@ while IFS='' read -r -d '' filename ; do fi done < <(find $apache_vhost_dir -mindepth 1 -maxdepth 1 -type f -print0) +for _dir in ${apache_additional_vhost_dirs[@]} ; do + while IFS='' read -r -d '' filename ; do + if ! containsElement "$(realpath $filename)" "${_all_vhost_files_arr[@]}" ; then + _all_vhost_files_arr+=("$(realpath $filename)") + fi + done < <(find ${apache_vhost_dir}/$_dir -mindepth 1 -maxdepth 1 -type f -print0) +done + for _vhost_file in ${_all_vhost_files_arr[@]} ; do _doc_root="$(grep -E "\s*DocumentRoot\s+" $_vhost_file 2> /dev/null \ | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//' | sort -u )" @@ -1418,12 +1503,24 @@ for _doc_root in ${docroot_req_for_del_arr[@]} ; do for _val in ${_all_document_root_dirs_arr[@]} ; do IFS=':' read -a _val_arr <<< "$_val" if [[ "${_val_arr[0]}" = "$_realpath_doc_root" ]] ; then - if ! containsElement "$(basename ${_val_arr[1]})" "${vhost_file_marked_for_del_arr[@]}" ; then + + __tmp_vhost_file=${_val_arr[1]} + __realpath_apache_vhost_dir="$(realpath "$apache_vhost_dir")" + __index_subdir_realpath_apache_vhost_dir="$(expr ${#__realpath_apache_vhost_dir} + 1)" + __vhost_file="${__tmp_vhost_file:$__index_subdir_realpath_apache_vhost_dir}" + + if ! containsElement "$__vhost_file" "${vhost_file_marked_for_del_arr[@]}" ; then _not_in_use_by_others=false __msg="The DocumentRoot directory \033[1m${_doc_root}\033[m is also used - by vhost configuration file \033[1m$(basename ${_val_arr[1]})\033[m. But this file - isn't marked for deletion. So also the DocumentRoot will not marked for deletion." + by vhost configuration file + + \033[1m$__vhost_file\033[m + + But this file isn't marked for deletion. + + So also the DocumentRoot will not marked for deletion." + msg_exclude_doc_root_from_del_arr[${#msg_exclude_doc_root_from_del_arr[@]}]="$__msg" break @@ -1512,8 +1609,14 @@ if [[ ${#database_req_for_del_arr[@]} -gt 0 ]]; then _tmp_arr+=("${_val_arr[0]}") fi else - __msg="Database \033[1m${_val_arr[0]}\033[m is in use by DocumentRoot directory \033[1m${_val_arr[1]}\033[m, - but this directory is NOT marked for deletion. So also the database is not marked for deletion" + __msg="Database \033[1m${_val_arr[0]}\033[m is in use by DocumentRoot directory + + \033[1m${_val_arr[1]}\033[m, + + but this directory is NOT marked for deletion. + + So also the database is not marked for deletion" + msg_exclude_db_from_del_arr[${#msg_exclude_db_from_del_arr[@]}]="$__msg" fi done