Skip to content

Commit 63d7bb7

Browse files
author
Kristan Kenney
committed
Merge branch 'mail-stack' into mail-file-fixes
2 parents e13dc30 + 825c0a9 commit 63d7bb7

34 files changed

+952
-66
lines changed

bin/v-add-cron-hestia-autoupdate

100644100755
File mode changed.

bin/v-add-letsencrypt-domain

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: check letsencrypt domain
3-
# options: USER DOMAIN [ALIASES]
3+
# options: USER DOMAIN [ALIASES] [MAIL]
44
#
55
# The function check and validates domain with Let's Encrypt
66

@@ -13,6 +13,7 @@
1313
user=$1
1414
domain=$2
1515
aliases=$3
16+
mail=$3
1617

1718
# LE API
1819
LE_API='https://acme-v02.api.letsencrypt.org'
@@ -54,26 +55,41 @@ query_le_v2() {
5455
# Verifications #
5556
#----------------------------------------------------------#
5657

57-
check_args '2' "$#" 'USER DOMAIN [ALIASES]'
58+
check_args '2' "$#" 'USER DOMAIN [ALIASES] [MAIL]'
5859
is_format_valid 'user' 'domain' 'aliases'
59-
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
6060
is_object_valid 'user' 'USER' "$user"
6161
is_object_unsuspended 'user' 'USER' "$user"
62-
is_object_valid 'web' 'DOMAIN' "$domain"
63-
is_object_unsuspended 'web' 'DOMAIN' "$domain"
64-
get_domain_values 'web'
65-
for alias in $(echo "$aliases" |tr ',' '\n' |sort -u); do
66-
check_alias="$(echo $ALIAS |tr ',' '\n' |grep ^$alias$)"
67-
if [ -z "$check_alias" ]; then
68-
check_result $E_NOTEXIST "domain alias $alias doesn't exist"
69-
fi
70-
done
62+
if [ -z "$mail" ]; then
63+
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
64+
is_object_valid 'web' 'DOMAIN' "$domain"
65+
is_object_unsuspended 'web' 'DOMAIN' "$domain"
66+
get_domain_values 'web'
67+
for alias in $(echo "$aliases" |tr ',' '\n' |sort -u); do
68+
check_alias="$(echo $ALIAS |tr ',' '\n' |grep ^$alias$)"
69+
if [ -z "$check_alias" ]; then
70+
check_result $E_NOTEXIST "domain alias $alias doesn't exist"
71+
fi
72+
done
73+
else
74+
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
75+
is_object_valid 'mail' 'DOMAIN' "$domain"
76+
is_object_unsuspended 'mail' 'DOMAIN' "$domain"
77+
is_object_value_empty 'mail' 'DOMAIN' "$domain" '$SSL'
78+
fi
79+
7180

7281

7382
#----------------------------------------------------------#
7483
# Action #
7584
#----------------------------------------------------------#
7685

86+
# Rework domain and alieses for mail.
87+
if [ ! -z "$mail" ]; then
88+
original_domain=$domain
89+
aliases="webmail.$domain,autodiscover.$domain"
90+
domain="mail.$domain"
91+
fi
92+
7793
# Registering LetsEncrypt user account
7894
$BIN/v-add-letsencrypt-user $user
7995
if [ "$?" -ne 0 ]; then
@@ -237,9 +253,15 @@ if [[ $(head -n 1 $ssl_dir/$domain.ca) = "-----END CERTIFICATE-----" ]]; then
237253
fi
238254

239255
# Adding SSL
240-
ssl_home=$(search_objects 'web' 'LETSENCRYPT' 'yes' 'SSL_HOME')
241-
$BIN/v-delete-web-domain-ssl $user $domain > /dev/null 2>&1
242-
$BIN/v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
256+
if [ -z "$mail" ]; then
257+
ssl_home=$(search_objects 'web' 'LETSENCRYPT' 'yes' 'SSL_HOME')
258+
$BIN/v-delete-web-domain-ssl $user $domain > /dev/null 2>&1
259+
$BIN/v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
260+
else
261+
$BIN/v-delete-mail-domain-ssl $user $domain >/dev/null 2>&1
262+
$BIN/v-add-mail-domain-ssl $user $domain $ssl_dir
263+
fi
264+
243265
if [ "$?" -ne '0' ]; then
244266
touch $HESTIA/data/queue/letsencrypt.pipe
245267
sed -i "/ $domain /d" $HESTIA/data/queue/letsencrypt.pipe
@@ -256,11 +278,17 @@ if [ -z "$(grep v-update-lets $HESTIA/data/users/admin/cron.conf)" ]; then
256278
fi
257279

258280
# Updating letsencrypt key
259-
if [ -z "$LETSENCRYPT" ]; then
260-
add_object_key "web" 'DOMAIN' "$domain" 'LETSENCRYPT' 'FTP_USER'
281+
if [ -z "$mail" ]; then
282+
if [ -z "$LETSENCRYPT" ]; then
283+
add_object_key "web" 'DOMAIN' "$domain" 'LETSENCRYPT' 'FTP_USER'
284+
fi
285+
update_object_value 'web' 'DOMAIN' "$domain" '$LETSENCRYPT' 'yes'
286+
else
287+
if [ -z "$LETSENCRYPT" ]; then
288+
add_object_key "mail" 'DOMAIN' "$original_domain" 'LETSENCRYPT'
289+
fi
290+
update_object_value 'mail' 'DOMAIN' "$original_domain" '$LETSENCRYPT' 'yes'
261291
fi
262-
update_object_value 'web' 'DOMAIN' "$domain" '$LETSENCRYPT' 'yes'
263-
264292

265293
#----------------------------------------------------------#
266294
# Hestia #

bin/v-add-mail-domain

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dkim_size=${6-1024}
2121
source $HESTIA/func/main.sh
2222
source $HESTIA/func/domain.sh
2323
source $HESTIA/conf/hestia.conf
24+
source $HESTIA/func/ip.sh
2425

2526
# Define mail user
2627
if [ "$MAIL_SYSTEM" = 'exim4' ]; then
@@ -32,7 +33,7 @@ fi
3233
# Additional argument formatting
3334
format_domain
3435
format_domain_idn
35-
36+
get_user_ip
3637

3738
#----------------------------------------------------------#
3839
# Verifications #
@@ -53,13 +54,11 @@ is_dir_symlink $HOMEDIR/$user/mail
5354
#----------------------------------------------------------#
5455

5556
# Generating timestamp
56-
time_n_date=$(date +'%T %F')
57-
time=$(echo "$time_n_date" |cut -f 1 -d \ )
58-
date=$(echo "$time_n_date" |cut -f 2 -d \ )
57+
new_timestamp
5958

6059
# Adding domain to mail.conf
6160
s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' DKIM='$dkim'"
62-
s="$s CATCHALL='' ACCOUNTS='0' U_DISK='0' SUSPENDED='no' TIME='$time'"
61+
s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' WEBMAIL='yes' U_DISK='0' SUSPENDED='no' TIME='$time'"
6362
s="$s DATE='$date'"
6463
echo $s >> $USER_DATA/mail.conf
6564
touch $USER_DATA/mail/$domain.conf
@@ -128,15 +127,15 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$dkim" = 'yes' ]; then
128127
fi
129128
fi
130129

131-
132130
#----------------------------------------------------------#
133131
# Hestia #
134132
#----------------------------------------------------------#
135133

136134
# Increasing domain value
137135
increase_user_value "$user" '$U_MAIL_DOMAINS'
136+
138137
if [ "$dkim" = 'yes' ]; then
139-
increase_user_value "$user" '$U_MAIL_DKMI'
138+
increase_user_value "$user" '$U_MAIL_DKIM'
140139
fi
141140

142141
# Logging

bin/v-add-mail-domain-ssl

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/bash
2+
# info: add mail SSL for $domain
3+
# options: USER DOMAIN SSL_DIR [RESTART]
4+
#
5+
# The function turns on SSL support for a mail domain. Parameter ssl_dir
6+
# is a path to a directory where 2 or 3 ssl files can be found. Certificate file
7+
# mail.domain.tld.crt and its key mail.domain.tld.key are mandatory. Certificate
8+
# authority mail.domain.tld.ca file is optional.
9+
10+
#----------------------------------------------------------#
11+
# Variable&Function #
12+
#----------------------------------------------------------#
13+
14+
# Argument definition
15+
user=$1
16+
domain=$2
17+
ssl_dir=$3
18+
restart="$3"
19+
20+
# Additional argument formatting
21+
if [[ "$domain" =~ [[:upper:]] ]]; then
22+
domain=$(echo "$domain" |tr '[:upper:]' '[:lower:]')
23+
fi
24+
if [[ "$domain" =~ ^www\..* ]]; then
25+
domain=$(echo "$domain" |sed -e "s/^www.//")
26+
fi
27+
if [[ "$domain" =~ .*\.$ ]]; then
28+
domain=$(echo "$domain" |sed -e "s/\.$//")
29+
fi
30+
31+
domain=$(idn -t --quiet -u "$domain" )
32+
domain_idn=$(idn -t --quiet -a "$domain")
33+
34+
# Includes
35+
source $HESTIA/func/main.sh
36+
source $HESTIA/func/domain.sh
37+
source $HESTIA/func/ip.sh
38+
source $HESTIA/conf/hestia.conf
39+
40+
# Additional argument formatting
41+
format_domain
42+
format_domain_idn
43+
get_user_ip
44+
45+
#----------------------------------------------------------#
46+
# Verifications #
47+
#----------------------------------------------------------#
48+
49+
check_args '3' "$#" 'USER DOMAIN SSL_DIR [RESTART]'
50+
is_format_valid 'user' 'domain' 'ssl_dir'
51+
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
52+
is_object_valid 'user' 'USER' "$user"
53+
is_object_unsuspended 'user' 'USER' "$user"
54+
is_object_valid 'mail' 'DOMAIN' "$domain"
55+
is_object_unsuspended 'mail' 'DOMAIN' "$domain"
56+
is_object_value_empty 'mail' 'DOMAIN' "$domain" '$SSL'
57+
is_object_valid 'web' 'DOMAIN' "$domain"
58+
is_object_unsuspended 'web' 'DOMAIN' "$domain"
59+
is_web_domain_cert_valid
60+
61+
#----------------------------------------------------------#
62+
# Action #
63+
#----------------------------------------------------------#
64+
65+
# Call routine to add SSL configuration to mail domain
66+
add_mail_ssl_config
67+
68+
# Increase value for domain
69+
increase_user_value "$user" '$U_MAIL_SSL'
70+
71+
# Set SSL as enabled in configuration
72+
update_object_value 'mail' 'DOMAIN' "$domain" '$SSL' "yes"
73+
74+
# Refresh webmail configuration
75+
if [ ! -z "$WEB_SYSTEM" ]; then
76+
add_ssl_webmail_config
77+
78+
# Restart web services for webmail changes to take effect
79+
$BIN/v-restart-web $restart
80+
$BIN/v-restart-proxy $restart
81+
fi
82+
83+
#----------------------------------------------------------#
84+
# Hestia #
85+
#----------------------------------------------------------#
86+
87+
# Restarting mail server
88+
$BIN/v-restart-mail $restart
89+
$BIN/v-restart-service $IMAP_SYSTEM $restart
90+
91+
check_result $? "Mail restart failed" >/dev/null
92+
93+
# Logging
94+
log_history "enabled mail ssl support for $domain"
95+
log_event "$OK" "$ARGUMENTS"
96+
97+
exit

bin/v-add-user

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ U_DNS_RECORDS='0'
179179
U_MAIL_DOMAINS='0'
180180
U_MAIL_DKIM='0'
181181
U_MAIL_ACCOUNTS='0'
182+
U_MAIL_SSL='0'
182183
U_DATABASES='0'
183184
U_CRON_JOBS='0'
184185
U_BACKUPS='0'

bin/v-add-web-domain-ssl-force

100644100755
File mode changed.

bin/v-change-mail-domain-sslcert

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
# info: change domain ssl certificate
3+
# options: USER DOMAIN SSL_DIR [RESTART]
4+
#
5+
# The function changes SSL domain certificate and the key. If ca file present
6+
# it will be replaced as well.
7+
8+
9+
#----------------------------------------------------------#
10+
# Variable&Function #
11+
#----------------------------------------------------------#
12+
13+
# Argument definition
14+
user=$1
15+
domain=$2
16+
domain_idn=$2
17+
restart=$3
18+
19+
# Includes
20+
source $HESTIA/func/main.sh
21+
source $HESTIA/func/domain.sh
22+
source $HESTIA/conf/hestia.conf
23+
24+
# Additional argument formatting
25+
format_domain
26+
format_domain_idn
27+
28+
29+
#----------------------------------------------------------#
30+
# Verifications #
31+
#----------------------------------------------------------#
32+
33+
check_args '3' "$#" 'USER DOMAIN SSL_DIR [RESTART]'
34+
is_format_valid 'user' 'domain' 'ssl_dir'
35+
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
36+
is_object_valid 'user' 'USER' "$user"
37+
is_object_unsuspended 'user' 'USER' "$user"
38+
is_object_valid 'mail' 'DOMAIN' "$domain_idn"
39+
is_object_unsuspended 'mail' 'DOMAIN' "$domain_idn"
40+
is_object_value_empty 'mail' 'DOMAIN' "$domain_idn" '$SSL'
41+
is_web_domain_cert_valid
42+
43+
44+
#----------------------------------------------------------#
45+
# Action #
46+
#----------------------------------------------------------#
47+
48+
# Remove old configuration
49+
del_mail_ssl_config
50+
51+
# Create new configuration
52+
add_mail_ssl_config
53+
54+
#----------------------------------------------------------#
55+
# Hestia #
56+
#----------------------------------------------------------#
57+
58+
# Restarting mail server
59+
$BIN/v-restart-mail $restart
60+
service dovecot restart
61+
service exim4 restart
62+
check_result $? "Mail restart failed" >/dev/null
63+
64+
# Logging
65+
log_history "changed ssl certificate for $domain"
66+
log_event "$OK" "$ARGUMENTS"
67+
68+
exit

bin/v-change-sys-pma

100644100755
File mode changed.

bin/v-change-sys-port

100644100755
File mode changed.

bin/v-change-sys-webmail

100644100755
File mode changed.

0 commit comments

Comments
 (0)