Skip to content

Commit f8aedd1

Browse files
committed
Merge branch 'develop' of git.ispconfig.org:ispconfig/ispconfig3 into develop
2 parents 7a3d491 + 1107171 commit f8aedd1

File tree

220 files changed

+951
-404
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

220 files changed

+951
-404
lines changed

install/dist/lib/fedora.lib.php

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -57,58 +57,12 @@ function configure_postfix($options = '')
5757
$this->error("The postfix configuration directory '$config_dir' does not exist.");
5858
}
5959

60-
//* mysql-virtual_domains.cf
61-
$this->process_postfix_config('mysql-virtual_domains.cf');
62-
63-
//* mysql-virtual_forwardings.cf
64-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
65-
66-
//* mysql-virtual_alias_domains.cf
67-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
68-
69-
//* mysql-virtual_alias_maps.cf
70-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
71-
72-
//* mysql-virtual_mailboxes.cf
73-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
74-
75-
//* mysql-virtual_email2email.cf
76-
$this->process_postfix_config('mysql-virtual_email2email.cf');
77-
78-
//* mysql-virtual_transports.cf
79-
$this->process_postfix_config('mysql-virtual_transports.cf');
80-
81-
//* mysql-virtual_recipient.cf
82-
$this->process_postfix_config('mysql-virtual_recipient.cf');
83-
84-
//* mysql-virtual_sender.cf
85-
$this->process_postfix_config('mysql-virtual_sender.cf');
86-
87-
//* mysql-virtual_sender_login_maps.cf
88-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
89-
90-
//* mysql-virtual_client.cf
91-
$this->process_postfix_config('mysql-virtual_client.cf');
92-
93-
//* mysql-virtual_relaydomains.cf
94-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
95-
96-
//* mysql-virtual_relayrecipientmaps.cf
97-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
98-
99-
//* mysql-virtual_outgoing_bcc.cf
100-
$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
101-
102-
//* mysql-virtual_policy_greylist.cf
103-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
104-
105-
//* mysql-virtual_gids.cf.master
106-
$this->process_postfix_config('mysql-virtual_gids.cf');
107-
108-
//* mysql-virtual_uids.cf
109-
$this->process_postfix_config('mysql-virtual_uids.cf');
60+
//* Install virtual mappings
61+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
62+
$this->process_postfix_config( basename($filename, '.master') );
63+
}
11064

111-
//* mysql-virtual_alias_domains.cf
65+
//* mysql-verify_recipients.cf
11266
$this->process_postfix_config('mysql-verify_recipients.cf');
11367

11468
//* postfix-dkim

install/dist/lib/gentoo.lib.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ public function configure_postfix($options = '')
6363
$this->process_postfix_config( basename($filename, '.master') );
6464
}
6565

66+
//* mysql-verify_recipients.cf
67+
$this->process_postfix_config('mysql-verify_recipients.cf');
68+
6669
//* Changing mode and group of the new created config files.
6770
caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
6871
__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');

install/dist/lib/opensuse.lib.php

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -57,55 +57,12 @@ function configure_postfix($options = '')
5757
$this->error("The postfix configuration directory '$config_dir' does not exist.");
5858
}
5959

60-
//* mysql-virtual_domains.cf
61-
$this->process_postfix_config('mysql-virtual_domains.cf');
62-
63-
//* mysql-virtual_forwardings.cf
64-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
65-
66-
//* mysql-virtual_alias_domains.cf
67-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
68-
69-
//* mysql-virtual_alias_maps.cf
70-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
71-
72-
//* mysql-virtual_mailboxes.cf
73-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
74-
75-
//* mysql-virtual_email2email.cf
76-
$this->process_postfix_config('mysql-virtual_email2email.cf');
77-
78-
//* mysql-virtual_transports.cf
79-
$this->process_postfix_config('mysql-virtual_transports.cf');
80-
81-
//* mysql-virtual_recipient.cf
82-
$this->process_postfix_config('mysql-virtual_recipient.cf');
83-
84-
//* mysql-virtual_sender.cf
85-
$this->process_postfix_config('mysql-virtual_sender.cf');
86-
87-
//* mysql-virtual_sender_login_maps.cf
88-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
89-
90-
//* mysql-virtual_client.cf
91-
$this->process_postfix_config('mysql-virtual_client.cf');
92-
93-
//* mysql-virtual_relaydomains.cf
94-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
95-
96-
//* mysql-virtual_relayrecipientmaps.cf
97-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
98-
99-
//* mysql-virtual_policy_greylist.cf
100-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
101-
102-
//* mysql-virtual_gids.cf.master
103-
$this->process_postfix_config('mysql-virtual_gids.cf');
104-
105-
//* mysql-virtual_uids.cf
106-
$this->process_postfix_config('mysql-virtual_uids.cf');
60+
//* Install virtual mappings
61+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
62+
$this->process_postfix_config( basename($filename, '.master') );
63+
}
10764

108-
//* mysql-virtual_alias_domains.cf
65+
//* mysql-verify_recipients.cf
10966
$this->process_postfix_config('mysql-verify_recipients.cf');
11067

11168
//* postfix-dkim

install/lib/installer_base.lib.php

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ public function __construct() {
4242
global $conf; //TODO: maybe $conf should be passed to constructor
4343
}
4444

45+
private function install_acme() {
46+
$install_cmd = 'wget -O - https://get.acme.sh | sh';
47+
$ret = null;
48+
$val = 0;
49+
exec($install_cmd . ' 2>&1', $ret, $val);
50+
51+
return ($val == 0 ? true : false);
52+
}
53+
4554
//: TODO Implement the translation function and language files for the installer.
4655
public function lng($text) {
4756
return $text;
@@ -1044,58 +1053,12 @@ public function configure_postfix($options = '') {
10441053
$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
10451054
unset($out);
10461055

1047-
//* mysql-virtual_domains.cf
1048-
$this->process_postfix_config('mysql-virtual_domains.cf');
1049-
1050-
//* mysql-virtual_forwardings.cf
1051-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
1052-
1053-
//* mysql-virtual_alias_domains.cf
1054-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
1055-
1056-
//* mysql-virtual_alias_maps.cf
1057-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
1058-
1059-
//* mysql-virtual_mailboxes.cf
1060-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
1061-
1062-
//* mysql-virtual_email2email.cf
1063-
$this->process_postfix_config('mysql-virtual_email2email.cf');
1064-
1065-
//* mysql-virtual_transports.cf
1066-
$this->process_postfix_config('mysql-virtual_transports.cf');
1067-
1068-
//* mysql-virtual_recipient.cf
1069-
$this->process_postfix_config('mysql-virtual_recipient.cf');
1070-
1071-
//* mysql-virtual_sender.cf
1072-
$this->process_postfix_config('mysql-virtual_sender.cf');
1073-
1074-
//* mysql-virtual_sender_login_maps.cf
1075-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
1076-
1077-
//* mysql-virtual_client.cf
1078-
$this->process_postfix_config('mysql-virtual_client.cf');
1079-
1080-
//* mysql-virtual_relaydomains.cf
1081-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
1082-
1083-
//* mysql-virtual_relayrecipientmaps.cf
1084-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
1085-
1086-
//* mysql-virtual_outgoing_bcc.cf
1087-
$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
1088-
1089-
//* mysql-virtual_policy_greylist.cf
1090-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
1091-
1092-
//* mysql-virtual_gids.cf.master
1093-
$this->process_postfix_config('mysql-virtual_gids.cf');
1094-
1095-
//* mysql-virtual_uids.cf
1096-
$this->process_postfix_config('mysql-virtual_uids.cf');
1056+
//* Install virtual mappings
1057+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
1058+
$this->process_postfix_config( basename($filename, '.master') );
1059+
}
10971060

1098-
//* mysql-virtual_alias_domains.cf
1061+
//* mysql-verify_recipients.cf
10991062
$this->process_postfix_config('mysql-verify_recipients.cf');
11001063

11011064
// test if lmtp if available
@@ -1789,11 +1752,18 @@ public function configure_rspamd() {
17891752
$new_options[] = $value;
17901753
}
17911754
if ($mail_config['reject_sender_login_mismatch'] == 'y') {
1792-
array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch'));
1793-
1755+
// insert before permit_mynetworks
17941756
for ($i = 0; isset($new_options[$i]); $i++) {
17951757
if ($new_options[$i] == 'permit_mynetworks') {
1796-
array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch'));
1758+
array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch'));
1759+
break;
1760+
}
1761+
}
1762+
1763+
// insert before permit_sasl_authenticated
1764+
for ($i = 0; isset($new_options[$i]); $i++) {
1765+
if ($new_options[$i] == 'permit_sasl_authenticated') {
1766+
array_splice($new_options, $i, 0, array('reject_sender_login_mismatch'));
17971767
break;
17981768
}
17991769
}
@@ -2939,6 +2909,21 @@ public function make_ispconfig_ssl_cert() {
29392909
$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
29402910
$acme = reset($acme);
29412911

2912+
if((!$acme || !is_executable($acme)) && (!$le_client || !is_executable($le_client))) {
2913+
$success = $this->install_acme();
2914+
if(!$success) {
2915+
swriteln('Failed installing acme.sh. Will not be able to issue certificate during install.');
2916+
} else {
2917+
$acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh'));
2918+
$acme = reset($acme);
2919+
if($acme && is_executable($acme)) {
2920+
swriteln('Installed acme.sh and using it for certificate creation during install.');
2921+
} else {
2922+
swriteln('Failed installing acme.sh. Will not be able to issue certificate during install.');
2923+
}
2924+
}
2925+
}
2926+
29422927
$restore_conf_symlink = false;
29432928

29442929
// we only need this for apache, so use fixed conf index
@@ -2969,15 +2954,24 @@ public function make_ispconfig_ssl_cert() {
29692954
$issued_successfully = false;
29702955

29712956
// Backup existing ispserver ssl files
2972-
if(file_exists($ssl_crt_file) || is_link($ssl_crt_file))
2973-
rename($ssl_crt_file, $ssl_crt_file.'-temporary.bak');
2974-
if(file_exists($ssl_key_file) || is_link($ssl_key_file))
2975-
rename($ssl_key_file, $ssl_key_file.'-temporary.bak');
2976-
if(file_exists($ssl_pem_file) || is_link($ssl_pem_file))
2977-
rename($ssl_pem_file, $ssl_pem_file.'-temporary.bak');
2957+
if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) {
2958+
rename($ssl_crt_file, $ssl_crt_file . '-temporary.bak');
2959+
}
2960+
if(file_exists($ssl_key_file) || is_link($ssl_key_file)) {
2961+
rename($ssl_key_file, $ssl_key_file . '-temporary.bak');
2962+
}
2963+
if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) {
2964+
rename($ssl_pem_file, $ssl_pem_file . '-temporary.bak');
2965+
}
29782966

29792967
// Attempt to use Neilpang acme.sh first, as it is now the preferred LE client
29802968
if (is_executable($acme)) {
2969+
$acme_cert_dir = dirname($acme) . '/' . $hostname;
2970+
2971+
swriteln('acme.sh is installed, overriding certificate path to use ' . $acme_cert_dir);
2972+
2973+
# acme.sh does not set umask, resulting in incorrect permissions (ispconfig issue #6015)
2974+
$old_umask = umask(0022);
29812975

29822976
$out = null;
29832977
$ret = null;
@@ -3000,6 +2994,7 @@ public function make_ispconfig_ssl_cert() {
30002994
$acme_chain = "--fullchain-file " . escapeshellarg($ssl_crt_file);
30012995
exec("$acme --install-cert -d " . escapeshellarg($hostname) . " $acme_key $acme_chain");
30022996
$issued_successfully = true;
2997+
umask($old_umask);
30032998

30042999
// Make temporary backup of self-signed certs permanent
30053000
if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak'))
@@ -3012,6 +3007,8 @@ public function make_ispconfig_ssl_cert() {
30123007
} else {
30133008
swriteln('Issuing certificate via acme.sh failed. Please check that your hostname can be verified by letsencrypt');
30143009

3010+
umask($old_umask);
3011+
30153012
// Restore temporary backup of self-signed certs
30163013
if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak'))
30173014
rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file);
@@ -3075,7 +3072,7 @@ public function make_ispconfig_ssl_cert() {
30753072
rename($ssl_key_file.'-temporary.bak', $ssl_key_file);
30763073
if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak'))
30773074
rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file);
3078-
3075+
30793076
}
30803077
} else {
30813078
swriteln('Did not find any valid acme client (acme.sh or certbot)');
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1-
ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT '';
1+
ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT '';
2+
3+
ALTER TABLE `client` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`;
4+
ALTER TABLE `client_template` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`;
5+
6+
ALTER TABLE mail_access DROP CONSTRAINT `server_id`;
7+
SET SESSION old_alter_table=1;
8+
ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`);
9+
SET SESSION old_alter_table=0;
10+
11+
ALTER TABLE mail_domain ADD COLUMN `relay_host` varchar(255) NOT NULL default '' AFTER `dkim_public`,
12+
ADD COLUMN `relay_user` varchar(255) NOT NULL default '' AFTER `relay_host`,
13+
ADD COLUMN `relay_pass` varchar(255) NOT NULL default '' AFTER `relay_user`;

install/sql/ispconfig3.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ CREATE TABLE `client` (
178178
`limit_mailforward` int(11) NOT NULL DEFAULT '-1',
179179
`limit_mailcatchall` int(11) NOT NULL DEFAULT '-1',
180180
`limit_mailrouting` int(11) NOT NULL DEFAULT '0',
181+
`limit_mail_wblist` int(11) NOT NULL DEFAULT '0',
181182
`limit_mailfilter` int(11) NOT NULL DEFAULT '-1',
182183
`limit_fetchmail` int(11) NOT NULL DEFAULT '-1',
183184
`limit_mailquota` int(11) NOT NULL DEFAULT '-1',
@@ -309,6 +310,7 @@ CREATE TABLE `client_template` (
309310
`limit_mailforward` int(11) NOT NULL default '-1',
310311
`limit_mailcatchall` int(11) NOT NULL default '-1',
311312
`limit_mailrouting` int(11) NOT NULL default '0',
313+
`limit_mail_wblist` int(11) NOT NULL default '0',
312314
`limit_mailfilter` int(11) NOT NULL default '-1',
313315
`limit_fetchmail` int(11) NOT NULL default '-1',
314316
`limit_mailquota` int(11) NOT NULL default '-1',
@@ -820,7 +822,7 @@ CREATE TABLE `mail_access` (
820822
`type` set('recipient','sender','client') NOT NULL DEFAULT 'recipient',
821823
`active` enum('n','y') NOT NULL default 'y',
822824
PRIMARY KEY (`access_id`),
823-
KEY `server_id` (`server_id`,`source`)
825+
UNIQUE KEY `unique_source` (`server_id`,`source`,`type`)
824826
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
825827

826828
-- --------------------------------------------------------
@@ -882,6 +884,9 @@ CREATE TABLE `mail_domain` (
882884
`dkim_selector` varchar(63) NOT NULL DEFAULT 'default',
883885
`dkim_private` mediumtext NULL,
884886
`dkim_public` mediumtext NULL,
887+
`relay_host` varchar(255) NOT NULL DEFAULT '',
888+
`relay_user` varchar(255) NOT NULL DEFAULT '',
889+
`relay_pass` varchar(255) NOT NULL DEFAULT '',
885890
`active` enum('n','y') NOT NULL DEFAULT 'n',
886891
PRIMARY KEY (`domain_id`),
887892
KEY `server_id` (`server_id`,`domain`),

install/tpl/debian_postfix.conf.master

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2424
relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
2525
relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2626
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
27-
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
27+
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps
2828
smtpd_helo_required = yes
29-
smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
30-
smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
31-
smtpd_reject_unlisted_sender = yes
29+
smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
30+
smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re
31+
smtpd_reject_unlisted_sender = no
3232
smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
3333
smtpd_etrn_restrictions = permit_mynetworks, reject
3434
smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
@@ -53,3 +53,9 @@ tls_preempt_cipherlist = yes
5353
address_verify_negative_refresh_time=60s
5454
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
5555
enable_original_recipient = yes
56+
sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf
57+
smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd
58+
smtp_sender_dependent_authentication = yes
59+
smtp_sasl_auth_enable = yes
60+
smtp_sasl_security_options = noanonymous, noplaintext
61+
smtp_sasl_tls_security_options = noanonymous

0 commit comments

Comments
 (0)