myvesta/bin/v-change-domain-owner
myvesta a4acb57e54
Fixing removing certificates during apache reload
v-suspend-web-domain on line 49 is triggering apache/nginx reload... that is doing it in the background... and on line 64, we were previously doing 'mv' for certificates... 
If the reload lasts too long it in the background, certificates will vanish because of 'mv' on line 64.
This fix will avoid this collision by doing 'cp' instead of 'mv', then sleeping for 10 sec, and then removing certificates.
We will call this bug "Nemanja Puhalo's bug" because he hit this bug first.
2023-10-08 16:28:08 +02:00

190 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# info: change domain owner
# options: DOMAIN USER
#
# The function of changing domain ownership.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
domain=$1
user=$2
# Includes
source $VESTA/func/ip.sh
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'DOMAIN USER'
is_format_valid 'domain' 'user'
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
owner=$($BIN/v-search-domain-owner $domain)
if [ -z "$owner" ]; then
check_result $E_NOTEXIST "domain $domain doesn't exist"
fi
if [ "$owner" = "$user" ]; then
exit
fi
USER_DATA=$VESTA/data/users/$owner
is_object_unsuspended 'user' 'USER' "$owner"
USER_DATA=$VESTA/data/users/$user
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# WEB domain
web_data=$(grep "DOMAIN='$domain'" $VESTA/data/users/$owner/web.conf)
if [ ! -z "$web_data" ]; then
$BIN/v-suspend-web-domain $owner $domain >> /dev/null 2>&1
eval $web_data
# Change IP
if [ ! -z "$ip" ]; then
web_data=$(echo "$web_data" | sed "s/IP='$IP'/IP='$ip'/")
fi
# Check SSL
if [ "$SSL" = 'yes' ]; then
ssl_crt=$VESTA/data/users/$owner/ssl/$domain.crt
ssl_key=$VESTA/data/users/$owner/ssl/$domain.key
ssl_ca=$VESTA/data/users/$owner/ssl/$domain.ca
ssl_pem=$VESTA/data/users/$owner/ssl/$domain.pem
cp $ssl_crt $VESTA/data/users/$user/ssl/
cp $ssl_key $VESTA/data/users/$user/ssl/
cp $ssl_ca $VESTA/data/users/$user/ssl/ > /dev/null 2>&1
cp $ssl_pem $VESTA/data/users/$user/ssl/ > /dev/null 2>&1
# rm -f $HOMEDIR/$owner/conf/web/ssl.$domain.*
fi
# Check ftp user account
if [ ! -z "$FTP_USER" ]; then
/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1
old_str="FTP_USER='$FTP_USER'"
new_str=$(echo "$old_str" | sed "s/${owner}_/${user}_/")
web_data=$(echo "$web_data" | sed "s/$old_str/$new_str/")
fi
# Move config
sed -i "/DOMAIN='$domain'/d" $VESTA/data/users/$owner/web.conf
echo "$web_data" >> $VESTA/data/users/$user/web.conf
# Move data
mv $HOMEDIR/$owner/web/$domain $HOMEDIR/$user/web/
# Change ownership
find $HOMEDIR/$user/web/$domain -user $owner \
-exec chown -h $user:$user {} \;
if [ "$SSL" = 'yes' ]; then
sleep 10
rm $ssl_crt
rm $ssl_key
rm $ssl_ca > /dev/null 2>&1
rm $ssl_pem > /dev/null 2>&1
rm -f $HOMEDIR/$owner/conf/web/ssl.$domain.*
fi
# Rebuild config
$BIN/v-unsuspend-web-domain $user $domain no >> /dev/null 2>&1
$BIN/v-rebuild-web-domains $owner no
$BIN/v-rebuild-web-domains $user
fi
# DNS domain
dns_data=$(grep "DOMAIN='$domain'" $VESTA/data/users/$owner/dns.conf)
if [ ! -z "$dns_data" ]; then
eval $dns_data
# Change IP
if [ ! -z "$ip" ]; then
dns_data=$(echo "$dns_data" | sed "s/IP='$IP'/IP='$ip'/")
sed -i "s/$IP/$ip/g" $VESTA/data/users/$owner/dns/$domain.conf
fi
# Move config
sed -i "/DOMAIN='$domain'/d" $VESTA/data/users/$owner/dns.conf
echo "$dns_data" >> $VESTA/data/users/$user/dns.conf
# Move dns records
mv $VESTA/data/users/$owner/dns/$domain.conf \
$VESTA/data/users/$user/dns/
# Rebuild config
$BIN/v-unsuspend-dns-domain $user $domain no >> /dev/null 2>&1
$BIN/v-rebuild-dns-domains $owner no
$BIN/v-rebuild-dns-domains $user
# Resync dns cluster
if [ ! -z "$DNS_CLUSTER" ]; then
v-sync-dns-cluster
fi
fi
# MAIL domain
mail_data=$(grep "DOMAIN='$domain'" $VESTA/data/users/$owner/mail.conf)
if [ ! -z "$mail_data" ]; then
# Move config
sed -i "/DOMAIN='$domain'/d" $VESTA/data/users/$owner/mail.conf
echo "$mail_data" >> $VESTA/data/users/$user/mail.conf
mv -f $VESTA/data/users/$owner/mail/$domain.conf \
$VESTA/data/users/$user/mail/
# Move DKIM
if [ -e "$VESTA/data/users/$owner/mail/$domain.pem" ]; then
mv -f $VESTA/data/users/$owner/mail/$domain.pem \
$VESTA/data/users/$user/mail/
mv -f $VESTA/data/users/$owner/mail/$domain.pub \
$VESTA/data/users/$user/mail/
fi
# Move data
mv $HOMEDIR/$owner/mail/$domain $HOMEDIR/$user/mail/
# Change ownership
find $HOMEDIR/$user/mail/$domain -user $owner \
-exec chown -h $user {} \;
# Rebuild config
$BIN/v-unsuspend-mail-domain $user $domain no >> /dev/null 2>&1
$BIN/v-rebuild-mail-domains $owner no
$BIN/v-rebuild-mail-domains $user
# Checking exim username for later chowning
exim_user="exim";
check_exim_username=$(grep -c '^Debian-exim:' /etc/passwd)
if [ "$check_exim_username" -eq 1 ]; then
exim_user="Debian-exim"
fi
# Chowning mail conf files to exim user
if [ -d "$HOMEDIR/$user/conf/mail/$domain" ]; then
find $HOMEDIR/$user/conf/mail/$domain -user root \
-exec chown $exim_user {} \;
fi
fi
# Update counters
$BIN/v-update-user-counters $owner
$BIN/v-update-user-counters $user
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit