#!/bin/bash # info: restore user # options: USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY] # # The function for resotring user from backup. #----------------------------------------------------------# # Variable&Function # #----------------------------------------------------------# # Import VESTA variable for cron launch source /etc/profile # Argument definition user=$1 backup=$2 web=$3 dns=$4 mail=$5 db=$6 cron=$7 udir=$8 notify=${9-no} # Define backup dir if [ -z "$BACKUP" ]; then BACKUP=/backup fi # Includes source $VESTA/func/main.sh source $VESTA/func/domain.sh source $VESTA/func/ip.sh source $VESTA/func/db.sh source $VESTA/func/rebuild.sh source $VESTA/conf/vesta.conf # Check backup ownership function is_backup_available() { passed=false if [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then passed=true elif [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then passed=true fi if [ $passed = false ]; then check_result $E_FORBIDEN "permission denied" fi } # Defining ftp command function ftpc() { /usr/bin/ftp -n $HOST $PORT <" { if {\$count < \$argc} { set arg [lindex \$argv \$count] send "\$arg\r" incr count } else { send "exit\r" set output "Disconnected." if {[info exists rc] != 1} { set rc $OK } } exp_continue } timeout { set output "Connection timeout." set rc $E_CONNECT } } if {[info exists output] == 1} { puts "\$output" } exit \$rc EOF } # SFTP backup download function sftp_download() { source $VESTA/conf/sftp.backup.conf if [ -z "$PORT" ]; then PORT='22' fi cd $BACKUP if [ -z $BPATH ]; then sftpc "get $1" > /dev/null 2>&1 else sftpc "cd $BPATH" "get $1" > /dev/null 2>&1 fi } # Google backup download function google_download() { source $VESTA/conf/google.backup.conf gsutil="$VESTA/3rdparty/gsutil/gsutil" export BOTO_CONFIG="$VESTA/conf/.google.backup.boto" ${gsutil} cp gs://$BUCKET/$BPATH/$1 $BACKUP/ > /dev/null 2>&1 if [ "$?" -ne 0 ]; then check_result "$E_CONNECT" "gsutil failed to download $1" fi } #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# args_usage='USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY]' check_args '2' "$#" "$args_usage" is_format_valid 'user' 'backup' is_backup_available "$user" "$backup" #----------------------------------------------------------# # Action # #----------------------------------------------------------# # Checking local backup if [ ! -e "$BACKUP/$backup" ]; then if [[ "$BACKUP_SYSTEM" =~ "google" ]]; then google_download $backup downloaded='yes' fi if [[ "$BACKUP_SYSTEM" =~ "sftp" ]] && [ -z "$downloaded" ]; then sftp_download $backup downloaded='yes' fi if [[ "$BACKUP_SYSTEM" =~ "ftp" ]] && [ -z "$downloaded" ]; then ftp_download $backup downloaded='yes' fi if [ -z "$downloaded" ]; then check_result $E_NOTEXIST "backup $backup doesn't exist" fi fi # Checking user existance on the server check_user=$(is_object_valid 'user' 'USER' "$user") if [ -z "$check_user" ]; then is_object_unsuspended 'user' 'USER' "$user" subj="$user → restore failed" email=$(get_user_value '$CONTACT') else create_user="yes" email=$(grep CONTACT $VESTA/data/users/admin/user.conf | cut -f2 -d \') fi # Checking avaiable disk space disk_usage=$(df $BACKUP |tail -n1 |tr ' ' '\n' |grep % |cut -f 1 -d %) if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then echo "Error: Not enough disk space" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result $E_DISK "Not enough disk space" fi # Checking load average la=$(cat /proc/loadavg |cut -f 1 -d ' ' |cut -f 1 -d '.') i=0 while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do echo -e "$(date "+%F %T") Load Average $la" sleep 60 if [ "$i" -ge "15" ]; then la_error="LoadAverage $la is above threshold" echo "Error: $la_error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result $E_LA "$la_error" fi la=$(cat /proc/loadavg |cut -f 1 -d ' ' |cut -f 1 -d '.') (( ++i)) done if [ -z "$BACKUP_TEMP" ]; then BACKUP_TEMP=$BACKUP fi # Creating temporary directory tmpdir=$(mktemp -p $BACKUP_TEMP -d) if [ "$?" -ne 0 ]; then echo "Can't create tmp dir $tmpdir" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_NOTEXIST" "can't create tmp dir" fi # Restoring user account if [ "$create_user" = 'yes' ]; then echo "-- USER --" |tee $tmpdir/restore.log echo -e "$(date "+%F %T") $user" |tee -a $tmpdir/restore.log # Unpacking user container tar xf $BACKUP/$backup -C $tmpdir ./vesta if [ "$?" -ne 0 ]; then rm -rf $tmpdir echo "Can't unpack user contaner" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "can't unpack user contaner" fi # Restoring user.conf mkdir $USER_DATA cp $tmpdir/vesta/user.conf $USER_DATA/ cp -r $tmpdir/vesta/ssl $USER_DATA/ >/dev/null 2>&1 cp $tmpdir/vesta/backup-excludes.conf $USER_DATA/ >/dev/null 2>&1 # Rebuilding user rebuild_user_conf fi # Unpacking pam container tar xf $BACKUP/$backup -C $tmpdir ./pam if [ "$?" -ne 0 ]; then rm -rf $tmpdir echo "Can't unpack PAM contaner" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "can't unpack PAM contaner" fi old_user=$(cut -f 1 -d : $tmpdir/pam/passwd) old_uid=$(cut -f 3 -d : $tmpdir/pam/passwd) new_uid=$(grep "^$user:" /etc/passwd |cut -f 3 -d :) # Restoring web domains if [ "$web" != 'no' ] && [ ! -z "$WEB_SYSTEM" ]; then echo -e "\n-- WEB --" |tee -a $tmpdir/restore.log # Creating web domain restore list backup_domains=$(tar -tf $BACKUP/$backup |grep "^./web") backup_domains=$(echo "$backup_domains" |grep domain_data.tar.gz) backup_domains=$(echo "$backup_domains" |cut -f 3 -d /) if [ -z "$web" ] || [ "$web" = '*' ]; then domains="$backup_domains" else echo "$web" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi # Restoring web domain for domain in $domains; do echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log # Checking domain existance check_config=$(grep "DOMAIN='$domain'" $USER_DATA/web.conf) if [ -z "$check_config" ]; then check_new=$(is_domain_new 'web' $domain) if [ ! -z "$check_new" ]; then rm -rf $tmpdir error="$domain belongs to another user" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi fi # Unpacking domain container tar xf $BACKUP/$backup -C $tmpdir ./web/$domain if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack $domain web container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Restoring web.conf if [ -z "$check_config" ]; then eval $(cat $tmpdir/web/$domain/vesta/web.conf) # Deleting conflicting aliases for dom_alias in ${ALIAS//,/ }; do check_new=$(is_domain_new 'web' $dom_alias) if [ ! -z "$check_new" ]; then ALIAS=$(echo "$ALIAS" |\ sed "s/,/\n/g"|\ sed "s/^$dom_alias$//g"|\ sed "/^$/d"|\ sed ':a;N;$!ba;s/\n/,/g') fi done # Checking ip address check_ip=$(is_ip_valid $IP $user) if [ ! -z "$check_ip" ]; then local_ip='' get_user_ip $user old_ip=$IP IP=$ip fi # Checking web template check_tpl=$(is_web_template_valid $TPL) if [ ! -z "$check_tpl" ]; then TPL='default' fi # Checking proxy template check_proxy_tpl=$(is_proxy_template_valid $PROXY) if [ ! -z "$check_proxy_tpl" ]; then PROXY='default' fi # Checking backend template check_backend_tpl=$(is_backend_template_valid $BACKEND) if [ ! -z "$check_proxy_tpl" ]; then BACKEND='default' fi # Converting ftp users if [ ! -z "$FTP_USER" ]; then FTP_USER=$(echo "$FTP_USER" |sed -e "s/${old_user}_//") FTP_USER="${user}_${FTP_USER}" fi # Converting stats users if [ ! -z "$STATS_USER" ]; then STATS_USER=$(echo "$STATS_USER" |sed -e "s/${old_user}_//") STATS_USER="${user}_${STATS_USER}" fi # Copying ssl certificates if [ "$SSL" = 'yes' ]; then certificates=$(ls $tmpdir/web/$domain/conf| grep ssl) certificates=$(echo "$certificates" |grep $domain) for crt in $certificates; do crt=$(echo $crt|sed -e "s/ssl.//") cp -f $tmpdir/web/$domain/conf/ssl.$crt $USER_DATA/ssl/$crt done fi # Concatenating web.conf keys str="DOMAIN='$domain' IP='$IP' IP6='$IP6' ALIAS='$ALIAS'" str="$str TPL='$TPL' SSL='$SSL' SSL_HOME='$SSL_HOME'" str="$str LETSENCRYPT='$LETSENCRYPT' FTP_USER='$FTP_USER'" str="$str FTP_MD5='$FTP_MD5' BACKEND='$BACKEND' PROXY='$PROXY'" str="$str PROXY_EXT='$PROXY_EXT' STATS='$STATS'" str="$str STATS_USER='$STATS_USER' STATS_CRYPT='$STATS_CRYPT'" str="$str U_DISK='$U_DISK' U_BANDWIDTH='0' SUSPENDED='no'" str="$str TIME='$(date +%T)' DATE='$(date +%F)'" echo $str >> $USER_DATA/web.conf # Rebuilding backend if [ ! -z "$WEB_BACKEND" ]; then $BIN/v-add-web-domain-backend $user $domain $BACKEND fi # Rebuilding vhost rebuild_web_domain_conf fi # Restoring web domain data chown $user $tmpdir chmod u+w $HOMEDIR/$user/web/$domain sudo -u $user tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \ -C $HOMEDIR/$user/web/$domain/ --exclude=./logs/* \ 2> $HOMEDIR/$user/web/$domain/restore_errors.log if [ -e "$HOMEDIR/$user/web/$domain/restore_errors.log" ]; then chown $user:$user $HOMEDIR/$user/web/$domain/restore_errors.log fi #if [ "$?" -ne 0 ]; then # rm -rf $tmpdir # error="can't unpack $domain data tarball" # echo "$error" |$SENDMAIL -s "$subj" $email $notify # sed -i "/ $user /d" $VESTA/data/queue/backup.pipe # check_result "$E_PARSING" "$error" #fi # Applying Fix for tar < 1.24 find $HOMEDIR/$user/web/$domain -type d \ -exec chown -h $user:$user {} \; # Re-chowning files if uid differs if [ "$old_uid" -ne "$new_uid" ]; then find $HOMEDIR/$user/web/$domain/ -user $old_uid \ -exec chown -h $user:$user {} \; fi done # Adding user to traff queue sed -i "/ $user /d" $VESTA/data/queue/traffic.pipe echo "$BIN/v-update-web-domains-traff $user" >>\ $VESTA/data/queue/traffic.pipe # Restarting web server $BIN/v-restart-web check_result $? "Web restart failed" if [ ! -z "$PROXY_SYSTEM" ]; then $BIN/v-restart-proxy check_result $? "Proxy restart failed" fi fi # Restoring dns domains if [ "$dns" != 'no' ] && [ ! -z "$DNS_SYSTEM" ]; then echo -e "\n-- DNS --" |tee -a $tmpdir/restore.log # Creating dns domain restore list backup_domains=$(tar -tf $BACKUP/$backup |grep "^./dns") backup_domains=$(echo "$backup_domains" |grep "dns.conf$") backup_domains=$(echo "$backup_domains" |cut -f 3 -d /) if [ -z "$dns" ] || [ "$dns" = '*' ]; then domains="$backup_domains" else echo "$dns" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi # Restoring dns domain for domain in $domains; do echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log # Checking domain existance check_config=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) if [ -z "$check_config" ]; then check_new=$(is_domain_new 'dns' $domain) if [ ! -z "$check_new" ]; then rm -rf $tmpdir error="$domain belongs to another user" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi fi # Unpacking domain container tar xf $BACKUP/$backup -C $tmpdir ./dns/$domain if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack $domain dns container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Restoring dns.conf if [ -z "$check_config" ]; then eval $(cat $tmpdir/dns/$domain/vesta/dns.conf) # Checking ip address check_ip=$(is_ip_valid $IP $user) if [ ! -z "$check_ip" ]; then local_ip='' get_user_ip $user old_ip=$IP IP=$ip fi # Checking dns template check_tpl=$(is_dns_template_valid $TPL) if [ ! -z "$check_tpl" ]; then TPL='default' fi # Concatenating dns.conf keys str="DOMAIN='$domain' IP='$IP' TPL='$TPL' TTL='$TTL' EXP='$EXP'" str="$str SOA='$SOA' RECORDS='$RECORDS' SUSPENDED='no'" str="$str TIME='$(date +%T)' DATE='$(date +%F)'" echo $str >> $USER_DATA/dns.conf fi # Restoring dns records cp -f $tmpdir/dns/$domain/vesta/$domain.conf $USER_DATA/dns/ # Rebuilding dns domain rebuild_dns_domain_conf done # Restarting DNS $BIN/v-restart-dns check_result $? "DNS restart failed" fi # Restoring mail domains if [ "$mail" != 'no' ] && [ ! -z "$MAIL_SYSTEM" ]; then echo -e "\n-- MAIL --" |tee -a $tmpdir/restore.log # Creating mail domain restore list backup_domains=$(tar -tf $BACKUP/$backup |grep "^./mail") backup_domains=$(echo "$backup_domains" |grep "mail.conf$") backup_domains=$(echo "$backup_domains" |cut -f 3 -d /) if [ -z "$mail" ] || [ "$mail" = '*' ]; then domains="$backup_domains" else echo "$mail" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi # 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 # Restoring dns domain for domain in $domains; do echo -e "$(date "+%F %T") $domain" |tee -a $tmpdir/restore.log # Checking domain existance check_config=$(grep "DOMAIN='$domain'" $USER_DATA/mail.conf) if [ -z "$check_config" ]; then check_new=$(is_domain_new 'mail' $domain) if [ ! -z "$check_new" ]; then rm -rf $tmpdir error="$domain belongs to another user" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi fi # Unpacking domain container tar xf $BACKUP/$backup -C $tmpdir ./mail/$domain if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack $domain mail container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Restoring mail.conf if [ -z "$check_config" ]; then cat $tmpdir/mail/$domain/vesta/mail.conf >> $USER_DATA/mail.conf fi # Restoring DKIM if [ -e "$tmpdir/mail/$domain/vesta/$domain.pem" ]; then cp -f $tmpdir/mail/$domain/vesta/$domain.pem $USER_DATA/mail/ cp -f $tmpdir/mail/$domain/vesta/$domain.pub $USER_DATA/mail/ fi # Restoring email accounts cp -f $tmpdir/mail/$domain/vesta/$domain.conf $USER_DATA/mail/ # Rebuilding mail config rebuild_mail_domain_conf domain_idn=$domain format_domain_idn # Restoring emails if [ -e "$tmpdir/mail/$domain/accounts.tar.gz" ]; then chown $user $tmpdir chmod u+w $HOMEDIR/$user/mail/$domain_idn sudo -u $user tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \ -C $HOMEDIR/$user/mail/$domain_idn/ if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack $domain mail account container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Re-chowning files if uid differs if [ "$old_uid" -ne "$new_uid" ]; then find $HOMEDIR/$user/mail/$domain_idn -user $old_uid \ -exec chown -h $user:mail {} \; fi fi # Chowning mail conf files to exim user find $HOMEDIR/$user/conf/mail/$domain_idn -user root \ -exec chown $exim_user {} \; done fi # Restoring databases if [ "$db" != 'no' ] && [ ! -z "$DB_SYSTEM" ]; then echo -e "\n-- DB --" |tee -a $tmpdir/restore.log # Creating database restore list backup_databases=$(tar -tf $BACKUP/$backup |grep "^./db") backup_databases=$(echo "$backup_databases" |grep db.conf) backup_databases=$(echo "$backup_databases" |cut -f 3 -d / |sort -u) if [ -z "$db" ] || [ "$db" = '*' ]; then databases="$backup_databases" else echo "$db" |tr ',' '\n' | sed -e "s/$/$/" > $tmpdir/selected.txt databases=$(echo "$backup_databases" |egrep -f $tmpdir/selected.txt) fi # Restoring database for database in $databases; do echo -e "$(date "+%F %T") $database" |tee -a $tmpdir/restore.log # Checking database existance check_config=$(grep "DB='$database'" $USER_DATA/db.conf) # Unpacking database container tar xf $BACKUP/$backup -C $tmpdir ./db/$database if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack $database database container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Restore database config if [ -z "$check_config" ]; then eval $(cat $tmpdir/db/$database/vesta/db.conf) DB=$(echo "$DB" |sed -e "s/${old_user}_//") DB="${user}_${DB}" DBUSER=$(echo "$DBUSER" |sed -e "s/${old_user}_//") DBUSER="${user}_${DBUSER}" str="DB='$DB' DBUSER='$DBUSER' MD5='$MD5' HOST='$HOST'" str="$str TYPE='$TYPE' CHARSET='$CHARSET' U_DISK='$U_DISK'" str="$str SUSPENDED='no' TIME='$(date +%T)' DATE='$(date +%F)'" echo $str >> $USER_DATA/db.conf else eval $(grep "DB='$database'" $USER_DATA/db.conf) fi # Unziping database dump gzip -d $tmpdir/db/$database/$database.*.sql.gz # Importing database dump database_dump="$tmpdir/db/$database/$database.$TYPE.sql" case $TYPE in mysql) rebuild_mysql_database; import_mysql_database $database_dump ;; pgsql) rebuild_pgsql_database; import_pgsql_database $database_dump ;; esac done fi # Restoring cron jobs if [ "$cron" != 'no' ] && [ ! -z "CRON_SYSTEM" ]; then echo -e "\n-- CRON --" |tee -a $tmpdir/restore.log # Unpacking cron container tar xf $BACKUP/$backup -C $tmpdir ./cron if [ "$?" -ne 0 ]; then rm -rf $tmpdir error="Can't unpack cron container" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi jobs=$(wc -l $tmpdir/cron/cron.conf |cut -f 1 -d' ') if [ "$jobs" -eq 1 ]; then echo -e "$(date "+%F %T") $jobs cron job" |tee -a $tmpdir/restore.log else echo -e "$(date "+%F %T") $jobs cron jobs"|tee -a $tmpdir/restore.log fi # Restoring cron jobs cp $tmpdir/cron/cron.conf $USER_DATA/cron.conf # Rebuilding cron jobs sync_cron_jobs # Restarting cron $BIN/v-restart-cron check_result $? "CRON restart failed" fi # Restoring user files and directories if [ "$udir" != 'no' ]; then echo -e "\n-- USER FILES --" |tee -a $tmpdir/restore.log # Unpacking user dir container if [ ! -z "$(tar -tf $BACKUP/$backup |grep './user_dir')" ]; then # Creating user dir restore list backup_dirs=$(tar -tf $BACKUP/$backup |grep "^./user_dir") backup_dirs=$(echo "$backup_dirs" |grep tar.gz) backup_dirs=$(echo "$backup_dirs" |cut -f 3 -d /) backup_dirs=$(echo "$backup_dirs" |sed "s/.tar.gz//") if [ -z "$udir" ] || [ "$udir" = '*' ]; then user_dirs="$backup_dirs" else echo "$udir" |tr ',' '\n' > $tmpdir/selected.txt user_dirs=$(echo "$backup_dirs" |egrep -f $tmpdir/selected.txt) fi for user_dir in $user_dirs; do echo -e "$(date "+%F %T") $user_dir" |tee -a $tmpdir/restore.log tar xf $BACKUP/$backup -C $tmpdir ./user_dir/$user_dir.tar.gz if [ "$?" -ne 0 ]; then error="can't unpack $user_dir user dir contaner" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi tar xzf $tmpdir/user_dir/$user_dir.tar.gz -C $HOMEDIR/$user if [ "$?" -ne 0 ]; then error="can't unpack $user_dir user dir contaner" echo "$error" |$SENDMAIL -s "$subj" $email $notify sed -i "/ $user /d" $VESTA/data/queue/backup.pipe check_result "$E_PARSING" "$error" fi # Re-chowning files if uid differs if [ "$old_uid" -ne "$new_uid" ]; then find $HOMEDIR/$user/$user_dir -user $old_uid \ -exec chown -h $user:$user {} \; fi done fi fi # Sending mail notification subj="$user → restore has been completed" cat $tmpdir/restore.log |$SENDMAIL -s "$subj" $email $notify # Deleting temporary data rm -rf $tmpdir # Cleaning restore queue sed -i "/v-restore-user $user /d" $VESTA/data/queue/backup.pipe #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# # Update user counters $BIN/v-update-user-counters $user $BIN/v-update-user-counters admin $BIN/v-update-sys-ip-counters # Logging log_event "$OK" "$ARGUMENTS" exit