Skip to content

Commit 60f812d

Browse files
committed
idn fix for mail domains
1 parent 852f631 commit 60f812d

File tree

3 files changed

+170
-30
lines changed

3 files changed

+170
-30
lines changed

bin/v-add-mail-domain

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ touch $HOMEDIR/$user/conf/mail/$domain/passwd
5151
chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain
5252
chmod 770 $HOMEDIR/$user/conf/mail/$domain
5353
chmod 660 $HOMEDIR/$user/conf/mail/$domain/*
54-
mkdir $HOMEDIR/$user/mail/$domain
55-
chown $user:mail $HOMEDIR/$user/mail/$domain
56-
chmod 770 $HOMEDIR/$user/mail/$domain
54+
mkdir $HOMEDIR/$user/mail/$domain_idn
55+
chown $user:mail $HOMEDIR/$user/mail/$domain_idn
56+
chmod 770 $HOMEDIR/$user/mail/$domain_idn
5757

5858
# Adding symlink
59-
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/
59+
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/$domain_idn
6060

6161
# Adding antispam protection
6262
if [ "$antispam" = 'yes' ]; then

bin/v-delete-mail-domain

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# Argument defenition
1414
user=$1
1515
domain=$(idn -t --quiet -u "$2" )
16+
domain_idn=$(idn -t --quiet -a "$domain")
1617

1718
# Includes
1819
source $VESTA/conf/vesta.conf
@@ -41,9 +42,9 @@ is_object_unsuspended 'mail' 'DOMAIN' "$domain"
4142
get_domain_values 'mail'
4243
accounts=$(wc -l $USER_DATA/mail/$domain.conf|cut -f 1 -d ' ')
4344

44-
rm -f /etc/exim/domains/$domain
45+
rm -f /etc/exim/domains/$domain_idn
4546
rm -rf $HOMEDIR/$user/conf/mail/$domain
46-
rm -rf $HOMEDIR/$user/mail/$domain
47+
rm -rf $HOMEDIR/$user/mail/$domain_idn
4748

4849

4950
#----------------------------------------------------------#

func/rebuild.sh

Lines changed: 163 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,136 @@
1+
# User account rebuild
2+
rebuild_user_conf() {
3+
4+
# Get user variables
5+
source $USER_DATA/user.conf
6+
7+
# Creating user data files
8+
chmod 770 $USER_DATA
9+
chmod 660 $USER_DATA/user.conf
10+
touch $USER_DATA/backup.conf
11+
chmod 660 $USER_DATA/backup.conf
12+
touch $USER_DATA/history.log
13+
chmod 660 $USER_DATA/history.log
14+
touch $USER_DATA/stats.log
15+
chmod 660 $USER_DATA/stats.log
16+
17+
# Rebuild user
18+
shell=$(chsh --list-shells | grep -w "$SHELL" | head -n1)
19+
/usr/sbin/adduser "$user" -s "$shell" -c "$CONTACT" \
20+
-m -d "$HOMEDIR/$user" > /dev/null 2>&1
21+
22+
# Update user shell
23+
shell_path=$(/usr/bin/chsh --list-shells | grep -w "$SHELL" |head -n1)
24+
/usr/bin/chsh -s "$shell_path" "$user" &>/dev/null
25+
26+
# Update password
27+
shadow=$(grep ^$user: /etc/shadow)
28+
shdw3=$(echo "$shadow" | cut -f3 -d :)
29+
shdw4=$(echo "$shadow" | cut -f4 -d :)
30+
shdw5=$(echo "$shadow" | cut -f5 -d :)
31+
shdw6=$(echo "$shadow" | cut -f6 -d :)
32+
shdw7=$(echo "$shadow" | cut -f7 -d :)
33+
shdw8=$(echo "$shadow" | cut -f8 -d :)
34+
shdw9=$(echo "$shadow" | cut -f9 -d :)
35+
shadow_str="$user:$MD5:$shdw3:$shdw4:$shdw5:$shdw6"
36+
shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9"
37+
38+
chmod u+w /etc/shadow
39+
sed -i "/^$user:*/d" /etc/shadow
40+
echo "$shadow_str" >> /etc/shadow
41+
chmod u-w /etc/shadow
42+
43+
# Building directory tree
44+
mkdir -p $HOMEDIR/$user/conf
45+
chmod a+x $HOMEDIR/$user
46+
chmod a+x $HOMEDIR/$user/conf
47+
chown $user:$user $HOMEDIR/$user
48+
chown root:root $HOMEDIR/$user/conf
49+
50+
# Update disk pipe
51+
sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe
52+
echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
53+
54+
# WEB
55+
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
56+
mkdir -p $USER_DATA/ssl
57+
chmod 770 $USER_DATA/ssl
58+
touch $USER_DATA/web.conf
59+
chmod 660 $USER_DATA/web.conf
60+
if [ "$(grep -w $user $VESTA/data/queue/traffic.pipe)" ]; then
61+
echo "$BIN/v-update-web-domains-traff $user" \
62+
>> $VESTA/data/queue/traffic.pipe
63+
fi
64+
echo "$BIN/v-update-web-domains-disk $user" \
65+
>> $VESTA/data/queue/disk.pipe
66+
67+
mkdir -p $HOMEDIR/$user/conf/web
68+
mkdir -p $HOMEDIR/$user/web
69+
mkdir -p $HOMEDIR/$user/tmp
70+
chmod 751 $HOMEDIR/$user/conf/web
71+
chmod 751 $HOMEDIR/$user/web
72+
chmod 771 $HOMEDIR/$user/tmp
73+
chown $user:$user $HOMEDIR/$user/web
74+
if [ -z "$create_user" ]; then
75+
$BIN/v-rebuild-web-domains $user $restart
76+
fi
77+
fi
78+
79+
# DNS
80+
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
81+
mkdir -p $USER_DATA/dns
82+
chmod 770 $USER_DATA/dns
83+
touch $USER_DATA/dns.conf
84+
chmod 660 $USER_DATA/dns.conf
85+
86+
mkdir -p $HOMEDIR/$user/conf/dns
87+
chmod 751 $HOMEDIR/$user/conf/dns
88+
if [ -z "$create_user" ]; then
89+
$BIN/v-rebuild-dns-domains $user $restart
90+
fi
91+
fi
92+
93+
if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
94+
mkdir -p $USER_DATA/mail
95+
chmod 770 $USER_DATA/mail
96+
touch $USER_DATA/mail.conf
97+
chmod 660 $USER_DATA/mail.conf
98+
echo "$BIN/v-update-mail-domains-disk $user" \
99+
>> $VESTA/data/queue/disk.pipe
100+
101+
mkdir -p $HOMEDIR/$user/conf/mail
102+
mkdir -p $HOMEDIR/$user/mail
103+
chmod 751 $HOMEDIR/$user/mail
104+
chmod 751 $HOMEDIR/$user/conf/mail
105+
if [ -z "$create_user" ]; then
106+
$BIN/v-rebuild-mail-domains $user
107+
fi
108+
fi
109+
110+
111+
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
112+
touch $USER_DATA/db.conf
113+
chmod 660 $USER_DATA/db.conf
114+
echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
115+
116+
if [ -z "$create_user" ]; then
117+
$BIN/v-rebuild-databases $user
118+
fi
119+
fi
120+
121+
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
122+
touch $USER_DATA/cron.conf
123+
chmod 660 $USER_DATA/cron.conf
124+
125+
if [ -z "$create_user" ]; then
126+
$BIN/v-rebuild-cron-jobs $user $restart
127+
fi
128+
fi
129+
130+
# Set immutable flag
131+
chattr +i $HOMEDIR/$user/conf
132+
}
133+
1134
# WEB domain rebuild
2135
rebuild_web_domain_conf() {
3136

@@ -174,21 +307,22 @@ rebuild_web_domain_conf() {
174307
/usr/sbin/adduser -o -u $(id -u $user) -g $user -s /sbin/nologin \
175308
-M -d "$HOMEDIR/$user/web/$domain" $FTP_USER > /dev/null 2>&1
176309

177-
shadow='/etc/shadow'
178-
shdw=$(grep "^$FTP_USER:" $shadow)
179-
shdw3=$(echo "$shdw" | cut -f3 -d :)
180-
shdw4=$(echo "$shdw" | cut -f4 -d :)
181-
shdw5=$(echo "$shdw" | cut -f5 -d :)
182-
shdw6=$(echo "$shdw" | cut -f6 -d :)
183-
shdw7=$(echo "$shdw" | cut -f7 -d :)
184-
shdw8=$(echo "$shdw" | cut -f8 -d :)
185-
shdw9=$(echo "$shdw" | cut -f9 -d :)
186-
chmod u+w $shadow
187-
sed -i "/^$FTP_USER:*/d" $shadow
188-
shdw_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6"
189-
shdw_str="$shdw_str:$shdw7:$shdw8:$shdw9"
190-
echo "$shdw_str" >> $shadow
191-
chmod u-w $shadow
310+
# Update password
311+
shadow=$(grep "^$FTP_USER:" /etc/shadow)
312+
shdw3=$(echo "$shadow" | cut -f3 -d :)
313+
shdw4=$(echo "$shadow" | cut -f4 -d :)
314+
shdw5=$(echo "$shadow" | cut -f5 -d :)
315+
shdw6=$(echo "$shadow" | cut -f6 -d :)
316+
shdw7=$(echo "$shadow" | cut -f7 -d :)
317+
shdw8=$(echo "$shadow" | cut -f8 -d :)
318+
shdw9=$(echo "$shadow" | cut -f9 -d :)
319+
shadow_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6"
320+
shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9"
321+
322+
chmod u+w /etc/shadow
323+
sed -i "/^$FTP_USER:*/d" /etc/shadow
324+
echo "$shadow_str" >> /etc/shadow
325+
chmod u-w /etc/shadow
192326
fi
193327
fi
194328
}
@@ -248,24 +382,26 @@ rebuild_dns_domain_conf() {
248382
# MAIL domain rebuild
249383
rebuild_mail_domain_conf() {
250384

385+
domain_idn=$(idn -t --quiet -a "$domain")
386+
251387
# Get domain values
252388
get_domain_values 'mail'
253389

254390
# Rebuilding config structure
255-
rm -f /etc/exim/domains/$domain
391+
rm -f /etc/exim/domains/$domain_idn
256392
mkdir -p $HOMEDIR/$user/conf/mail/$domain
257-
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/
393+
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/$domain_idn
258394
rm -f $HOMEDIR/$user/conf/mail/$domain/aliases
259395
rm -f $HOMEDIR/$user/conf/mail/$domain/protection
260396
rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
261397
touch $HOMEDIR/$user/conf/mail/$domain/aliases
262398
touch $HOMEDIR/$user/conf/mail/$domain/protection
263399
touch $HOMEDIR/$user/conf/mail/$domain/passwd
264400
chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain
265-
chown -R dovecot:mail /etc/exim/domains/$domain
401+
chown -R dovecot:mail /etc/exim/domains/$domain_idn
266402
chmod 770 $HOMEDIR/$user/conf/mail/$domain
267403
chmod 660 $HOMEDIR/$user/conf/mail/$domain/*
268-
chmod 770 /etc/exim/domains/$domain
404+
chmod 770 /etc/exim/domains/$domain_idn
269405

270406
# Adding antispam protection
271407
if [ "$ANTISPAM" = 'yes' ]; then
@@ -314,14 +450,14 @@ rebuild_mail_domain_conf() {
314450
# Removing symbolic link
315451
if [ "$SUSPENDED" = 'yes' ]; then
316452
SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
317-
rm -f /etc/exim/domains/$domain
453+
rm -f /etc/exim/domains/$domain_idn
318454
fi
319455

320-
if [ ! -e $HOMEDIR/$user/mail/$domain ]; then
321-
mkdir $HOMEDIR/$user/mail/$domain
456+
if [ ! -e $HOMEDIR/$user/mail/$domain_idn ]; then
457+
mkdir $HOMEDIR/$user/mail/$domain_idn
322458
fi
323-
chown $user:mail $HOMEDIR/$user/mail/$domain
324-
chmod 770 $HOMEDIR/$user/mail/$domain
459+
chown $user:mail $HOMEDIR/$user/mail/$domain_idn
460+
chmod 770 $HOMEDIR/$user/mail/$domain_idn
325461

326462
dom_aliases=$HOMEDIR/$user/conf/mail/$domain/aliases
327463
if [ ! -z "$CATCHALL" ]; then
@@ -402,6 +538,9 @@ rebuild_mysql_database() {
402538

403539
query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
404540
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
541+
542+
query="FLUSH PRIVILEGES;"
543+
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
405544
}
406545

407546
# Rebuild PostgreSQL

0 commit comments

Comments
 (0)