handle_domain_on_webserver.sh: support multiple vhost directories.

This commit is contained in:
Christoph 2022-04-01 14:53:34 +02:00
parent 485d47158d
commit b1e360c93d

View File

@ -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