Skip to content

Commit 56d42f7

Browse files
authored
Fix import cpanel existing mx records (hestiacp#3238)
* Fix import mail accounts include mx restore In case Gmail is used @Skamasle See hestiacp@0374e17#commitcomment-98734290 * Update comment
1 parent 694bee1 commit 56d42f7

File tree

1 file changed

+46
-20
lines changed

1 file changed

+46
-20
lines changed

bin/v-import-cpanel

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#!/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+
#
67
# Based on sk-import-cpanel-backup-to-vestacp
78
# Credits: Maks Usmanov (skamasle) and contributors:
89
# Thanks to https://github.com/Skamasle/sk-import-cpanel-backup-to-vestacp/graphs/contributors
910

1011
# Known issue
1112
# - 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
1314

1415
# shellcheck source=/etc/hestiacp/hestia.conf
1516
source /etc/hestiacp/hestia.conf
@@ -44,6 +45,9 @@ hestia_package=default
4445
if [ -f "$1" ]; then
4546
cpanel_backup="$1"
4647
fi
48+
if [ -n "$2" ]; then
49+
mx="$2"
50+
fi
4751
if [ -z "$BACKUP_TEMP" ]; then
4852
BACKUP_TEMP=$BACKUP
4953
else
@@ -83,8 +87,8 @@ cd $tmpdir/*
8387
echo "Get prefix..."
8488
user_prefix=$(cat meta/dbprefix)
8589

86-
sk_importer_in=$(pwd)
87-
echo "Access tmp directory $sk_importer_in"
90+
main_dir=$(pwd)
91+
echo "Access tmp directory $main_dir"
8892
dbprefix=$(cat meta/dbprefix)
8993
if [ $dbprefix = 1 ]; then
9094
echo "Error 255 - I dont like your prefix, I dont want do this job"
@@ -225,25 +229,47 @@ for folder in *; do
225229
if [ -d "$folder" ]; then
226230
if [[ "$folder" != "cur" && "$folder" != "new" && "$folder" != "tmp" ]]; then
227231
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"
241244
done
245+
cd ..
246+
$BIN/v-rebuild-mail-domain $new_user $folder
242247
fi
243248
fi
244249
done
245250
echo "All mail accounts restored"
246251

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+
247273
rm -rf "$tmpdir"
248274

249275
echo "##############################"

0 commit comments

Comments
 (0)