|
1 | 1 | #!/bin/bash |
2 | | - |
3 | | -# v-restore-user-cpanel |
4 | | -# Restores an exported backup from cPanel |
5 | | - |
| 2 | +# info: Import Cpanel backup to a new user |
| 3 | +# options: BACKUP [MX] |
| 4 | +# |
| 5 | +# example: v-import-cpanel /backup/backup.tar.gz yes |
| 6 | +# |
6 | 7 | # Based on sk-import-cpanel-backup-to-vestacp |
7 | 8 | # Credits: Maks Usmanov (skamasle) and contributors: |
8 | 9 | # Thanks to https://github.com/Skamasle/sk-import-cpanel-backup-to-vestacp/graphs/contributors |
9 | 10 |
|
10 | 11 | # Known issue |
11 | 12 | # - Importing certificates fails at the moment. Due to format changes of CPanel side |
12 | | -# - It doesn't update DKIM or any MX records in DNS |
| 13 | +# - It doesn't update DKIM |
13 | 14 |
|
14 | 15 | # shellcheck source=/etc/hestiacp/hestia.conf |
15 | 16 | source /etc/hestiacp/hestia.conf |
@@ -44,6 +45,9 @@ hestia_package=default |
44 | 45 | if [ -f "$1" ]; then |
45 | 46 | cpanel_backup="$1" |
46 | 47 | fi |
| 48 | +if [ -n "$2" ]; then |
| 49 | + mx="$2" |
| 50 | +fi |
47 | 51 | if [ -z "$BACKUP_TEMP" ]; then |
48 | 52 | BACKUP_TEMP=$BACKUP |
49 | 53 | else |
@@ -83,8 +87,8 @@ cd $tmpdir/* |
83 | 87 | echo "Get prefix..." |
84 | 88 | user_prefix=$(cat meta/dbprefix) |
85 | 89 |
|
86 | | -sk_importer_in=$(pwd) |
87 | | -echo "Access tmp directory $sk_importer_in" |
| 90 | +main_dir=$(pwd) |
| 91 | +echo "Access tmp directory $main_dir" |
88 | 92 | dbprefix=$(cat meta/dbprefix) |
89 | 93 | if [ $dbprefix = 1 ]; then |
90 | 94 | echo "Error 255 - I dont like your prefix, I dont want do this job" |
@@ -225,25 +229,47 @@ for folder in *; do |
225 | 229 | if [ -d "$folder" ]; then |
226 | 230 | if [[ "$folder" != "cur" && "$folder" != "new" && "$folder" != "tmp" ]]; then |
227 | 231 | echo "Domain: $folder" |
228 | | - |
229 | | - for mail_account in $folder/*; do |
230 | | - if [ "$mail_account" != "$folder/*" ]; then |
231 | | - echo "Import mail account: $mail_account@#$folder" |
232 | | - # Doesn't really matter but we don't know the unhashed one |
233 | | - tmp_pass=$(generate_password) |
234 | | - $BIN/v-add-mail-account $new_user $folder $mail_account $tmp_pass |
235 | | - mv $folder/$mail_account /home/$new_user/mail/$folder/ |
236 | | - chown $new_user:mail /home/$new_user/mail/$folder/ |
237 | | - find /home/$new_user/mail/$folder -type f -name 'dovecot*' -delete |
238 | | - |
239 | | - pass=$(grep "^$mail_account:" ../etc/${folder}/shadow | awk -F ":" '{print $2}') |
240 | | - fi |
| 232 | + cd $folder |
| 233 | + for mail_account in *; do |
| 234 | + echo "Import mail account: $mail_account@#$folder" |
| 235 | + # Doesn't really matter but we don't know the unhashed one |
| 236 | + tmp_pass=$(generate_password) |
| 237 | + $BIN/v-add-mail-account $new_user $folder $mail_account $tmp_pass |
| 238 | + mv $mail_account /home/$new_user/mail/$folder/ |
| 239 | + chown $new_user:mail /home/$new_user/mail/$folder/ |
| 240 | + find /home/$new_user/mail/$folder -type f -name 'dovecot*' -delete |
| 241 | + pass=$(grep "^$mail_account:" ../../etc/${folder}/shadow | awk -F ":" '{print $2}') |
| 242 | + USER_DATA=$HESTIA/data/users/$new_user/ |
| 243 | + update_object_value "mail/$folder" 'ACCOUNT' "$mail_account" '$MD5' "$pass" |
241 | 244 | done |
| 245 | + cd .. |
| 246 | + $BIN/v-rebuild-mail-domain $new_user $folder |
242 | 247 | fi |
243 | 248 | fi |
244 | 249 | done |
245 | 250 | echo "All mail accounts restored" |
246 | 251 |
|
| 252 | +if [ "$mx" = 'yes' ]; then |
| 253 | + cd $main_dir/dnszones |
| 254 | + for domain in $($BIN/v-list-mail-domains $new_user plain | awk '{ print $1 }'); do |
| 255 | + echo "Replace MX record for $domain" |
| 256 | + mx_id=$(grep MX $HESTIA/data/users/${new_user}/dns/${domain}.conf | tr "'" " " | cut -d " " -f 2) |
| 257 | + $BIN/v-delete-dns-record $new_user $domain $mx_id |
| 258 | + grep MX ${domain}.db | awk '{for(sk=NF;sk>=1;sk--) printf "%s ", $sk;print ""}' | while read value pri ns rest; do |
| 259 | + if [ "$ns" = "MX" ]; then |
| 260 | + if [ "$value" == "$sk_mx" ] || [ "$value" == "$sk_mx." ]; then |
| 261 | + value=mail.$value |
| 262 | + fi |
| 263 | + $BIN/v-add-dns-record $new_user $domain @ MX $value $pri |
| 264 | + if [[ "$?" -ge "1" ]]; then |
| 265 | + $BIN/v-add-dns-record $new_user $domain @ MX mail.${domain} 0 |
| 266 | + fi |
| 267 | + echo "MX fixed in $sk_mx" |
| 268 | + fi |
| 269 | + done |
| 270 | + done |
| 271 | +fi |
| 272 | + |
247 | 273 | rm -rf "$tmpdir" |
248 | 274 |
|
249 | 275 | echo "##############################" |
|
0 commit comments