| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812 |
- #!/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 defenition
- 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=/home/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 function
- is_backup_valid() {
- if [ ! -e "$BACKUP/$backup" ]; then
- echo "Error: backup doesn't exist"
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- }
- #----------------------------------------------------------#
- # Verifications #
- #----------------------------------------------------------#
- args_usage='USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIR] [NOTIFY]'
- check_args '2' "$#" "$args_usage"
- validate_format 'user' 'backup'
- is_backup_valid
- is_backup_available
- #----------------------------------------------------------#
- # Action #
- #----------------------------------------------------------#
- # Define email wrapper
- send_mail="$VESTA/web/inc/mail-wrapper.php"
- # Check user
- check_user=$(is_object_valid 'user' 'USER' "$user")
- if [ -z "$check_user" ]; then
- is_object_unsuspended 'user' 'USER' "$user"
- if [ "$notify" != 'no' ]; then
- subj="$user → restore failed"
- email=$(get_user_value '$CONTACT')
- else
- subj="$user → restore failed"
- email=$(grep CONTACT $VESTA/data/users/admin/user.conf |cut -f2 -d \')
- fi
- else
- # Set flag for user creation
- create_user="yes"
- # Set notification email and subject
- subj="$user → restore failed"
- email=$(grep CONTACT $VESTA/data/users/admin/user.conf | cut -f2 -d \')
- fi
- # Check disk usage
- disk_usage=$(df $BACKUP |tail -n1 |tr ' ' '\n' |grep % |cut -f 1 -d %)
- if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then
- rm -rf $tmpdir
- echo "Not enough disk space to run backup" | $send_mail -s "$subj" $email
- echo "Error: Not enough disk space"
- sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
- log_event "$E_DISK" "$EVENT"
- exit $E_DISK
- fi
- # Check load average
- la=$(cat /proc/loadavg | cut -f 1 -d ' ' | cut -f 1 -d '.')
- i=0
- while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do
- echo "$(date "+%F %T") Load Average $la"
- echo
- sleep 60
- if [ "$i" -ge "15" ]; then
- echo "LoadAverage $i is above threshold" |$send_mail -s "$subj" $email
- echo "Error: LA is too high"
- sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
- log_event "$E_LA" "$EVENT"
- exit $E_LA
- fi
- (( ++i))
- done
- # Creating temporary directory
- tmpdir=$(mktemp -p $BACKUP -d)
- if [ "$?" -ne 0 ]; then
- echo "Can't create tmp dir $tmpdir" | $send_mail -s "$subj" $email
- echo "Error: can't create tmp dir"
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- # User
- if [ "$create_user" = 'yes' ]; then
- echo "-- USER --"
- msg="$msg\n-- USER --"
- echo -e "$(date "+%F %T") $user"
- msg="$msg\n$(date "+%F %T") $user"
- # unpack user container
- tar xf $BACKUP/$backup -C $tmpdir ./vesta
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack user contaner"
- echo "Can't unpack user contaner" | $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Restore cron records
- mkdir $USER_DATA
- cp $tmpdir/vesta/user.conf $USER_DATA/
- # Rebuild cron
- rebuild_user_conf
- echo
- msg="$msg\n"
- fi
- # WEB
- if [ "$web" != 'no' ]; then
- echo "-- WEB --"
- msg="$msg\n-- WEB --"
- # Unpack pam container
- tar xf $BACKUP/$backup -C $tmpdir ./pam
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack PAM contaner"
- echo "Can't unpack PAM contaner" | $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Get user id
- old_uid=$(cut -f 3 -d : $tmpdir/pam/passwd)
- new_uid=$(grep "^$user:" /etc/passwd | cut -f 3 -d :)
- # Create domain list
- domain_list=$(tar -tf $BACKUP/$backup | grep "^./web" |\
- grep domain_data.tar.gz | cut -f 3 -d '/')
- if [ ! -z "$web" ]; then
- dom_include_list=$(mktemp)
- for domain_include in ${web//,/ }; do
- echo "^$domain_include$" >> $dom_include_list
- done
- domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
- rm -f $dom_include_list
- fi
- for domain in $domain_list; do
- echo -e "$(date "+%F %T") $domain"
- msg="$msg\n$(date "+%F %T") $domain"
- # unpack domain container
- tar xf $BACKUP/$backup -C $tmpdir ./web/$domain
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $domain web contaner"
- echo "Can't unpack $domain web contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Restore domain config
- check_config=$(grep "DOMAIN='$domain'" $USER_DATA/web.conf)
- if [ -z "$check_config" ]; then
- # Parse domain config
- eval $(cat $tmpdir/web/$domain/vesta/web.conf)
- # Check if domain new
- check_new=$(is_domain_new 'web' $domain)
- if [ ! -z "$check_new" ]; then
- echo "Error: web domain $domain belongs to another user"
- echo "Web domain $domain belongs to another user" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- log_event "$E_EXISTS" "$EVENT"
- exit $E_EXISTS
- fi
- # Check if domain alias is new
- for dom_alias in ${ALIAS//,/ }; do
- check_new=$(is_domain_new 'web' $dom_alias)
- if [ ! -z "$check_new" ]; then
- # Delete conflicting alias
- ALIAS=$(echo "$ALIAS" |\
- sed "s/,/\n/g"|\
- sed "s/^$dom_alias$//g"|\
- sed "/^$/d"|\
- sed ':a;N;$!ba;s/\n/,/g')
- fi
- done
- # Check ip address
- check_ip=$(is_ip_valid $IP)
- if [ -z "$check_ip" ]; then
- check_ip=$(is_ip_avalable $IP)
- fi
- if [ ! -z "$check_ip" ]; then
- IP=$(get_user_ip $user)
- if [ -z "$IP" ]; then
- echo "Error: no avaiable IP address"
- echo "No available IP address" |\
- $send_mail -s "$subj" $email
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- echo "$IP" > $tmpdir/ip_mapping.$domain
- fi
- # Check web template
- check_tpl=$(is_web_template_valid)
- if [ ! -e "$WEBTPL/$WEB_SYSTEM/$TPL.tpl" ]; then
- TPL="default"
- if [ ! -e "$WEBTPL/$WEB_SYSTEM/$TPL.tpl" ]; then
- echo "Error: no avaiable web template"
- echo "No available web template" |\
- $send_mail -s "$subj" $email
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- fi
- # Check proxy template
- if [ ! -z "$PROXY_SYSTEM" ] && [ ! -z "$PROXY" ]; then
- if [ ! -e "$WEBTPL/$PROXY_SYSTEM/$TPL.tpl" ]; then
- PROXY="default"
- if [ ! -e "$WEBTPL/$PROXY_SYSTEM/$TPL.tpl" ]; then
- echo "Error: no avaiable proxy template"
- echo "No available proxy tpl" |\
- $send_mail -s "$subj" $email
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- fi
- fi
- # Convert ftp user
- if [ ! -z "$FTP_USER" ]; then
- FTP_USER=$(echo "$FTP_USER" | cut -f 2,3,4,5,6,7 -d '_')
- FTP_USER="${user}_${FTP_USER}"
- fi
- # Convert stats user
- if [ ! -z "$STATS_USER" ]; then
- STATS_USER=$(echo "$STATS_USER" | cut -f 2,3,4,5,6,7 -d '_')
- STATS_USER="${user}_${STATS_USER}"
- fi
- str="DOMAIN='$domain' IP='$IP' IP6='$IP6' ALIAS='$ALIAS'"
- str="$str TPL='$TPL' SSL='$SSL' SSL_HOME='$SSL_HOME'"
- str="$str FTP_USER='$FTP_USER' FTP_MD5='$FTP_MD5' 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
- # Copy ssl certificate
- if [ "$SSL" = 'yes' ]; then
- for crt in $(ls $tmpdir/web/$domain/conf |grep ssl); do
- crt=$(echo "$crt" |sed "s/ssl.//")
- cp -f $tmpdir/web/$domain/conf/ssl.$crt $USER_DATA/ssl/$crt
- done
- fi
- # Rebuild web config
- rebuild_web_domain_conf
- # Adding vhost
- web_conf="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
- tmp_conf="$HOMEDIR/$user/conf/web/tmp_$WEB_SYSTEM.conf"
- conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
- cat $tmp_conf >> $conf
- rm -f $tmp_conf
- web_include=$(grep "$conf" $web_conf)
- if [ -z "$web_include" ]; then
- echo "Include $conf" >> $web_conf
- fi
- # Adding SSL vhost
- if [ "$SSL" = 'yes' ]; then
- tmp_conf="$HOMEDIR/$user/conf/web/tmp_s$WEB_SYSTEM.conf"
- conf="$HOMEDIR/$user/conf/web/s$WEB_SYSTEM.conf"
- cat $tmp_conf >> $conf
- rm -f $tmp_conf
- fi
- ssl_include=$(grep "$conf" $web_conf)
- if [ -z "$ssl_include" ]; then
- echo "Include $conf" >> $web_conf
- fi
- # Proxy
- if [ ! -z "$PROXY_SYSTEM" ]; then
- # Adding proxy vhost
- proxy_conf="/etc/$PROXY_SYSTEM/conf.d/vesta.conf"
- if [ ! -z "$PROXY" ]; then
- tmp_conf="$HOMEDIR/$user/conf/web/tmp_$PROXY_SYSTEM.conf"
- conf="$HOMEDIR/$user/conf/web/$PROXY_SYSTEM.conf"
- cat $tmp_conf >> $conf
- rm -f $tmp_conf
- fi
- proxy_include=$(grep "$conf" $proxy_conf)
- if [ -z "$proxy_include" ]; then
- echo "include $conf;" >> $proxy_conf
- fi
- # Adding SSL proxy vhost
- if [ ! -z "$PROXY" ] && [ "$SSL" = 'yes' ]; then
- tmp_conf="$HOMEDIR/$user/conf/web/tmp_s$PROXY_SYSTEM.conf"
- conf="$HOMEDIR/$user/conf/web/s$PROXY_SYSTEM.conf"
- cat $tmp_conf >> $conf
- rm -f $tmp_conf
- proxy_include=$(grep "$conf" $proxy_conf)
- if [ -z "$proxy_include" ]; then
- echo "include $conf;" >> $proxy_conf
- fi
- fi
- fi
- fi
- # Restore data
- tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \
- -C $HOMEDIR/$user/web/$domain/
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $domain data tarball"
- echo "Can't can't unpack $domain data tarball" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # ReChown 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
- # Restart WEB
- $BIN/v-restart-web
- if [ $? -ne 0 ]; then
- exit E_RESTART
- fi
- $BIN/v-restart-proxy
- if [ $? -ne 0 ]; then
- exit E_RESTART
- fi
- echo
- msg="$msg\n"
- fi
- # DNS
- if [ "$dns" != 'no' ]; then
- echo "-- DNS --"
- msg="$msg\n-- DNS --"
- # Create domain list
- domain_list=$(tar -tf $BACKUP/$backup | grep "^./dns" |\
- grep dns.conf | cut -f 3 -d '/')
- if [ ! -z "$dns" ]; then
- dom_include_list=$(mktemp)
- for domain_include in ${dns//,/ }; do
- echo "^$domain_include$" >> $dom_include_list
- done
- domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
- rm -f $dom_include_list
- fi
- for domain in $domain_list; do
- echo -e "$(date "+%F %T") $domain"
- msg="$msg\n$(date "+%F %T") $domain"
- # unpack domain container
- tar xf $BACKUP/$backup -C $tmpdir ./dns/$domain
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $domain dns contaner"
- echo "Can't unpack $domain dns contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Restore domain config
- check_config=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
- if [ -z "$check_config" ]; then
- # Parse domain config
- eval $(cat $tmpdir/dns/$domain/vesta/dns.conf)
- # Check if domain new
- check_new=$(is_domain_new 'dns' $domain)
- if [ ! -z "$check_new" ]; then
- echo "Error: dns domain $domain belongs to another user"
- echo "DNS domain $domain belongs to another user" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- log_event "$E_EXISTS" "$EVENT"
- exit $E_EXISTS
- fi
- # Check ip address
- if [ -e "$tmpdir/ip_mapping.$domain" ]; then
- OLD=$IP
- IP=$(cat $tmpdir/ip_mapping.$domain)
- sed -i "s/$OLD/$IP/g" $tmpdir/dns/$domain/vesta/$domain.conf
- else
- check_ip=$(is_ip_valid $IP)
- if [ ! -z "$check_ip" ]; then
- if [ -z "$IP" ]; then
- IP=$(get_user_ip $user)
- fi
- fi
- fi
- if [ -z "$IP" ]; then
- echo "Error: no avaiable IP address"
- echo "No available IP address" | $send_mail -s "$subj" $email
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- # Check dns template
- check_tpl=$(is_dns_template_valid)
- if [ ! -z "$check_tpl" ]; then
- templates=$(ls -t $VESTA/data/templates/dns/ |\
- grep '\.tpl' |\
- cut -f 1 -d '.')
- if [ ! -z "$(echo $templates |grep default)" ]; then
- TPL=$(echo "$templates" |grep default |head -n1)
- else
- TPL=$("$templates" |head -n1)
- fi
- if [ -z "$TPL" ]; then
- echo "Error: no avaiable dns template"
- echo "No available dns template" |\
- $send_mail -s "$subj" $email
- log_event "$E_NOTEXIST" "$EVENT"
- exit $E_NOTEXIST
- fi
- fi
- 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
- # Restore dns records
- cp -f $tmpdir/dns/$domain/vesta/$domain.conf $USER_DATA/dns/
- # Rebuild dns config
- rebuild_dns_domain_conf
- done
- # Restart DNS
- $BIN/v-restart-dns
- if [ $? -ne 0 ]; then
- exit E_RESTART
- fi
- echo
- msg="$msg\n"
- fi
- # MAIL
- if [ "$mail" != 'no' ]; then
- echo "-- MAIL --"
- msg="$msg\n-- MAIL --"
- # Unpack pam container
- tar xf $BACKUP/$backup -C $tmpdir ./pam
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack PAM contaner"
- echo "Can't unpack PAM contaner" | $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Get user id
- old_uid=$(cut -f 3 -d : $tmpdir/pam/passwd)
- new_uid=$(grep "^$user:" /etc/passwd | cut -f 3 -d :)
- # Create domain list
- domain_list=$(tar -tf $BACKUP/$backup | grep "^./mail" |\
- grep mail.conf | cut -f 3 -d '/')
- if [ ! -z "$mail" ]; then
- dom_include_list=$(mktemp)
- for domain_include in ${mail//,/ }; do
- echo "^$domain_include$" >> $dom_include_list
- done
- domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
- rm -f $dom_include_list
- fi
- for domain in $domain_list; do
- echo -e "$(date "+%F %T") $domain"
- msg="$msg\n$(date "+%F %T") $domain"
- # unpack domain container
- tar xf $BACKUP/$backup -C $tmpdir ./mail/$domain
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $domain mail contaner"
- echo "Can't can't unpack $domain mail contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Restore domain config
- domain_idn=$(idn -t --quiet -a "$domain")
- check_config=$(grep "DOMAIN='$domain'" $USER_DATA/mail.conf)
- if [ -z "$check_config" ]; then
- # Parse domain config
- eval $(cat $tmpdir/mail/$domain/vesta/mail.conf)
- # Check if domain new
- check_new=$(is_domain_new 'mail' $domain)
- if [ ! -z "$check_new" ]; then
- echo "Error: mail domain $domain belongs to another user"
- echo "Mail domain $domain belongs to another user" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- log_event "$E_EXISTS" "$EVENT"
- exit $E_EXISTS
- fi
- str="DOMAIN='$domain' ANTIVIRUS='$ANTIVIRUS' ANTISPAM='$ANTISPAM'"
- str="$str DKIM='$DKIM' ACCOUNTS='$ACCOUNTS' U_DISK='$U_DISK'"
- str="$str CATCHALL='$CATCHALL' SUSPENDED='no'"
- str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
- echo $str >> $USER_DATA/mail.conf
- fi
- # Restore 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
- # Restore email accounts
- cp -f $tmpdir/mail/$domain/vesta/$domain.conf $USER_DATA/mail/
- # Rebuild mail config
- rebuild_mail_domain_conf
- # Restore emails
- if [ -e "$tmpdir/mail/$domain/accounts.tar.gz" ]; then
- tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \
- -C $HOMEDIR/$user/mail/$domain_idn/
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $domain mail account tarball"
- echo "Can't unpack $domain mail account tarball" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # ReChown 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
- done
- echo
- msg="$msg\n"
- fi
- # DB
- if [ "$db" != 'no' ]; then
- echo "-- DB --"
- msg="$msg\n-- DB --"
- # Create domain list
- db_list=$(tar -tf $BACKUP/$backup | grep "^./db" |\
- grep db.conf | cut -f 3 -d '/')
- if [ ! -z "$db" ]; then
- db_include_list=$(mktemp)
- for db_include in ${db//,/ }; do
- echo "^$db_include$" >> $db_include_list
- done
- db_list=$(echo "$db_list" | egrep -f $db_include_list )
- rm -f $db_include_list
- fi
- for db in $db_list; do
- # unpack db container
- tar xf $BACKUP/$backup -C $tmpdir ./db/$db
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $db database contaner"
- echo "Can't unpack $db database contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Restore domain config
- check_config=$(grep "DB='$db'" $USER_DATA/db.conf)
- if [ -z "$check_config" ]; then
- # Parse database config
- eval $(cat $tmpdir/db/$db/vesta/db.conf)
- # Convert database & database user
- DB=$(echo "$DB" | cut -f 2,3,4,5,6,7 -d '_')
- DB="${user}_${DB}"
- DBUSER=$(echo "$DBUSER" | cut -f 2,3,4,5,6,7 -d '_')
- 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='$db'" $USER_DATA/db.conf)
- fi
- echo -e "$(date "+%F %T") $DB"
- msg="$msg\n$(date "+%F %T") $DB"
- # Unzip database dump
- gzip -d $tmpdir/db/$db/$db.*.sql.gz
- # Get database values
- get_database_values
- # Rebuild db
- case $TYPE in
- mysql) rebuild_mysql_database;
- import_mysql_database $tmpdir/db/$db/$db.$TYPE.sql ;;
- pgsql) rebuild_pgsql_database;
- import_pgsql_database $tmpdir/db/$db/$db.$TYPE.sql ;;
- esac
- done
- echo
- msg="$msg\n"
- fi
- # Cron
- if [ "$cron" != 'no' ]; then
- echo "-- CRON --"
- msg="$msg\n-- CRON --"
- # unpack cron container
- tar xf $BACKUP/$backup -C $tmpdir ./cron
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack cron contaner"
- echo "Can't unpack cron contaner" | $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- cron_record=$(wc -l $tmpdir/cron/cron.conf |cut -f 1 -d' ')
- if [ "$cron_record" -eq 1 ]; then
- echo -e "$(date "+%F %T") $cron_record record"
- msg="$msg\n$(date "+%F %T") $cron_record record"
- else
- echo -e "$(date "+%F %T") $cron_record records"
- msg="$msg\n$(date "+%F %T") $cron_record records"
- fi
- # Restore cron records
- cp $tmpdir/cron/cron.conf $USER_DATA/cron.conf
- # Rebuild cron
- sync_cron_jobs
- # Restart cron
- $BIN/v-restart-cron
- if [ $? -ne 0 ]; then
- exit E_RESTART
- fi
- echo
- msg="$msg\n"
- fi
- # Restore user directories
- if [ "$udir" != 'no' ]; then
- echo "-- USER DIR --"
- msg="$msg\n-- USER DIR --"
- # unpack user dir container
- if [ ! -z "$(tar -tf $BACKUP/$backup |grep './user_dir')" ]; then
- # Unpack pam container
- tar xf $BACKUP/$backup -C $tmpdir ./pam
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack PAM contaner"
- echo "Can't unpack PAM contaner" | $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # Get user id
- old_uid=$(cut -f 3 -d : $tmpdir/pam/passwd)
- new_uid=$(grep "^$user:" /etc/passwd | cut -f 3 -d :)
- # Create user dir list
- udir_list=$(tar -tf $BACKUP/$backup | grep "^./user_dir" |\
- grep tar.gz | cut -f 3 -d '/' | sed "s/.tar.gz//")
- if [ ! -z "$udir" ]; then
- udir_include_list=$(mktemp)
- for udir_include in ${udir//,/ }; do
- echo "^$udir_include$" >> $udir_include_list
- done
- udir_list=$(echo "$udir_list" | egrep -f $udir_include_list )
- rm -f $udir_include_list
- fi
- for user_dir in $udir_list; do
- echo -e "$(date "+%F %T") $user_dir"
- msg="$msg\n$(date "+%F %T") $user_dir"
- # unpack user_dir container
- tar xf $BACKUP/$backup -C $tmpdir ./user_dir/$user_dir.tar.gz
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $user_dir user dir contaner"
- echo "Can't unpack $user_dir user dir contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- tar xzf $tmpdir/user_dir/$user_dir.tar.gz -C $HOMEDIR/$user
- if [ "$?" -ne 0 ]; then
- echo "Error: can't unpack $user_dir user dir contaner"
- echo "Can't unpack $user_dir user dir contaner" |\
- $send_mail -s "$subj" $email
- rm -rf $tmpdir
- exit $E_PARSING
- fi
- # ReChown 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
- echo
- msg="$msg\n"
- fi
- # Remove temporary data
- rm -rf $tmpdir
- # Clean restore queue
- sed -i "/v-restore-user $user /d" $VESTA/data/queue/backup.pipe
- # Send notification
- if [ "$notify" != 'no' ]; then
- subj="$user → restore has been completed"
- email=$(get_user_value '$CONTACT')
- echo -e "$msg" | $send_mail -s "$subj" $email
- fi
- #----------------------------------------------------------#
- # 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" "$EVENT"
- exit
|