From a1e703424e1108fbd64f17a274b241dd1fafaa43 Mon Sep 17 00:00:00 2001 From: "Cristian G. Segarra" Date: Tue, 31 May 2016 12:23:07 -0300 Subject: [PATCH 001/313] FIX #3939: Import TXT resource records with semicolons and respecting it's case --- interface/web/dns/dns_import.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php index 2e4d58e192..bd8cc84f36 100644 --- a/interface/web/dns/dns_import.php +++ b/interface/web/dns/dns_import.php @@ -216,7 +216,7 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name' $line = trim($line); if ($line != '' && substr($line, 0, 1) != ';'){ if(strpos($line, ";") !== FALSE) { - if (!preg_match("/v=DKIM|v=DMARC/",$line)) { + if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) { $line = substr($line, 0, strpos($line, ";")); } } @@ -267,12 +267,13 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name' $parts = explode(' ', $line); // make elements lowercase - $dkim=@($parts[3]=='"v=DKIM1;')?true:false; - $dmarc=@($parts[3]=='"v=DMARC1;')?true:false; - $new_parts = array(); foreach($parts as $part){ - if(!$dkim && !$dmarc) { + if( + (strpos($part, ';') === false) && + (!preg_match("/^\"/", $part)) && + (!preg_match("/\"$/", $part)) + ) { $new_parts[] = strtolower($part); } else { $new_parts[] = $part; -- GitLab From 0dfb2d97da6b25c20c8de3d766c81077837f7387 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Mon, 6 Jun 2016 17:39:15 +0200 Subject: [PATCH 002/313] - changed fpm socket group to fix access privilegue problems (does not decrease security!) --- server/plugins-available/apache2_plugin.inc.php | 2 +- server/plugins-available/nginx_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 2b4b8cc8c4..676339934a 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -3149,7 +3149,7 @@ class apache2_plugin { $tpl->setVar('fpm_pool', $pool_name); $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1); $tpl->setVar('fpm_user', $data['new']['system_user']); - $tpl->setVar('fpm_group', $data['new']['system_group']); + $tpl->setVar('fpm_group', $web_config['group']); $tpl->setVar('fpm_domain', $data['new']['domain']); $tpl->setVar('pm', $data['new']['pm']); $tpl->setVar('pm_max_children', $data['new']['pm_max_children']); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 6e960ca0be..b2262b00d3 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -2764,7 +2764,7 @@ class nginx_plugin { $tpl->setVar('fpm_pool', $pool_name); $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1); $tpl->setVar('fpm_user', $data['new']['system_user']); - $tpl->setVar('fpm_group', $data['new']['system_group']); + $tpl->setVar('fpm_group', $web_config['group']); $tpl->setVar('pm', $data['new']['pm']); $tpl->setVar('pm_max_children', $data['new']['pm_max_children']); $tpl->setVar('pm_start_servers', $data['new']['pm_start_servers']); -- GitLab From e96469ee75009e67b46c031d161ac95776faed00 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 10 Jun 2016 05:49:29 -0400 Subject: [PATCH 003/313] cosmetical fix for db-quota --- interface/web/sites/database_quota_stats.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php index 5e95fdcaf8..8ed724f97a 100644 --- a/interface/web/sites/database_quota_stats.php +++ b/interface/web/sites/database_quota_stats.php @@ -80,6 +80,8 @@ class list_action extends listform_actions { $client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $sys_group['client_id']); $rec['client'] = $client['username']; $rec['used'] = 'n/a'; + if (empty($rec['database_quota'])) $rec['database_quota'] = 0; + $rec['quota'] = $rec['database_quota']; $rec['quota'] = 'n/a'; } $rec['id'] = $rec[$this->idx_key]; -- GitLab From a35e4c34aa8930aaff6528552dc97600637c9abe Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 10 Jun 2016 05:50:41 -0400 Subject: [PATCH 004/313] fix last commit --- interface/web/sites/database_quota_stats.php | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php index 8ed724f97a..7164d85d0a 100644 --- a/interface/web/sites/database_quota_stats.php +++ b/interface/web/sites/database_quota_stats.php @@ -82,7 +82,6 @@ class list_action extends listform_actions { $rec['used'] = 'n/a'; if (empty($rec['database_quota'])) $rec['database_quota'] = 0; $rec['quota'] = $rec['database_quota']; - $rec['quota'] = 'n/a'; } $rec['id'] = $rec[$this->idx_key]; -- GitLab From db7e71b34fadb036a4eddb8277d84f31a27969d7 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 10 Jun 2016 06:00:42 -0400 Subject: [PATCH 005/313] Fixes #3943 --- interface/web/mail/xmpp_domain_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php index b5858e01ef..869f88c11d 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -402,7 +402,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.'); if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa); } -- GitLab From 1af0f8349dfd8befa2a8daa4b27c107b470eb851 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 10 Jun 2016 06:39:06 -0400 Subject: [PATCH 006/313] show error-message when a client / reseller change the ip for a domain that was created by the admin --- interface/web/sites/web_vhost_domain_edit.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index 647061e734..2b1c0ebf59 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -1460,9 +1460,13 @@ class page_action extends tform_actions { $this->dataRecord["domain"] = $rec['domain']; } if(isset($this->dataRecord["ip_address"]) && $rec['ip_address'] != $this->dataRecord["ip_address"] && $rec['sys_perm_group'] != 'riud') { + //* Add a error message and switch back to old server + $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv4-Address.'); $this->dataRecord["ip_address"] = $rec['ip_address']; } if(isset($this->dataRecord["ipv6_address"]) && $rec['ipv6_address'] != $this->dataRecord["ipv6_address"] && $rec['sys_perm_group'] != 'riud') { + //* Add a error message and switch back to old server + $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv6-Address.'); $this->dataRecord["ipv6_address"] = $rec['ipv6_address']; } unset($rec); -- GitLab From 701f4d81bf0e2ec0e25b8b6adb03345636e9f450 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Mon, 13 Jun 2016 07:34:59 -0400 Subject: [PATCH 007/313] Fixes #3961 --- interface/web/tools/lib/lang/ar_usersettings.lng | 2 +- interface/web/tools/lib/lang/bg_usersettings.lng | 2 +- interface/web/tools/lib/lang/br_usersettings.lng | 2 +- interface/web/tools/lib/lang/ca_usersettings.lng | 2 +- interface/web/tools/lib/lang/cz_usersettings.lng | 2 +- interface/web/tools/lib/lang/de_usersettings.lng | 2 +- interface/web/tools/lib/lang/el_usersettings.lng | 2 +- interface/web/tools/lib/lang/en_usersettings.lng | 2 +- interface/web/tools/lib/lang/es_usersettings.lng | 2 +- interface/web/tools/lib/lang/fi_usersettings.lng | 2 +- interface/web/tools/lib/lang/fr_usersettings.lng | 2 +- interface/web/tools/lib/lang/hr_usersettings.lng | 2 +- interface/web/tools/lib/lang/hu_usersettings.lng | 2 +- interface/web/tools/lib/lang/id_usersettings.lng | 2 +- interface/web/tools/lib/lang/it_usersettings.lng | 2 +- interface/web/tools/lib/lang/ja_usersettings.lng | 2 +- interface/web/tools/lib/lang/nl_usersettings.lng | 2 +- interface/web/tools/lib/lang/pl_usersettings.lng | 2 +- interface/web/tools/lib/lang/pt_usersettings.lng | 2 +- interface/web/tools/lib/lang/ro_usersettings.lng | 2 +- interface/web/tools/lib/lang/ru_usersettings.lng | 2 +- interface/web/tools/lib/lang/se_usersettings.lng | 2 +- interface/web/tools/lib/lang/sk_usersettings.lng | 2 +- interface/web/tools/lib/lang/tr_usersettings.lng | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/interface/web/tools/lib/lang/ar_usersettings.lng b/interface/web/tools/lib/lang/ar_usersettings.lng index a1f3bd2ab9..4ac506ab77 100644 --- a/interface/web/tools/lib/lang/ar_usersettings.lng +++ b/interface/web/tools/lib/lang/ar_usersettings.lng @@ -1,5 +1,5 @@ Date: Tue, 14 Jun 2016 09:20:21 +0200 Subject: [PATCH 008/313] Fixes ispconfig/ispconfig3#3943 --- interface/web/mail/xmpp_domain_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php index b5858e01ef..f973bdc9af 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -402,7 +402,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.'); if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa); } -- GitLab From b8942a6e3ac3786d82d4ab5f1c340028c29e9d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20T=C3=A4ffner?= Date: Tue, 14 Jun 2016 09:21:28 +0200 Subject: [PATCH 009/313] Revert "Fixes ispconfig/ispconfig3#3943" This reverts commit bb664a2228d9d5569ba88ff760acb3c4c7b5e016. --- interface/web/mail/xmpp_domain_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php index f973bdc9af..b5858e01ef 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -402,7 +402,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND = ?", $this->dataRecord['domain'].'.'); if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa); } -- GitLab From b395d495c406f43598fad3e142bdd8d523f5f812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20T=C3=A4ffner?= Date: Tue, 14 Jun 2016 09:23:17 +0200 Subject: [PATCH 010/313] Fixes ispconfig/ispconfig3#3943 --- interface/web/mail/xmpp_domain_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php index b5858e01ef..f973bdc9af 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -402,7 +402,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.'); if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa); } -- GitLab From f59fe4bb0b3c12043c97c9a324be719853834ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20T=C3=A4ffner?= Date: Tue, 14 Jun 2016 09:58:30 +0200 Subject: [PATCH 011/313] fixes ispconfig/ispconfig3#3913 --- install/tpl/pureftpd_mysql.conf.master | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/install/tpl/pureftpd_mysql.conf.master b/install/tpl/pureftpd_mysql.conf.master index 32d21594db..484f1054c8 100644 --- a/install/tpl/pureftpd_mysql.conf.master +++ b/install/tpl/pureftpd_mysql.conf.master @@ -59,12 +59,12 @@ MYSQLCrypt crypt # Query to execute in order to fetch the password -MYSQLGetPW SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MYSQLGetPW SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Query to execute in order to fetch the system user name or uid -MYSQLGetUID SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MYSQLGetUID SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : default UID - if set this overrides MYSQLGetUID @@ -74,7 +74,7 @@ MYSQLGetUID SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{se # Query to execute in order to fetch the system user group or gid -MYSQLGetGID SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MYSQLGetGID SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : default GID - if set this overrides MYSQLGetGID @@ -84,34 +84,34 @@ MYSQLGetGID SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{se # Query to execute in order to fetch the home directory -MYSQLGetDir SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MYSQLGetDir SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : query to get the maximal number of files # Pure-FTPd must have been compiled with virtual quotas support. -MySQLGetQTAFS SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MySQLGetQTAFS SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : query to get the maximal disk usage (virtual quotas) # The number should be in Megabytes. # Pure-FTPd must have been compiled with virtual quotas support. -MySQLGetQTASZ SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MySQLGetQTASZ SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : ratios. The server has to be compiled with ratio support. -MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) -MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) +MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Optional : bandwidth throttling. # The server has to be compiled with throttling support. # Values are in KB/s . -MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) -MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW()) +MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) +MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS : # 1) You know what you are doing. -- GitLab From a95251e2b49c0c2cb8b81addc3a1afc2300ee650 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Tue, 14 Jun 2016 16:28:43 +0200 Subject: [PATCH 012/313] Improved German translation. --- interface/web/admin/lib/lang/de_server_config.lng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index c9fc989da5..06384d5e32 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -26,7 +26,7 @@ $wb['mailuser_gid_txt'] = 'Mailbenutzer GID'; $wb['mailuser_name_txt'] = 'Mailbenutzer Name'; $wb['mailuser_group_txt'] = 'Mailbenutzer Gruppe'; $wb['mailbox_virtual_uidgid_maps_txt'] = 'Website Linux Uid für Mailboxen'; -$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur wenn beides auf gleichem Server'; +$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur für einzel-Server Installationen.'; $wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid kann in Multiserver-Umgebung nicht gemappt werden.'; $wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid Mapping funktioniert nur in Verbindung mit dovecot.'; $wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid Mapping kann nur umgeschaltet werden, wenn noch keine Mailuser angelegt sind.'; -- GitLab From cb0be91cf56a5d1afcf3b5bd363ba6ad28fee69d Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Tue, 14 Jun 2016 16:29:44 +0200 Subject: [PATCH 013/313] Prevent 60 seconds delay in mailbox creation when mapping of mailbox zui and gid to web uid and gid is not used. --- interface/web/mail/mail_user_edit.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php index a155cbdbfa..aedcd2249b 100644 --- a/interface/web/mail/mail_user_edit.php +++ b/interface/web/mail/mail_user_edit.php @@ -237,8 +237,13 @@ class page_action extends tform_actions { $this->dataRecord["homedir"] = $mail_config["homedir_path"]; // Will be overwritten by mail_plugin - $this->dataRecord['uid'] = -1; - $this->dataRecord['gid'] = -1; + if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') { + $this->dataRecord['uid'] = -1; + $this->dataRecord['gid'] = -1; + } else { + $this->dataRecord['uid'] = intval($mail_config["mailuser_uid"]); + $this->dataRecord['gid'] = intval($mail_config["mailuser_gid"]); + } //* Check if there is no alias or forward with this address $tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE active = 'y' AND source = ?", $this->dataRecord["email"]); -- GitLab From ebbc3f1a0744ec16f366ace7c4cd49c6a353b8a8 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Tue, 14 Jun 2016 17:35:33 +0200 Subject: [PATCH 014/313] Fixed Issue #3948 reseller missing '*' option in ipv4 address. --- interface/web/sites/web_vhost_domain_edit.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index 2b1c0ebf59..82a8fa6200 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -305,6 +305,17 @@ class page_action extends tform_actions { $app->tpl->setVar("server_id", $options_web_servers); unset($options_web_servers); + + if($this->id > 0) { + if(!isset($this->dataRecord["server_id"])){ + $tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id); + $this->dataRecord["server_id"] = $tmp["server_id"]; + unset($tmp); + } + $server_id = intval(@$this->dataRecord["server_id"]); + } else { + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 0; + } if ($settings['use_domain_module'] != 'y') { // Fill the client select field -- GitLab From 855cf2aaeb5e4cd43f4f0e6f79a66e0ab6fbebcf Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Tue, 14 Jun 2016 18:08:13 +0200 Subject: [PATCH 015/313] Fixed Issue #3950 Default missing Default ? in php version --- interface/web/sites/templates/web_vhost_domain_edit.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/sites/templates/web_vhost_domain_edit.htm b/interface/web/sites/templates/web_vhost_domain_edit.htm index ec9005a2e3..22a1952704 100644 --- a/interface/web/sites/templates/web_vhost_domain_edit.htm +++ b/interface/web/sites/templates/web_vhost_domain_edit.htm @@ -432,8 +432,8 @@ function reloadFastcgiPHPVersions(noFormChange) { jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) { - //var options = ''; - var options = ''; + var options = ''; + //var options = ''; var phpfastcgiselected = ''; $.each(data, function(key, val) { -- GitLab From b33d7d56dfc4490f83b896ba99de3c1aca99854e Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 15 Jun 2016 10:22:08 +0200 Subject: [PATCH 016/313] Fixed issue #3955 DNS module: Limit for maximum zones can be circumvented with "import zone file" function. Removed TODO string in error template. --- interface/web/dns/dns_import.php | 14 +++++++++++++- interface/web/dns/dns_wizard.php | 14 +++++++++++++- interface/web/dns/lib/lang/de_dns_wizard.lng | 3 ++- interface/web/dns/lib/lang/en_dns_wizard.lng | 1 + .../web/themes/default/templates/error.tpl.htm | 1 - 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php index bd8cc84f36..6bb738ef1c 100644 --- a/interface/web/dns/dns_import.php +++ b/interface/web/dns/dns_import.php @@ -38,11 +38,23 @@ $msg = ''; $error = ''; // Loading the template -$app->uses('tpl,validate_dns'); +$app->uses('tform,tpl,validate_dns'); $app->tpl->newTemplate("form.tpl.htm"); $app->tpl->setInclude('content_tpl', 'templates/dns_import.htm'); $app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng'); +// Check if dns record limit has been reached. We will check only users, not admins +if($_SESSION["s"]["user"]["typ"] == 'user') { + $app->tform->formDef['db_table_idx'] = 'id'; + $app->tform->formDef['db_table'] = 'dns_soa'; + if(!$app->tform->checkClientLimit('limit_dns_zone')) { + $app->error($app->lng('limit_dns_zone_txt')); + } + if(!$app->tform->checkResellerLimit('limit_dns_zone')) { + $app->error('Reseller: '.$app->lng('limit_dns_zone_txt')); + } +} + // import variables $template_id = (isset($_POST['template_id']))?$app->functions->intval($_POST['template_id']):0; $sys_groupid = (isset($_POST['client_group_id']))?$app->functions->intval($_POST['client_group_id']):0; diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php index 3cfc397bb1..a0fd131ae1 100644 --- a/interface/web/dns/dns_wizard.php +++ b/interface/web/dns/dns_wizard.php @@ -36,11 +36,23 @@ $app->auth->check_module_permissions('dns'); // Loading the template -$app->uses('tpl,validate_dns'); +$app->uses('tpl,validate_dns,tform'); $app->tpl->newTemplate("form.tpl.htm"); $app->tpl->setInclude('content_tpl', 'templates/dns_wizard.htm'); $app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng'); +// Check if dns record limit has been reached. We will check only users, not admins +if($_SESSION["s"]["user"]["typ"] == 'user') { + $app->tform->formDef['db_table_idx'] = 'id'; + $app->tform->formDef['db_table'] = 'dns_soa'; + if(!$app->tform->checkClientLimit('limit_dns_zone')) { + $app->error($app->lng('limit_dns_zone_txt')); + } + if(!$app->tform->checkResellerLimit('limit_dns_zone')) { + $app->error('Reseller: '.$app->lng('limit_dns_zone_txt')); + } +} + // import variables $template_id = (isset($_POST['template_id']))?$app->functions->intval($_POST['template_id']):0; $sys_groupid = (isset($_POST['client_group_id']))?$app->functions->intval($_POST['client_group_id']):0; diff --git a/interface/web/dns/lib/lang/de_dns_wizard.lng b/interface/web/dns/lib/lang/de_dns_wizard.lng index 7f664ca60e..e34604a4dc 100644 --- a/interface/web/dns/lib/lang/de_dns_wizard.lng +++ b/interface/web/dns/lib/lang/de_dns_wizard.lng @@ -40,5 +40,6 @@ $wb['globalsearch_noresults_limit_txt'] = '0 Treffer'; $wb['globalsearch_searchfield_watermark_txt'] = 'Suche'; $wb['globalsearch_suggestions_text_txt'] = 'Vorschläge'; $wb['error_no_server_id'] = 'No server provided.'; -$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.'; +$wb['error_not_allowed_server_id'] = 'Der ausgewählte Server ist in diesem Konto nicht verfügbar.'; +$wb['limit_dns_zone_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.'; ?> diff --git a/interface/web/dns/lib/lang/en_dns_wizard.lng b/interface/web/dns/lib/lang/en_dns_wizard.lng index a2cec089df..6a63e21281 100644 --- a/interface/web/dns/lib/lang/en_dns_wizard.lng +++ b/interface/web/dns/lib/lang/en_dns_wizard.lng @@ -41,4 +41,5 @@ $wb['globalsearch_searchfield_watermark_txt'] = "Search"; $wb['globalsearch_suggestions_text_txt'] = "Suggestions"; $wb['error_no_server_id'] = 'No server provided.'; $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.'; +$wb["limit_dns_zone_txt"] = 'The max. number of DNS zones for your account is reached.'; ?> diff --git a/interface/web/themes/default/templates/error.tpl.htm b/interface/web/themes/default/templates/error.tpl.htm index f0c10811c2..dbb730f599 100644 --- a/interface/web/themes/default/templates/error.tpl.htm +++ b/interface/web/themes/default/templates/error.tpl.htm @@ -4,6 +4,5 @@
  1. ###ERRORMSG###
-
TODO: WRONG HTML ELEMENTS
-- GitLab From c4cf454ef455d05542d5513961f2ee8f5c34e018 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 15 Jun 2016 11:06:55 +0200 Subject: [PATCH 017/313] Force web server ID to be 1 if no other server is found. --- interface/web/sites/web_vhost_domain_edit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index 82a8fa6200..e46ed7db32 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -188,7 +188,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 0; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 1; } if($app->functions->intval($this->dataRecord["server_id"]) > 0) { @@ -314,7 +314,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 0; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 1; } if ($settings['use_domain_module'] != 'y') { -- GitLab From 7f16fe3e6d8cbb46773f88157d70898e3624d2d0 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 15 Jun 2016 11:43:39 +0200 Subject: [PATCH 018/313] Open Issue #3951: Added min field length for Firefox in APS installerdomain select field. --- interface/web/sites/aps_install_package.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php index bcd4184dd9..19ab785c95 100644 --- a/interface/web/sites/aps_install_package.php +++ b/interface/web/sites/aps_install_package.php @@ -129,7 +129,7 @@ $domains_tpl = ''; if(!empty($domains)) { $set = array(); - $set[] = ''; foreach($domains as $domain) { $selected = ''; -- GitLab From 3ad8446706afa6754de74577bd5334c235192d7c Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 15 Jun 2016 12:08:56 +0200 Subject: [PATCH 019/313] Fixed Issue 3944: Rewrite HTTP to HTTPS does not work without SEO Redirect --- server/conf/vhost.conf.master | 1 - server/plugins-available/apache2_plugin.inc.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 66b4608806..62ef151081 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -396,7 +396,6 @@ RewriteEngine on - RewriteEngine on RewriteCond %{REQUEST_URI} ^/\.well-known/acme-challenge/ RewriteRule ^ - [END] diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 676339934a..021078d430 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1494,7 +1494,7 @@ class apache2_plugin { if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules - if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0) { + if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0 || $data['new']['rewrite_to_https'] == 'y') { $tpl->setVar('rewrite_enabled', 1); } else { $tpl->setVar('rewrite_enabled', 0); -- GitLab From d3e228106b588978a35337b25402627ed917dfc0 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 15 Jun 2016 15:01:38 +0200 Subject: [PATCH 020/313] Fixed issue #3948 - reseller missing '*' option in ipv4 address --- interface/web/sites/web_vhost_domain_edit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index e46ed7db32..ec91daf7eb 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -188,7 +188,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 1; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 1; } if($app->functions->intval($this->dataRecord["server_id"]) > 0) { @@ -314,7 +314,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 1; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 1; } if ($settings['use_domain_module'] != 'y') { -- GitLab From ca464385042f7d264a3dad36d7292bb98300a1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20T=C3=A4ffner?= Date: Thu, 16 Jun 2016 07:25:32 +0200 Subject: [PATCH 021/313] fixed ispconfig/ispconfig3#3963 cartesian product with correct line and a full table please review the change! --- interface/web/sites/database_quota_stats.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php index 5e95fdcaf8..46041275db 100644 --- a/interface/web/sites/database_quota_stats.php +++ b/interface/web/sites/database_quota_stats.php @@ -29,7 +29,7 @@ if(is_array($tmp_rec)) { foreach($tmp_array as $database_name => $data) { $db_name = $data['database_name']; - $temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE sys_group.client_id = client.client_id AND web_database.database_name = ?", $db_name); + $temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE sys_group.groupid = web_database.sys_groupid AND sys_group.client_id = client.client_id AND web_database.database_name = ?", $db_name); if(is_array($temp) && !empty($temp)) { $monitor_data[$server_id.'.'.$db_name]['database_name'] = $data['database_name']; $monitor_data[$server_id.'.'.$db_name]['client'] = isset($temp['username']) ? $temp['username'] : ''; -- GitLab From 116598662cf13220355cfe5f43ca174a09394df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20T=C3=A4ffner?= Date: Thu, 16 Jun 2016 07:56:29 +0200 Subject: [PATCH 022/313] also fixed ispconfig/ispconfig3#3920 now --- interface/lib/classes/quota_lib.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php index 0455dc98b2..b6d224069f 100644 --- a/interface/lib/classes/quota_lib.inc.php +++ b/interface/lib/classes/quota_lib.inc.php @@ -312,13 +312,13 @@ class quota_lib { $databases[$i]['quota_raw'] = $databases[$i]['database_quota']; $databases[$i]['used_raw'] = $databases[$i]['used'] / 1024 / 1024; //* quota is stored as MB - calculated bytes - $databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used'] * 100 / $databases[$i]['database_quota']) : 0; + $databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used_raw'] * 100 / $databases[$i]['database_quota']) : 0; if ($readable) { // colours $databases[$i]['display_colour'] = '#000000'; if($databases[$i]['database_quota'] > 0){ - $used_ratio = $databases[$i]['used']/$databases[$i]['database_quota']; + $used_ratio = $databases[$i]['used'] / $databases[$i]['database_quota']; } else { $used_ratio = 0; } -- GitLab From e336d63f13ba5005f9054b19b0ff485d7f623909 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Thu, 16 Jun 2016 04:32:01 -0400 Subject: [PATCH 023/313] fixed remove mail-backups (Bernd Kilmer) --- server/lib/classes/cron.d/500-backup_mail.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php index 04a4249f50..2eacaed737 100644 --- a/server/lib/classes/cron.d/500-backup_mail.inc.php +++ b/server/lib/classes/cron.d/500-backup_mail.inc.php @@ -176,7 +176,7 @@ class cronjob_backup_mail extends cronjob { $dir_handle = dir($mail_backup_dir); $files = array(); while (false !== ($entry = $dir_handle->read())) { - if($entry != '.' && $entry != '..' && substr($entry,0,4+strlen($rec['mailuser_id'])) == 'mail'.$rec['mailuser_id'] && is_file($mail_backup_dir.'/'.$entry)) { + if($entry != '.' && $entry != '..' && substr($entry,0,5+strlen($rec['mailuser_id'])) == 'mail'.$rec['mailuser_id'].'_' && is_file($mail_backup_dir.'/'.$entry)) { $files[] = $entry; } } -- GitLab From 0d3e95814c9b0dc5d1339d38c23cd7ab33a2e7a9 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 14:43:08 +0200 Subject: [PATCH 024/313] Fixed Issue #3966 Error when Web-IP is '*' --- .../sql/incremental/upd_dev_collection.sql | 10 +++++++++ interface/web/sites/ajax_get_ip.php | 10 +++++---- interface/web/sites/web_vhost_domain_edit.php | 22 +++++++++---------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index e69de29bb2..13c895c75b 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -0,0 +1,10 @@ +ALTER TABLE `client` CHANGE `web_servers` `web_servers` TEXT NULL DEFAULT NULL; +ALTER TABLE `client` CHANGE `mail_servers` `mail_servers` TEXT NULL DEFAULT NULL; +ALTER TABLE `client` CHANGE `xmpp_servers` `xmpp_servers` TEXT NULL DEFAULT NULL; +ALTER TABLE `client` CHANGE `db_servers` `db_servers` TEXT NULL DEFAULT NULL; +ALTER TABLE `client` CHANGE `dns_servers` `dns_servers` TEXT NULL DEFAULT NULL; +UPDATE client SET web_servers = default_webserver WHERE (web_servers = '' OR web_servers IS NULL); +UPDATE client SET mail_servers = default_mailserver WHERE (mail_servers = '' OR mail_servers IS NULL); +UPDATE client SET xmpp_servers = default_xmppserver WHERE (xmpp_servers = '' OR xmpp_servers IS NULL); +UPDATE client SET db_servers = default_dbserver WHERE (db_servers = '' OR db_servers IS NULL); +UPDATE client SET dns_servers = default_dnsserver WHERE (dns_servers = '' OR dns_servers IS NULL); \ No newline at end of file diff --git a/interface/web/sites/ajax_get_ip.php b/interface/web/sites/ajax_get_ip.php index 205be4803b..8c83191920 100644 --- a/interface/web/sites/ajax_get_ip.php +++ b/interface/web/sites/ajax_get_ip.php @@ -39,13 +39,15 @@ $server_id = $app->functions->intval($_GET["server_id"]); $client_group_id = $app->functions->intval($_GET["client_group_id"]); $ip_type = $_GET['ip_type']; -if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) { +//if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) { //* Get global web config $web_config = $app->getconf->get_server_config($server_id, 'web'); + + $tmp = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $client_group_id); + $sql = "SELECT ip_address FROM server_ip WHERE ip_type = ? AND server_id = ? AND (client_id = 0 OR client_id=?)"; - $sql = "SELECT ip_address FROM server_ip WHERE ip_type = ? AND server_id = ?"; - $ips = $app->db->queryAllRecords($sql, $ip_type, $server_id); + $ips = $app->db->queryAllRecords($sql, $ip_type, $server_id, $tmp['groupid']); // $ip_select = ""; if($ip_type == 'IPv4'){ $ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"*#":""; @@ -60,7 +62,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION } unset($tmp); unset($ips); -} +//} echo substr($ip_select, 0, -1); ?> diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index ec91daf7eb..6f843571a3 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -188,7 +188,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 1; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 0; } if($app->functions->intval($this->dataRecord["server_id"]) > 0) { @@ -200,9 +200,9 @@ class page_action extends tform_actions { } } - //* Fill the IPv4 select field with the IP addresses that are allowed for this client - $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")"; - $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers'])); + //* Fill the IPv4 select field with the IP addresses that are allowed for this client on the current server + $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")"; + $ips = $app->db->queryAllRecords($sql, $server_id); $ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"":""; //if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "\r\n"; //$ip_select = ""; @@ -217,8 +217,8 @@ class page_action extends tform_actions { unset($ips); //* Fill the IPv6 select field with the IP addresses that are allowed for this client - $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)"; - $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']); + $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)"; + $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']); //$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"":""; //$ip_select = ""; $ip_select = ""; @@ -314,7 +314,7 @@ class page_action extends tform_actions { } $server_id = intval(@$this->dataRecord["server_id"]); } else { - $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 1; + $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 0; } if ($settings['use_domain_module'] != 'y') { @@ -346,8 +346,8 @@ class page_action extends tform_actions { } //* Fill the IPv4 select field with the IP addresses that are allowed for this client - $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)"; - $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']); + $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)"; + $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']); $ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"":""; //if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "\r\n"; //$ip_select = ""; @@ -362,8 +362,8 @@ class page_action extends tform_actions { unset($ips); //* Fill the IPv6 select field with the IP addresses that are allowed for this client - $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)"; - $ips = $app->db->queryAllRecords($sql, $client['web_servers'], $_SESSION['s']['user']['client_id']); + $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)"; + $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']); $ip_select = ""; //$ip_select = ""; if(is_array($ips)) { -- GitLab From dc4dd5a2e619a9be7434ae6a44db9ed34782f091 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 15:56:52 +0200 Subject: [PATCH 025/313] Fixed #3964 Design missing when impersonating --- interface/web/login/login_as.php | 4 ++-- interface/web/login/logout.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php index a17d5baff1..4b78c6c41b 100644 --- a/interface/web/login/login_as.php +++ b/interface/web/login/login_as.php @@ -98,8 +98,8 @@ echo '
- - + +
'; ?> diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php index ee6fffa312..a4a127ff8b 100644 --- a/interface/web/login/logout.php +++ b/interface/web/login/logout.php @@ -56,8 +56,8 @@ if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin'
- - + +
'; exit; -- GitLab From ffedcb9a80e8a3ff375993fc349d9ce969a1a4d7 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 16:41:37 +0200 Subject: [PATCH 026/313] First part of fix for issue #3896 - Unknown column 'default_mailserver' in 'field list' when saving client limits main template --- .../sql/incremental/upd_dev_collection.sql | 7 ++++++- install/sql/ispconfig3.sql | 17 +++++++++++------ .../web/client/form/client_template.tform.php | 19 ++++++++++--------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 13c895c75b..f0a3df83f3 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -7,4 +7,9 @@ UPDATE client SET web_servers = default_webserver WHERE (web_servers = '' OR web UPDATE client SET mail_servers = default_mailserver WHERE (mail_servers = '' OR mail_servers IS NULL); UPDATE client SET xmpp_servers = default_xmppserver WHERE (xmpp_servers = '' OR xmpp_servers IS NULL); UPDATE client SET db_servers = default_dbserver WHERE (db_servers = '' OR db_servers IS NULL); -UPDATE client SET dns_servers = default_dnsserver WHERE (dns_servers = '' OR dns_servers IS NULL); \ No newline at end of file +UPDATE client SET dns_servers = default_dnsserver WHERE (dns_servers = '' OR dns_servers IS NULL); +ALTER TABLE `client_template` ADD `default_slave_dnsserver` INT NOT NULL DEFAULT '0' AFTER `limit_dns_slave_zone`; +ALTER TABLE `client_template` ADD `mail_servers` TEXT NULL DEFAULT NULL AFTER `template_type`; +ALTER TABLE `client_template` ADD `web_servers` TEXT NULL DEFAULT NULL AFTER `limit_xmpp_httparchive`; +ALTER TABLE `client_template` ADD `dns_servers` TEXT NULL DEFAULT NULL AFTER `limit_aps`; +ALTER TABLE `client_template` ADD `db_servers` TEXT NULL DEFAULT NULL AFTER `limit_dns_record`; \ No newline at end of file diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index a14a0d6b1b..ec750ba125 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -170,7 +170,7 @@ CREATE TABLE `client` ( `bank_account_swift` varchar(255) DEFAULT NULL, `paypal_email` varchar(255) DEFAULT NULL, `default_mailserver` int(11) unsigned NOT NULL DEFAULT '1', - `mail_servers` blob, + `mail_servers` text, `limit_maildomain` int(11) NOT NULL DEFAULT '-1', `limit_mailbox` int(11) NOT NULL DEFAULT '-1', `limit_mailalias` int(11) NOT NULL DEFAULT '-1', @@ -185,7 +185,7 @@ CREATE TABLE `client` ( `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0', `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', - `xmpp_servers` blob, + `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1', `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n', @@ -197,7 +197,7 @@ CREATE TABLE `client` ( `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n', `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n', `default_webserver` int(11) unsigned NOT NULL DEFAULT '1', - `web_servers` blob, + `web_servers` text, `limit_web_ip` text, `limit_web_domain` int(11) NOT NULL DEFAULT '-1', `limit_web_quota` int(11) NOT NULL DEFAULT '-1', @@ -222,13 +222,13 @@ CREATE TABLE `client` ( `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n', `limit_aps` int(11) NOT NULL DEFAULT '-1', `default_dnsserver` int(11) unsigned NOT NULL DEFAULT '1', - `db_servers` blob, + `db_servers` text, `limit_dns_zone` int(11) NOT NULL DEFAULT '-1', `default_slave_dnsserver` int(11) unsigned NOT NULL DEFAULT '1', `limit_dns_slave_zone` int(11) NOT NULL DEFAULT '-1', `limit_dns_record` int(11) NOT NULL DEFAULT '-1', `default_dbserver` int(11) NOT NULL DEFAULT '1', - `dns_servers` blob, + `dns_servers` text, `limit_database` int(11) NOT NULL DEFAULT '-1', `limit_database_user` int(11) NOT NULL DEFAULT '-1', `limit_database_quota` int(11) NOT NULL default '-1', @@ -301,6 +301,7 @@ CREATE TABLE `client_template` ( `sys_perm_other` varchar(5) default NULL, `template_name` varchar(64) NOT NULL DEFAULT '', `template_type` varchar(1) NOT NULL default 'm', + `mail_servers` text, `limit_maildomain` int(11) NOT NULL default '-1', `limit_mailbox` int(11) NOT NULL default '-1', `limit_mailalias` int(11) NOT NULL default '-1', @@ -315,7 +316,7 @@ CREATE TABLE `client_template` ( `limit_spamfilter_user` int(11) NOT NULL default '0', `limit_spamfilter_policy` int(11) NOT NULL default '0', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', - `xmpp_servers` blob, + `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1', `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n', @@ -325,6 +326,7 @@ CREATE TABLE `client_template` ( `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n', `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n', `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n', + `web_servers` text, `limit_web_ip` text, `limit_web_domain` int(11) NOT NULL default '-1', `limit_web_quota` int(11) NOT NULL default '-1', @@ -348,9 +350,12 @@ CREATE TABLE `client_template` ( `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y', `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n', `limit_aps` int(11) NOT NULL DEFAULT '-1', + `dns_servers` text, `limit_dns_zone` int(11) NOT NULL default '-1', + `default_slave_dnsserver` int(11) NOT NULL DEFAULT '0', `limit_dns_slave_zone` int(11) NOT NULL default '-1', `limit_dns_record` int(11) NOT NULL default '-1', + `db_servers` text, `limit_database` int(11) NOT NULL default '-1', `limit_database_user` int(11) NOT NULL DEFAULT '-1', `limit_database_quota` int(11) NOT NULL default '-1', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index a16d21ff8e..0fccee9601 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -114,7 +114,7 @@ $form["tabs"]['limits'] = array ( 'maxlength' => '10', 'rows' => '', 'cols' => '' - ), + ),/* 'default_mailserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', @@ -125,7 +125,7 @@ $form["tabs"]['limits'] = array ( ), 'value' => array(''), 'name' => 'default_mailserver' - ), + ),*/ 'limit_maildomain' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', @@ -321,7 +321,7 @@ $form["tabs"]['limits'] = array ( 'maxlength' => '10', 'rows' => '', 'cols' => '' - ), + ),/* 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', @@ -332,7 +332,7 @@ $form["tabs"]['limits'] = array ( ), 'value' => '', 'name' => 'default_xmppserver' - ), + ),*/ 'xmpp_servers' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'MULTIPLE', @@ -420,7 +420,7 @@ $form["tabs"]['limits'] = array ( 'formtype' => 'CHECKBOX', 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') - ), + ),/* 'default_webserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', @@ -431,7 +431,7 @@ $form["tabs"]['limits'] = array ( ), 'value' => array(''), 'name' => 'default_webserver' - ), + ),*/ 'limit_web_domain' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', @@ -623,7 +623,7 @@ $form["tabs"]['limits'] = array ( 'formtype' => 'CHECKBOX', 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') - ), + ),/* 'default_dnsserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', @@ -634,7 +634,7 @@ $form["tabs"]['limits'] = array ( ), 'value' => array(''), 'name' => 'default_dnsserver' - ), + ),*/ 'limit_dns_zone' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', @@ -704,6 +704,7 @@ $form["tabs"]['limits'] = array ( 'cols' => '' ), */ + /* 'default_dbserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', @@ -714,7 +715,7 @@ $form["tabs"]['limits'] = array ( ), 'value' => array(''), 'name' => 'default_dbserver' - ), + ),*/ 'limit_database' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', -- GitLab From 14f5970ef1f3f830916a9e1a4c4655bdcf4519d1 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 18:22:08 +0200 Subject: [PATCH 027/313] Fixed #3924 ISPC 3.1 b1 delete client confirmation --- interface/web/client/templates/client_del.htm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/interface/web/client/templates/client_del.htm b/interface/web/client/templates/client_del.htm index 2ae0a8e700..e24ca768c2 100644 --- a/interface/web/client/templates/client_del.htm +++ b/interface/web/client/templates/client_del.htm @@ -3,8 +3,6 @@

- -
:

@@ -12,15 +10,15 @@ , - +

- -
- +   +
+   -
+
\ No newline at end of file -- GitLab From 4b004553be448b440b42f1e589ac7ee029055f3a Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 18:34:39 +0200 Subject: [PATCH 028/313] Fixed: #3923 --- interface/web/tools/templates/import_ispconfig.htm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/interface/web/tools/templates/import_ispconfig.htm b/interface/web/tools/templates/import_ispconfig.htm index 83d79e671f..1d63df2a6d 100644 --- a/interface/web/tools/templates/import_ispconfig.htm +++ b/interface/web/tools/templates/import_ispconfig.htm @@ -3,15 +3,13 @@

-
+
{tmpl_var name="legend_txt"}
-
-
(e.g. https://www.example.com:8080/remote/ ) -
+
-- GitLab From d17f082e12e65ac007a6750e7e21e0c9440436ac Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 18:38:42 +0200 Subject: [PATCH 029/313] Fixed #3922 --- interface/web/monitor/lib/lang/pl.lng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng index c2629c4187..4ce642fbd8 100644 --- a/interface/web/monitor/lib/lang/pl.lng +++ b/interface/web/monitor/lib/lang/pl.lng @@ -24,7 +24,7 @@ $wb['Status of services'] = 'Status usług'; $wb['No Refresh'] = 'Nie odświeżaj'; $wb['minutes'] = 'minuty'; $wb['Show Overview'] = 'Pokaż wszystko'; -$wb['System State (All Servers)'] = 'Status systemu (Wszystkie serwery)'; +$wb['System State (All Servers)'] = 'Status systemu'; $wb['Hardware-Information'] = 'Informacje o sprzęcie'; $wb['Show CPU info'] = 'Pokaż informacje o procesorze'; $wb['Server State'] = 'Status serwera'; -- GitLab From b5e780aa3f513f342d2909efc565d27cee240bb5 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 16 Jun 2016 18:48:29 +0200 Subject: [PATCH 030/313] Fixed: #3902 --- interface/web/admin/templates/directive_snippets_edit.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/admin/templates/directive_snippets_edit.htm b/interface/web/admin/templates/directive_snippets_edit.htm index b5adc5838c..eab53c79bb 100644 --- a/interface/web/admin/templates/directive_snippets_edit.htm +++ b/interface/web/admin/templates/directive_snippets_edit.htm @@ -17,8 +17,8 @@
-
{tmpl_var name='snippet'}
-
 {tmpl_var name='variables_txt'}: {DOCROOT}, {FASTCGIPASS}, {PHPFALLBACKFASTCGIPASS}
+
{tmpl_var name='snippet'}
+   Nginx {tmpl_var name='variables_txt'}: {DOCROOT}, {FASTCGIPASS}, {PHPFALLBACKFASTCGIPASS}
-- GitLab From 0ea7b959fb7efd0ee136a767937b63acd94006ac Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 17 Jun 2016 03:50:46 -0400 Subject: [PATCH 031/313] add translations to list-files --- interface/web/admin/list/server_ip_map.list.php | 2 +- interface/web/mail/list/mail_alias.list.php | 2 +- interface/web/mail/list/mail_aliasdomain.list.php | 2 +- interface/web/mail/list/mail_blacklist.list.php | 2 +- interface/web/mail/list/mail_content_filter.list.php | 2 +- interface/web/mail/list/mail_domain.list.php | 2 +- interface/web/mail/list/mail_domain_catchall.list.php | 2 +- interface/web/mail/list/mail_forward.list.php | 2 +- interface/web/mail/list/mail_get.list.php | 2 +- interface/web/mail/list/mail_relay_recipient.list.php | 2 +- interface/web/mail/list/mail_spamfilter.list.php | 2 +- interface/web/mail/list/mail_transport.list.php | 2 +- interface/web/mail/list/mail_user.list.php | 10 +++++----- interface/web/mail/list/mail_whitelist.list.php | 2 +- interface/web/mail/list/spamfilter_blacklist.list.php | 2 +- interface/web/mail/list/spamfilter_policy.list.php | 8 ++++---- interface/web/mail/list/spamfilter_users.list.php | 2 +- interface/web/mail/list/spamfilter_whitelist.list.php | 2 +- interface/web/mail/list/xmpp_domain.list.php | 2 +- interface/web/sites/list/cron.list.php | 2 +- interface/web/sites/list/database.list.php | 4 ++-- interface/web/sites/list/ftp_user.list.php | 2 +- interface/web/sites/list/shell_user.list.php | 2 +- interface/web/sites/list/web_childdomain.list.php | 2 +- interface/web/sites/list/web_folder.list.php | 2 +- interface/web/sites/list/web_folder_user.list.php | 2 +- interface/web/sites/list/web_vhost_domain.list.php | 2 +- interface/web/sites/list/webdav_user.list.php | 2 +- interface/web/vm/list/openvz_ip.list.php | 2 +- interface/web/vm/list/openvz_ostemplate.list.php | 4 ++-- interface/web/vm/list/openvz_template.list.php | 2 +- interface/web/vm/list/openvz_vm.list.php | 2 +- 32 files changed, 41 insertions(+), 41 deletions(-) diff --git a/interface/web/admin/list/server_ip_map.list.php b/interface/web/admin/list/server_ip_map.list.php index 95ac17cac2..c17aecb5c2 100644 --- a/interface/web/admin/list/server_ip_map.list.php +++ b/interface/web/admin/list/server_ip_map.list.php @@ -18,7 +18,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste['item'][] = array( 'field' => 'server_id', 'datatype' => 'INTEGER', diff --git a/interface/web/mail/list/mail_alias.list.php b/interface/web/mail/list/mail_alias.list.php index fcbfb94591..044fc84baa 100644 --- a/interface/web/mail/list/mail_alias.list.php +++ b/interface/web/mail/list/mail_alias.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "source", diff --git a/interface/web/mail/list/mail_aliasdomain.list.php b/interface/web/mail/list/mail_aliasdomain.list.php index 8408e9e604..b97d265e48 100644 --- a/interface/web/mail/list/mail_aliasdomain.list.php +++ b/interface/web/mail/list/mail_aliasdomain.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "source", diff --git a/interface/web/mail/list/mail_blacklist.list.php b/interface/web/mail/list/mail_blacklist.list.php index 3e92caeeda..45a3a9987c 100644 --- a/interface/web/mail/list/mail_blacklist.list.php +++ b/interface/web/mail/list/mail_blacklist.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); diff --git a/interface/web/mail/list/mail_content_filter.list.php b/interface/web/mail/list/mail_content_filter.list.php index 18b0cf252c..c585a1601a 100644 --- a/interface/web/mail/list/mail_content_filter.list.php +++ b/interface/web/mail/list/mail_content_filter.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); diff --git a/interface/web/mail/list/mail_domain.list.php b/interface/web/mail/list/mail_domain.list.php index c2005aeb3e..7946f4c51a 100644 --- a/interface/web/mail/list/mail_domain.list.php +++ b/interface/web/mail/list/mail_domain.list.php @@ -59,7 +59,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); if($_SESSION['s']['user']['typ'] == 'admin') { diff --git a/interface/web/mail/list/mail_domain_catchall.list.php b/interface/web/mail/list/mail_domain_catchall.list.php index 4413c491a2..e2aa2d63aa 100644 --- a/interface/web/mail/list/mail_domain_catchall.list.php +++ b/interface/web/mail/list/mail_domain_catchall.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "source", diff --git a/interface/web/mail/list/mail_forward.list.php b/interface/web/mail/list/mail_forward.list.php index 831e8b458b..bd334d7434 100644 --- a/interface/web/mail/list/mail_forward.list.php +++ b/interface/web/mail/list/mail_forward.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "source", diff --git a/interface/web/mail/list/mail_get.list.php b/interface/web/mail/list/mail_get.list.php index d027110ad4..3163f4e108 100644 --- a/interface/web/mail/list/mail_get.list.php +++ b/interface/web/mail/list/mail_get.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/mail_relay_recipient.list.php b/interface/web/mail/list/mail_relay_recipient.list.php index 8b7e308a20..3e3fd91012 100644 --- a/interface/web/mail/list/mail_relay_recipient.list.php +++ b/interface/web/mail/list/mail_relay_recipient.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/mail_spamfilter.list.php b/interface/web/mail/list/mail_spamfilter.list.php index 0db3e7c9a8..f1f4e612c2 100644 --- a/interface/web/mail/list/mail_spamfilter.list.php +++ b/interface/web/mail/list/mail_spamfilter.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('1' => "
".$app->lng('Yes')."
", '0' => "
".$app->lng('No')."
")); + 'value' => array('1' => "
".$app->lng('yes_txt')."
", '0' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/mail_transport.list.php b/interface/web/mail/list/mail_transport.list.php index 6cbc2dfb96..9124b937fd 100644 --- a/interface/web/mail/list/mail_transport.list.php +++ b/interface/web/mail/list/mail_transport.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/mail_user.list.php b/interface/web/mail/list/mail_user.list.php index fd15658eac..1c56140cb2 100644 --- a/interface/web/mail/list/mail_user.list.php +++ b/interface/web/mail/list/mail_user.list.php @@ -87,7 +87,7 @@ $liste["item"][] = array( 'field' => "autoresponder", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "postfix", 'datatype' => "VARCHAR", @@ -96,7 +96,7 @@ $liste["item"][] = array( 'field' => "postfix", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "disablesmtp", 'datatype' => "VARCHAR", @@ -105,7 +105,7 @@ $liste["item"][] = array( 'field' => "disablesmtp", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('n' => "
".$app->lng('Yes')."
", 'y' => "
".$app->lng('No')."
")); + 'value' => array('n' => "
".$app->lng('yes_txt')."
", 'y' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "disableimap", 'datatype' => "VARCHAR", @@ -114,7 +114,7 @@ $liste["item"][] = array( 'field' => "disableimap", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('n' => "
".$app->lng('Yes')."
", 'y' => "
".$app->lng('No')."
")); + 'value' => array('n' => "
".$app->lng('yes_txt')."
", 'y' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "disablepop3", 'datatype' => "VARCHAR", @@ -123,6 +123,6 @@ $liste["item"][] = array( 'field' => "disablepop3", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('n' => "
".$app->lng('Yes')."
", 'y' => "
".$app->lng('No')."
")); + 'value' => array('n' => "
".$app->lng('yes_txt')."
", 'y' => "
".$app->lng('no_txt')."
")); ?> diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php index 0d8a0ffd70..321db85992 100644 --- a/interface/web/mail/list/mail_whitelist.list.php +++ b/interface/web/mail/list/mail_whitelist.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/spamfilter_blacklist.list.php b/interface/web/mail/list/spamfilter_blacklist.list.php index cdf5a0e536..b4be804fbe 100644 --- a/interface/web/mail/list/spamfilter_blacklist.list.php +++ b/interface/web/mail/list/spamfilter_blacklist.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/spamfilter_policy.list.php b/interface/web/mail/list/spamfilter_policy.list.php index eeb8746f0d..e7e0def682 100644 --- a/interface/web/mail/list/spamfilter_policy.list.php +++ b/interface/web/mail/list/spamfilter_policy.list.php @@ -65,7 +65,7 @@ $liste["item"][] = array( 'field' => "virus_lover", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('Y' => "
".$app->lng('Yes')."
", 'N' => "
".$app->lng('No')."
")); + 'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "spam_lover", @@ -75,7 +75,7 @@ $liste["item"][] = array( 'field' => "spam_lover", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('Y' => "
".$app->lng('Yes')."
", 'N' => "
".$app->lng('No')."
")); + 'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "banned_files_lover", @@ -85,7 +85,7 @@ $liste["item"][] = array( 'field' => "banned_files_lover", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('Y' => "
".$app->lng('Yes')."
", 'N' => "
".$app->lng('No')."
")); + 'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "bad_header_lover", @@ -95,7 +95,7 @@ $liste["item"][] = array( 'field' => "bad_header_lover", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('Y' => "
".$app->lng('Yes')."
", 'N' => "
".$app->lng('No')."
")); + 'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "
".$app->lng('no_txt')."
")); diff --git a/interface/web/mail/list/spamfilter_users.list.php b/interface/web/mail/list/spamfilter_users.list.php index efd74f68e9..e9d703b942 100644 --- a/interface/web/mail/list/spamfilter_users.list.php +++ b/interface/web/mail/list/spamfilter_users.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "local", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('Y' => "
".$app->lng('Yes')."
", 'N' => "
".$app->lng('No')."
")); + 'value' => array('Y' => "
".$app->lng('yes_txt')."
", 'N' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/spamfilter_whitelist.list.php b/interface/web/mail/list/spamfilter_whitelist.list.php index 3082329199..713187e008 100644 --- a/interface/web/mail/list/spamfilter_whitelist.list.php +++ b/interface/web/mail/list/spamfilter_whitelist.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/mail/list/xmpp_domain.list.php b/interface/web/mail/list/xmpp_domain.list.php index 21257e4283..be87ec735e 100644 --- a/interface/web/mail/list/xmpp_domain.list.php +++ b/interface/web/mail/list/xmpp_domain.list.php @@ -59,7 +59,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); if($_SESSION['s']['user']['typ'] == 'admin') { diff --git a/interface/web/sites/list/cron.list.php b/interface/web/sites/list/cron.list.php index 311af329c5..7679a2e1c1 100644 --- a/interface/web/sites/list/cron.list.php +++ b/interface/web/sites/list/cron.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/sites/list/database.list.php b/interface/web/sites/list/database.list.php index 22694aaa21..b4d1196b59 100644 --- a/interface/web/sites/list/database.list.php +++ b/interface/web/sites/list/database.list.php @@ -59,7 +59,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "remote_access", 'datatype' => "VARCHAR", @@ -68,7 +68,7 @@ $liste["item"][] = array( 'field' => "remote_access", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "type", 'datatype' => "VARCHAR", diff --git a/interface/web/sites/list/ftp_user.list.php b/interface/web/sites/list/ftp_user.list.php index 9742a24274..7657406382 100644 --- a/interface/web/sites/list/ftp_user.list.php +++ b/interface/web/sites/list/ftp_user.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/sites/list/shell_user.list.php b/interface/web/sites/list/shell_user.list.php index 61c774dee6..9ea244ed0b 100644 --- a/interface/web/sites/list/shell_user.list.php +++ b/interface/web/sites/list/shell_user.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/sites/list/web_childdomain.list.php b/interface/web/sites/list/web_childdomain.list.php index f938bee322..1e38b24a41 100644 --- a/interface/web/sites/list/web_childdomain.list.php +++ b/interface/web/sites/list/web_childdomain.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/sites/list/web_folder.list.php b/interface/web/sites/list/web_folder.list.php index af74d8e950..fce8cfd1ef 100644 --- a/interface/web/sites/list/web_folder.list.php +++ b/interface/web/sites/list/web_folder.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/sites/list/web_folder_user.list.php b/interface/web/sites/list/web_folder_user.list.php index 454e2c447f..c8f078a4be 100644 --- a/interface/web/sites/list/web_folder_user.list.php +++ b/interface/web/sites/list/web_folder_user.list.php @@ -57,7 +57,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "web_folder_id", diff --git a/interface/web/sites/list/web_vhost_domain.list.php b/interface/web/sites/list/web_vhost_domain.list.php index ddeaacc6e6..1d167a77bc 100644 --- a/interface/web/sites/list/web_vhost_domain.list.php +++ b/interface/web/sites/list/web_vhost_domain.list.php @@ -78,7 +78,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); if($_SESSION['s']['user']['typ'] == 'admin' && $vhostdomain_type == 'domain') { $liste["item"][] = array( 'field' => "sys_groupid", diff --git a/interface/web/sites/list/webdav_user.list.php b/interface/web/sites/list/webdav_user.list.php index 52a3ab9631..5d1aeec94a 100644 --- a/interface/web/sites/list/webdav_user.list.php +++ b/interface/web/sites/list/webdav_user.list.php @@ -55,7 +55,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
".$app->lng('Yes')."
", 'n' => "
".$app->lng('No')."
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "server_id", diff --git a/interface/web/vm/list/openvz_ip.list.php b/interface/web/vm/list/openvz_ip.list.php index 9184aa7faf..77a52dbcf9 100644 --- a/interface/web/vm/list/openvz_ip.list.php +++ b/interface/web/vm/list/openvz_ip.list.php @@ -91,7 +91,7 @@ $liste["item"][] = array( 'field' => "reserved", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); diff --git a/interface/web/vm/list/openvz_ostemplate.list.php b/interface/web/vm/list/openvz_ostemplate.list.php index cf490559fd..ca6132d827 100644 --- a/interface/web/vm/list/openvz_ostemplate.list.php +++ b/interface/web/vm/list/openvz_ostemplate.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "ostemplate_id", 'datatype' => "INTEGER", @@ -96,7 +96,7 @@ $liste["item"][] = array( 'field' => "allservers", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); diff --git a/interface/web/vm/list/openvz_template.list.php b/interface/web/vm/list/openvz_template.list.php index 6ba7faf400..e87314e98e 100644 --- a/interface/web/vm/list/openvz_template.list.php +++ b/interface/web/vm/list/openvz_template.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "template_name", diff --git a/interface/web/vm/list/openvz_vm.list.php b/interface/web/vm/list/openvz_vm.list.php index ad490edc4a..51e23b3ab2 100644 --- a/interface/web/vm/list/openvz_vm.list.php +++ b/interface/web/vm/list/openvz_vm.list.php @@ -54,7 +54,7 @@ $liste["item"][] = array( 'field' => "active", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('y' => "
Yes
", 'n' => "
No
")); + 'value' => array('y' => "
".$app->lng('yes_txt')."
", 'n' => "
".$app->lng('no_txt')."
")); $liste["item"][] = array( 'field' => "veid", 'datatype' => "VARCHAR", -- GitLab From 35a190769c20fa17b1c57bfae96107bd2c08e284 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Fri, 17 Jun 2016 13:00:54 +0200 Subject: [PATCH 032/313] Fixed Issue #3972 Invalid regular expression in helo_access --- install/tpl/helo_access.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/helo_access.master b/install/tpl/helo_access.master index 796c3ed52a..a0ca138738 100644 --- a/install/tpl/helo_access.master +++ b/install/tpl/helo_access.master @@ -2,7 +2,7 @@ # be sure to list your own hostname(s), domain(s) and IP address(es) here # Reject others identifying with this machine's hostnames and IP addresses -/^{myhostname}$/ REJECT +/^{$myhostname}$/ REJECT #/^((smtp|mx|mail)\.domain1\.com$/ REJECT #/^mail\.domain2\.com$/ REJECT -- GitLab From 37d53f6a386124bb17217ac40d28682dce331d53 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Fri, 17 Jun 2016 16:36:07 +0200 Subject: [PATCH 033/313] Removed helo check from template. --- install/tpl/helo_access.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/helo_access.master b/install/tpl/helo_access.master index a0ca138738..41f182e276 100644 --- a/install/tpl/helo_access.master +++ b/install/tpl/helo_access.master @@ -2,7 +2,7 @@ # be sure to list your own hostname(s), domain(s) and IP address(es) here # Reject others identifying with this machine's hostnames and IP addresses -/^{$myhostname}$/ REJECT +#/^{myhostname}$/ REJECT #/^((smtp|mx|mail)\.domain1\.com$/ REJECT #/^mail\.domain2\.com$/ REJECT -- GitLab From 768b3f3affbb059b6423e96d306590fc54f16cfd Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 17 Jun 2016 18:05:19 +0200 Subject: [PATCH 034/313] - interrupt scrolling on user input, fixed #3936 --- .../themes/default/assets/javascripts/ispconfig.js | 11 ++++++++--- interface/web/themes/default/templates/main.tpl.htm | 2 +- .../web/themes/default/templates/main_login.tpl.htm | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js index 21c8c1bb14..a2b9907aef 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.js @@ -618,9 +618,12 @@ $(document).on("change", function(event) { } }); +var $page = $('html, body'); + $(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) { e.preventDefault(); - $('html, body').animate({scrollTop: 0}, 1000); + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); + $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); var content_to_load = $(this).attr('data-load-content'); if(!content_to_load) return this; @@ -630,7 +633,8 @@ $(document).on('click', 'a[data-load-content],button[data-load-content]', functi $(document).on('click', 'a[data-capp],button[data-capp]', function(e) { e.preventDefault(); - $('html, body').animate({scrollTop: 0}, 1000); + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); + $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); var content_to_load = $(this).attr('data-capp'); if(!content_to_load) return this; @@ -640,7 +644,8 @@ $(document).on('click', 'a[data-capp],button[data-capp]', function(e) { $(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) { e.preventDefault(); - $('html, body').animate({scrollTop: 0}, 1000); + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); + $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); var $el = $(this); var act = $el.attr('data-form-action'); diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm index 058eec33ab..24a84c5065 100644 --- a/interface/web/themes/default/templates/main.tpl.htm +++ b/interface/web/themes/default/templates/main.tpl.htm @@ -84,7 +84,7 @@ - + diff --git a/interface/web/themes/default/templates/main_login.tpl.htm b/interface/web/themes/default/templates/main_login.tpl.htm index afcf4cf317..dd31363f3c 100644 --- a/interface/web/themes/default/templates/main_login.tpl.htm +++ b/interface/web/themes/default/templates/main_login.tpl.htm @@ -41,7 +41,7 @@ - + -- GitLab From 8445649af724acffd59e469a5646ee4cfe6912f0 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 17 Jun 2016 18:14:30 +0200 Subject: [PATCH 035/313] - prevent some clicks while ajax requests still running --- .../default/assets/javascripts/ispconfig.js | 80 +++++-------------- 1 file changed, 20 insertions(+), 60 deletions(-) diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js index a2b9907aef..a726d0a220 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.js @@ -23,11 +23,7 @@ var ISPConfig = { }, reportError: function(request) { - /* Error reporting is disabled by default as some browsers like safari - sometimes throw errors when a ajax request is delayed even if the - ajax request worked. */ - - /*alert(request);*/ + }, registerHook: function(name, callback) { @@ -142,55 +138,6 @@ var ISPConfig = { ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data }); }, - /* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */ - /*submitLoginForm: function(formname) { - //* Validate form. TODO: username and password with strip(); - var frm = document.getElementById(formname); - var userNameObj = frm.username; - if(userNameObj.value == ''){ - userNameObj.focus(); - return; - } - var passwordObj = frm.passwort; - if(passwordObj.value == ''){ - passwordObj.focus(); - return; - } - - $('#dummy_username').val(userNameObj.value); - $('#dummy_passwort').val(passwordObj.value); - $('#dummy_login_form').submit(); - - var submitFormObj = $.ajax({ - type: "POST", - url: "content.php", - data: $('#'+formname).serialize(), - dataType: "html", - beforeSend: function() { - ISPConfig.showLoadIndicator(); - }, - success: function(data, textStatus, jqXHR) { - if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) { - var parts = jqXHR.responseText.split(':'); - ISPConfig.loadContent(parts[1]); - } else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) { - // Go to the login page - document.location.href = 'index.php'; - } else { - $('#pageContent').html(jqXHR.responseText); - ISPConfig.onAfterContentLoad('content.php', $('#'+formname).serialize()); - ISPConfig.pageFormChanged = false; - } - ISPConfig.loadMenus(); - ISPConfig.hideLoadIndicator(); - }, - error: function() { - ISPConfig.hideLoadIndicator(); - ISPConfig.reportError('Ajax Request was not successful.110'); - } - }); - },*/ - submitForm: function(formname, target, confirmation) { var successMessage = arguments[3]; if(!confirmation) confirmation = false; @@ -320,11 +267,6 @@ var ISPConfig = { var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length); document.location.href = newUrl; } else { - //document.getElementById('pageContent').innerHTML = jqXHR.responseText; - //var reponse = $(jqXHR.responseText); - //var reponseScript = reponse.filter("script"); - //$.each(reponseScript, function(idx, val) { eval(val.text); } ); - $('#pageContent').html(jqXHR.responseText); ISPConfig.onAfterContentLoad(pagename, (params ? params : null)); ISPConfig.pageFormChanged = false; @@ -444,7 +386,10 @@ var ISPConfig = { }, changeTab: function(tab, target, force) { - if(ISPConfig.requestsRunning > 0) return false; + if(ISPConfig.requestsRunning > 0) { + console.log('tab change interrupted, request still running.'); + return false; + } document.pageForm.next_tab.value = tab; @@ -622,6 +567,11 @@ var $page = $('html, body'); $(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) { e.preventDefault(); + if(ISPConfig.requestsRunning > 0) { + console.log('preventing click because there is still a request running.'); + return; + } + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); @@ -633,6 +583,11 @@ $(document).on('click', 'a[data-load-content],button[data-load-content]', functi $(document).on('click', 'a[data-capp],button[data-capp]', function(e) { e.preventDefault(); + if(ISPConfig.requestsRunning > 0) { + console.log('preventing click because there is still a request running.'); + return; + } + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); @@ -644,6 +599,11 @@ $(document).on('click', 'a[data-capp],button[data-capp]', function(e) { $(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) { e.preventDefault(); + if(ISPConfig.requestsRunning > 0) { + console.log('preventing click because there is still a request running.'); + return; + } + $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); }); -- GitLab From 875504b968611925c406c586bdbf6c7715cc8141 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 22 Jun 2016 10:15:36 +0200 Subject: [PATCH 036/313] Removed version information from stable branch. --- install/sql/ispconfig3.sql | 2 +- install/tpl/config.inc.php.master | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index ec750ba125..eaf060a8a8 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -2482,7 +2482,7 @@ INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, -- Dumping data for table `sys_config` -- -INSERT INTO sys_config VALUES ('db','db_version','3.1b1'); +INSERT INTO sys_config VALUES ('db','db_version','3.1dev'); INSERT INTO sys_config VALUES ('interface','session_timeout','0'); SET FOREIGN_KEY_CHECKS = 1; diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master index 2ba18f3ed3..02a7b2f65c 100644 --- a/install/tpl/config.inc.php.master +++ b/install/tpl/config.inc.php.master @@ -56,7 +56,7 @@ $revision = str_replace(array('Revision:','$',' '), '', $svn_revision); //** Application define('ISPC_APP_TITLE', 'ISPConfig'); -define('ISPC_APP_VERSION', '3.1b1'); +define('ISPC_APP_VERSION', '3.1dev'); define('DEVSYSTEM', 0); -- GitLab From 9f824a7bb996b64731d7b4ee948c8bb52367fc85 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 11:25:34 +0200 Subject: [PATCH 037/313] - fixed bug preventing backups on mounted dir --- server/lib/classes/system.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 93cd524162..978a891b42 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -1803,7 +1803,9 @@ class system{ function mount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh'){ global $app, $conf; - + + if($this->is_mounted($backup_dir)) return true; + $mounted = true; if ( is_file($mount_cmd) && is_executable($mount_cmd) && -- GitLab From 2b3dfac5e54e56fa05f98cb00d1df42110d6b896 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 22 Jun 2016 15:00:35 +0200 Subject: [PATCH 038/313] CentOS 7.2 related fixes in installer and apache vhost template. --- install/dist/lib/centos72.lib.php | 40 ++++++++++++++++++++++++++++++ install/dist/lib/fedora.lib.php | 11 ++++++++ install/lib/install.lib.php | 2 +- install/lib/installer_base.lib.php | 13 +++++++--- server/conf/vhost.conf.master | 13 +++++++--- 5 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 install/dist/lib/centos72.lib.php diff --git a/install/dist/lib/centos72.lib.php b/install/dist/lib/centos72.lib.php new file mode 100644 index 0000000000..3dcd7494d3 --- /dev/null +++ b/install/dist/lib/centos72.lib.php @@ -0,0 +1,40 @@ + diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 11ce4200f0..f7e7fa331d 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -89,6 +89,9 @@ class installer_dist extends installer_base { //* mysql-virtual_relayrecipientmaps.cf $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf'); + + //* mysql-virtual_outgoing_bcc.cf + $this->process_postfix_config('mysql-virtual_outgoing_bcc.cf'); //* mysql-virtual_policy_greylist.cf $this->process_postfix_config('mysql-virtual_policy_greylist.cf'); @@ -179,6 +182,7 @@ class installer_dist extends installer_base { //if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases'); if(is_file('/var/lib/mailman/data/aliases')) unlink('/var/lib/mailman/data/aliases'); if(!is_link('/var/lib/mailman/data/aliases')) symlink('/etc/mailman/aliases', '/var/lib/mailman/data/aliases'); + if(!is_file('/etc/mailman/aliases')) touch('/etc/mailman/aliases'); exec('postalias /var/lib/mailman/data/aliases'); if(!is_file('/etc/mailman/virtual-mailman')) touch('/etc/mailman/virtual-mailman'); exec('postmap /etc/mailman/virtual-mailman'); @@ -491,6 +495,13 @@ class installer_dist extends installer_base { $content = str_replace('{hostname}', $conf['hostname'], $content); wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content); chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640); + + // for CentOS 7.2 only + $distname = get_distname(); + if($distname['confid'] == 'centos72') { + chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750); + chgrp($conf['amavis']['config_dir'].'/amavisd.conf', 'amavis'); + } // Adding the amavisd commands to the postfix configuration diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index f670261203..c19736ad90 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -296,7 +296,7 @@ function get_distname() { } elseif(stristr($content, 'CentOS Linux release 7.2')) { $distname = 'CentOS'; $distver = 'Unknown'; - $distid = 'centos70'; + $distid = 'centos72'; $distconfid = 'centos72'; $distbaseid = 'fedora'; swriteln("Operating System: CentOS 7.2\n"); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 49b0e3d0ea..4f13ff3a9d 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -171,14 +171,19 @@ class installer_base { if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true; if(is_installed('squid')) $conf['squid']['installed'] = true; if(is_installed('nginx')) $conf['nginx']['installed'] = true; - if(is_installed('iptables') && is_installed('ufw')) $conf['ufw']['installed'] = true; - if(is_installed('iptables') && is_installed('bastille-netfilter')) $conf['firewall']['installed'] = true; + if(is_installed('iptables') && is_installed('ufw')) { + $conf['ufw']['installed'] = true; + } elseif(is_installed('iptables')) { + $conf['firewall']['installed'] = true; + } if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true; if(is_installed('vzctl')) $conf['openvz']['installed'] = true; if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true; if(is_installed('spamassassin')) $conf['spamassassin']['installed'] = true; - if(is_installed('vlogger')) $conf['vlogger']['installed'] = true; - if(is_installed('cron')) $conf['cron']['installed'] = true; + // if(is_installed('vlogger')) $conf['vlogger']['installed'] = true; + // ISPConfig ships with vlogger, so it is always installed. + $conf['vlogger']['installed'] = true; + if(is_installed('cron') || is_installed('anacron')) $conf['cron']['installed'] = true; if ($conf['services']['web'] && (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")))) $this->ispconfig_interface_installed = true; } diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 62ef151081..bb2d71d7d5 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -350,15 +350,20 @@ Action php5-fcgi /php5-fcgi virtual Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} - FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1: -pass-header Authorization - - ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:/$1 - + FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1: -pass-header Authorization FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket -pass-header Authorization + + + ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:/$1 + + + ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix://|fcgi://localhost//$1 + + -- GitLab From a49635d0562bf5f94fa3fafae5754971aaddd95f Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 15:00:35 +0200 Subject: [PATCH 039/313] - fixed handling of added / removed alias and subdomains in letsencrypt - remove certificate renew config on domain deleting --- .../plugins-available/apache2_plugin.inc.php | 26 +++++++++++++++---- server/plugins-available/nginx_plugin.inc.php | 25 ++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 021078d430..73579c38a9 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -485,6 +485,8 @@ class apache2_plugin { if($this->action != 'insert') $this->action = 'update'; + $update_letsencrypt = false; + if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['type'] != 'vhostalias' && $data['new']['parent_domain_id'] > 0) { $old_parent_domain_id = intval($data['old']['parent_domain_id']); @@ -504,6 +506,7 @@ class apache2_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; + $update_letsencrypt = true; } // load the server configuration options @@ -1177,8 +1180,7 @@ class apache2_plugin { ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration || ($data['old']['domain'] != $data['new']['domain']) // we have domain update || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain - || ($data['new']['type'] == 'subdomain') // we have new or update on subdomain - || ($data['old']['type'] == 'alias' || $data['new']['type'] == 'alias') // we have new or update on aliasdomain + || $update_letsencrypt == true )) { // default values $temp_domains = array(); @@ -1230,13 +1232,14 @@ class apache2_plugin { $webroot = $data['new']['document_root']."/web"; //* check if we have already a Let's Encrypt cert - if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { + //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { + // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); $success = false; $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); if(is_executable($letsencrypt)) { - $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); + $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme <<< '1'"); } if(!$success) { // error issuing cert @@ -1248,7 +1251,7 @@ class apache2_plugin { /* Update also the master-DB of the Server-Farm */ $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']); } - } + //} //* check is been correctly created if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) { @@ -2102,6 +2105,19 @@ class apache2_plugin { //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); } + + // remove letsencrypt if it exists (renew will always fail otherwise) + + $domain = $data['old']['ssl_domain']; + if(!$domain) $domain = $data['old']['domain']; + if(substr($domain, 0, 2) === '*.') { + // wildcard domain not yet supported by letsencrypt! + $domain = substr($domain, 2); + } + //$crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem"; + //$key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem"; + $le_conf_file = '/etc/letsencrypt/renewal/' . $domain . '.conf'; + @rename('/etc/letsencrypt/renewal/' . $domain . '.conf', '/etc/letsencrypt/renewal/' . $domain . '.conf~backup'); } //* remove mountpoint from fstab diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index b2262b00d3..fa1f9134e9 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -333,6 +333,8 @@ class nginx_plugin { return 0; } + $update_letsencrypt = false; + if($this->action != 'insert') $this->action = 'update'; if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['type'] != 'vhostalias' && $data['new']['parent_domain_id'] > 0) { @@ -354,6 +356,7 @@ class nginx_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; + $update_letsencrypt = true; } // load the server configuration options @@ -1251,8 +1254,7 @@ class nginx_plugin { ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration || ($data['old']['domain'] != $data['new']['domain']) // we have domain update || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain - || ($data['new']['type'] == 'subdomain') // we have new or update on subdomain - || ($data['old']['type'] == 'alias' || $data['new']['type'] == 'alias') // we have new or update on alias domain + || $update_letsencrypt == true )) { // default values $temp_domains = array(); @@ -1309,13 +1311,14 @@ class nginx_plugin { $webroot = $data['new']['document_root']."/web"; //* check if we have already a Let's Encrypt cert - if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { + //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { + // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); $success = false; $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); if(is_executable($letsencrypt)) { - $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); + $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme <<< '1'"); } if(!$success) { // error issuing cert @@ -1327,7 +1330,7 @@ class nginx_plugin { /* Update also the master-DB of the Server-Farm */ $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']); } - } + //} //* check is been correctly created if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) { @@ -2124,6 +2127,18 @@ class nginx_plugin { //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); } + + // remove letsencrypt if it exists (renew will always fail otherwise) + $domain = $data['old']['ssl_domain']; + if(!$domain) $domain = $data['old']['domain']; + if(substr($domain, 0, 2) === '*.') { + // wildcard domain not yet supported by letsencrypt! + $domain = substr($domain, 2); + } + //$crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem"; + //$key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem"; + $le_conf_file = '/etc/letsencrypt/renewal/' . $domain . '.conf'; + @rename('/etc/letsencrypt/renewal/' . $domain . '.conf', '/etc/letsencrypt/renewal/' . $domain . '.conf~backup'); } //* remove mountpoint from fstab -- GitLab From 496602492ff2fce4cb0ce4f685af0738b8dcbb65 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 15:04:37 +0200 Subject: [PATCH 040/313] - update LE must be called on sub/alias deleting too --- server/plugins-available/apache2_plugin.inc.php | 8 ++++---- server/plugins-available/nginx_plugin.inc.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 73579c38a9..2019eb0000 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -36,6 +36,7 @@ class apache2_plugin { // private variables var $action = ''; var $ssl_certificate_changed = false; + var $update_letsencrypt = false; //* This function is called during ispconfig installation to determine // if a symlink shall be created for this plugin. @@ -485,8 +486,6 @@ class apache2_plugin { if($this->action != 'insert') $this->action = 'update'; - $update_letsencrypt = false; - if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['type'] != 'vhostalias' && $data['new']['parent_domain_id'] > 0) { $old_parent_domain_id = intval($data['old']['parent_domain_id']); @@ -506,7 +505,7 @@ class apache2_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; - $update_letsencrypt = true; + $this->update_letsencrypt = true; } // load the server configuration options @@ -1180,7 +1179,7 @@ class apache2_plugin { ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration || ($data['old']['domain'] != $data['new']['domain']) // we have domain update || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain - || $update_letsencrypt == true + || $this->update_letsencrypt == true )) { // default values $temp_domains = array(); @@ -2139,6 +2138,7 @@ class apache2_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; + $this->update_letsencrypt = true; // just run the update function $this->update($event_name, $data); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index fa1f9134e9..a8501fc49a 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -36,6 +36,7 @@ class nginx_plugin { // private variables var $action = ''; var $ssl_certificate_changed = false; + var $update_letsencrypt = false; //* This function is called during ispconfig installation to determine // if a symlink shall be created for this plugin. @@ -333,8 +334,6 @@ class nginx_plugin { return 0; } - $update_letsencrypt = false; - if($this->action != 'insert') $this->action = 'update'; if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['type'] != 'vhostalias' && $data['new']['parent_domain_id'] > 0) { @@ -356,7 +355,7 @@ class nginx_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; - $update_letsencrypt = true; + $this->update_letsencrypt = true; } // load the server configuration options @@ -1254,7 +1253,7 @@ class nginx_plugin { ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration || ($data['old']['domain'] != $data['new']['domain']) // we have domain update || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain - || $update_letsencrypt == true + || $this->update_letsencrypt == true )) { // default values $temp_domains = array(); @@ -2160,6 +2159,7 @@ class nginx_plugin { $data['new'] = $tmp; $data['old'] = $tmp; $this->action = 'update'; + $this->update_letsencrypt = true; // just run the update function $this->update($event_name, $data); -- GitLab From cae251836676c76eba12a5667aad868792caac23 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 15:11:10 +0200 Subject: [PATCH 041/313] - add non-interactive flag (expand cert, renew cert etc.) --- server/plugins-available/apache2_plugin.inc.php | 2 +- server/plugins-available/nginx_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 2019eb0000..c8aea78681 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1238,7 +1238,7 @@ class apache2_plugin { $success = false; $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); if(is_executable($letsencrypt)) { - $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme <<< '1'"); + $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); } if(!$success) { // error issuing cert diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index a8501fc49a..feac371046 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1317,7 +1317,7 @@ class nginx_plugin { $success = false; $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); if(is_executable($letsencrypt)) { - $success = $this->_exec($letsencrypt . " certonly --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme <<< '1'"); + $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); } if(!$success) { // error issuing cert -- GitLab From 611407eb7aed764fdf7875af0799bde34f49e81b Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 19:54:14 +0200 Subject: [PATCH 042/313] - moved lock file to front of file - disabled database logging of sql reconnect errors, fixed #3974 --- server/cron.php | 20 ++++++++++++++++ server/lib/classes/db_mysql.inc.php | 16 +++++++------ server/server.php | 37 +++++++++++++++-------------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/server/cron.php b/server/cron.php index c197da9516..e8253a0acd 100644 --- a/server/cron.php +++ b/server/cron.php @@ -30,6 +30,26 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"])); require SCRIPT_PATH."/lib/config.inc.php"; + +// Check whether another instance of this script is already running +if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock')) { + clearstatcache(); + $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock')); + if(preg_match('/^[0-9]+$/', $pid)) { + if(file_exists('/proc/' . $pid)) { + print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n"; + exit; + } + } + print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n"; +} + +// Set Lockfile +@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', getmypid()); + +if($conf['log_priority'] <= LOGLEVEL_DEBUG) print 'Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock' . "\n"; + + require SCRIPT_PATH."/lib/app.inc.php"; set_time_limit(0); diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index 7c46820120..64ba44ebae 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -87,12 +87,12 @@ class db extends mysqli if(!is_object($this->_iConnId) || mysqli_connect_error()) { $this->_iConnId = null; - $this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!'); + $this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!', '', true); return false; } if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) { $this->close(); - $this->_sqlerror('Datenbank nicht gefunden / Database not found'); + $this->_sqlerror('Datenbank nicht gefunden / Database not found', '', true); return false; } @@ -210,7 +210,7 @@ class db extends mysqli } if($try > 9) { - $this->_sqlerror('DB::query -> reconnect'); + $this->_sqlerror('DB::query -> reconnect', '', true); return false; } else { sleep(($try > 7 ? 5 : 1)); @@ -464,7 +464,7 @@ class db extends mysqli * * @access private */ - private function _sqlerror($sErrormsg = 'Unbekannter Fehler', $sAddMsg = '') { + private function _sqlerror($sErrormsg = 'Unbekannter Fehler', $sAddMsg = '', $bNoLog = false) { global $app, $conf; $mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error()); @@ -475,9 +475,11 @@ class db extends mysqli if($this->show_error_messages && $conf['demo_mode'] === false) { echo $sErrormsg . $sAddMsg; - } else if(is_object($app) && method_exists($app, 'log')) { - $app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN); - } + } elseif(is_object($app) && method_exists($app, 'log') && $bNoLog == false) { + $app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN); + } elseif(php_sapi_name() == 'cli') { + echo $sErrormsg . $sAddMsg; + } } public function affectedRows() { diff --git a/server/server.php b/server/server.php index 4479b147c5..689cb17490 100644 --- a/server/server.php +++ b/server/server.php @@ -29,6 +29,25 @@ define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"])); require SCRIPT_PATH."/lib/config.inc.php"; + +// Check whether another instance of this script is already running +if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')) { + clearstatcache(); + $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')); + if(preg_match('/^[0-9]+$/', $pid)) { + if(file_exists('/proc/' . $pid)) { + print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n"; + exit; + } + } + print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n"; +} + +// Set Lockfile +@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', getmypid()); + +if($conf['log_priority'] <= LOGLEVEL_DEBUG) print 'Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock' . "\n"; + require SCRIPT_PATH."/lib/app.inc.php"; $app->setCaller('server'); @@ -125,24 +144,6 @@ if ($app->dbmaster->connect_error == NULL) { unset($tmp); } - -// Check whether another instance of this script is already running -if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')) { - clearstatcache(); - $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')); - if(preg_match('/^[0-9]+$/', $pid)) { - if(file_exists('/proc/' . $pid)) { - $app->log('There is already an instance of server.php running with pid ' . $pid . '.', LOGLEVEL_DEBUG); - exit; - } - } - $app->log('There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.', LOGLEVEL_WARN); -} - -// Set Lockfile -@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', getmypid()); -$app->log('Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', LOGLEVEL_DEBUG); - /** Do we need to start the core-modules */ -- GitLab From bc042058634fcc2aaabf6d807510291b16a076ef Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 22 Jun 2016 19:56:59 +0200 Subject: [PATCH 043/313] - added missing lockfile removal from previous commit --- server/cron.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/cron.php b/server/cron.php index e8253a0acd..58d48ec9de 100644 --- a/server/cron.php +++ b/server/cron.php @@ -105,6 +105,10 @@ foreach($files as $f) { } unset($files); +// Remove lock +@unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock'); +$app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG); + die("finished.\n"); ?> -- GitLab From 312ab0fa613356697bb52048444db9997e909fcf Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 23 Jun 2016 11:47:04 +0200 Subject: [PATCH 044/313] - removed strict warning --- server/plugins-available/apache2_plugin.inc.php | 3 ++- server/plugins-available/nginx_plugin.inc.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index c8aea78681..01362f5f73 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1236,7 +1236,8 @@ class apache2_plugin { $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); $success = false; - $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); + $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')); + $letsencrypt = reset($letsencrypt); if(is_executable($letsencrypt)) { $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index feac371046..e65848797c 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1315,7 +1315,8 @@ class nginx_plugin { $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); $success = false; - $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) ); + $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')); + $letsencrypt = reset($letsencrypt); if(is_executable($letsencrypt)) { $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); } -- GitLab From 2be1de4e523cea741a000cd21acd166660d8b9c8 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 23 Jun 2016 17:57:39 +0200 Subject: [PATCH 045/313] Fix for an issue where plugins dont get loaded when logged in with "Login as". --- interface/web/login/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/web/login/index.php b/interface/web/login/index.php index a1da652ad3..2ecf4ac93d 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -217,6 +217,7 @@ if(count($_POST) > 0) { $_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default'; $_SESSION['s']['language'] = $user['language']; $_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme']; + if ($loginAs) $_SESSION['s']['plugin_cache'] = $_SESSION['s_old']['plugin_cache']; if(is_file(ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) { include_once ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php'; -- GitLab From f496e926e7aae5459acb93714dfc77dac64e0e73 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 23 Jun 2016 20:19:49 +0200 Subject: [PATCH 046/313] Fix for amavisd config permissions on CentOS 7.2 --- install/dist/lib/centos_base.lib.php | 8 +++++++- install/dist/lib/fedora.lib.php | 5 ++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/install/dist/lib/centos_base.lib.php b/install/dist/lib/centos_base.lib.php index 74ff8be41b..d6deb7e27a 100644 --- a/install/dist/lib/centos_base.lib.php +++ b/install/dist/lib/centos_base.lib.php @@ -33,7 +33,7 @@ class installer_centos extends installer_dist { protected $clamav_socket = '/tmp/clamd.socket'; public function configure_amavis() { - global $conf; + global $conf, $dist; // amavisd user config file $configfile = 'fedora_amavisd_conf'; @@ -50,6 +50,12 @@ class installer_centos extends installer_dist { $content = str_replace('/var/spool/amavisd/clamd.sock', $this->clamav_socket, $content); wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content); chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640); + + // for CentOS 7.2 only + if($dist['confid'] == 'centos72') { + chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750); + chgrp($conf['amavis']['config_dir'].'/amavisd.conf', 'amavis'); + } // Adding the amavisd commands to the postfix configuration diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index f7e7fa331d..4b6dcd38f2 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -480,7 +480,7 @@ class installer_dist extends installer_base { } public function configure_amavis() { - global $conf; + global $conf, $dist; // amavisd user config file $configfile = 'fedora_amavisd_conf'; @@ -497,8 +497,7 @@ class installer_dist extends installer_base { chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640); // for CentOS 7.2 only - $distname = get_distname(); - if($distname['confid'] == 'centos72') { + if($dist['confid'] == 'centos72') { chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750); chgrp($conf['amavis']['config_dir'].'/amavisd.conf', 'amavis'); } -- GitLab From cd14a1d379e76aa957ebe1220de8eae7bb090749 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 24 Jun 2016 11:47:18 +0200 Subject: [PATCH 047/313] Added missing quotation mark in search value. --- install/lib/installer_base.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 49b0e3d0ea..3bda9a2e8d 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1686,7 +1686,7 @@ Email Address []: if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true); if(is_file('/etc/suphp/suphp.conf')) { - replaceLine('/etc/suphp/suphp.conf', 'php=php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0); + replaceLine('/etc/suphp/suphp.conf', 'php="php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0); //replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0); replaceLine('/etc/suphp/suphp.conf', 'umask=0077', 'umask=0022', 0); } -- GitLab From 65ee3af0845f20cd3ae4a3d0c2ee3ce865f7fc7c Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Mon, 27 Jun 2016 17:52:02 +0200 Subject: [PATCH 048/313] Change file mode of backups that are made available for download to 0600. --- server/plugins-available/backup_plugin.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php index 3e4fad6cb4..7ae4660abb 100644 --- a/server/plugins-available/backup_plugin.inc.php +++ b/server/plugins-available/backup_plugin.inc.php @@ -87,6 +87,7 @@ class backup_plugin { if(file_exists($backup_dir.'/'.$backup['filename']) && file_exists($web['document_root'].'/backup/') && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) { copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']); chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']); + chmod($web['document_root'].'/backup/'.$backup['filename'],0600); $app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG); } } -- GitLab From dd0130670fe3cab4c7e2c1ab4f3bf0d2b2d512b0 Mon Sep 17 00:00:00 2001 From: Denny Bortfeldt Date: Tue, 28 Jun 2016 00:02:16 +0200 Subject: [PATCH 049/313] When uploading a logo which is smaller than the current ispconfig one, then the logo will be on the left side of the header. In my opinion it will look better when it's centered. You could vote about it ;) --- interface/web/themes/default/templates/main_login.tpl.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/themes/default/templates/main_login.tpl.htm b/interface/web/themes/default/templates/main_login.tpl.htm index afcf4cf317..61c400bb86 100644 --- a/interface/web/themes/default/templates/main_login.tpl.htm +++ b/interface/web/themes/default/templates/main_login.tpl.htm @@ -27,7 +27,7 @@
-
+
-- GitLab From 56a9c765e6409900ed3b9225be839bf6200260ae Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 29 Jun 2016 13:50:19 +0200 Subject: [PATCH 050/313] Replace Windows line breaks with Unix line breaks in custom mail filters. --- server/plugins-available/maildeliver_plugin.inc.php | 2 +- server/plugins-available/maildrop_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php index 35001a4cde..2c16601f50 100644 --- a/server/plugins-available/maildeliver_plugin.inc.php +++ b/server/plugins-available/maildeliver_plugin.inc.php @@ -132,7 +132,7 @@ class maildeliver_plugin { // Custom filters if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = ''; - $tpl->setVar('custom_mailfilter', $data["new"]["custom_mailfilter"]); + $tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"])); // Move junk $tpl->setVar('move_junk', $data["new"]["move_junk"]); diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php index 1ebb677e42..2fefa26cfc 100644 --- a/server/plugins-available/maildrop_plugin.inc.php +++ b/server/plugins-available/maildrop_plugin.inc.php @@ -211,7 +211,7 @@ class maildrop_plugin { $mailfilter_content .= file_get_contents($conf["rootpath"].'/conf/mailfilter_move_junk.master')."\n"; } } - $mailfilter_content .= $data["new"]["custom_mailfilter"]; + $mailfilter_content .= str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]); // Replace windows linebreaks in mailfilter file $mailfilter_content = str_replace("\r\n", "\n", $mailfilter_content); -- GitLab From 566c28a952bf361ba9a22d7c39d5c335f6956ab2 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 29 Jun 2016 17:42:36 +0200 Subject: [PATCH 051/313] Added "DATE" form type that works like the "DATETIME" type incl. date picker, just without time details. --- interface/lib/classes/tform.inc.php | 18 ++++++++++++++++++ interface/lib/classes/tform_base.inc.php | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php index 1376d7ded9..503bd24eb8 100644 --- a/interface/lib/classes/tform.inc.php +++ b/interface/lib/classes/tform.inc.php @@ -235,6 +235,24 @@ class tform extends tform_base { return $diffrec; } + + /** + * Generate HTML for DATE fields. + * + * @access private + * @param string $form_element Name of the form element. + * @param string $default_value Selected value for fields. + * @return string HTML + */ + function _getDateHTML($form_element, $default_value) + { + $_date = ($default_value && $default_value != '0000-00-00' ? strtotime($default_value) : false); + $_showdate = ($_date === false) ? false : true; + + $tmp_dt = strtr($this->dateformat,array('d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy', 'y' => 'yy')); + + return ''; + } /** diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 5adbdf7d68..0c9cda5f51 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -562,6 +562,18 @@ class tform_base { $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds); break; + case 'DATE': + if (strtotime($val) !== false) { + $dt_value = $val; + } elseif ( isset($field['default']) && (strtotime($field['default']) !== false) ) { + $dt_value = $field['default']; + } else { + $dt_value = 0; + } + + $new_record[$key] = $this->_getDateHTML($key, $dt_value); + break; + default: if(isset($record[$key])) { $new_record[$key] = htmlspecialchars($record[$key]); @@ -672,6 +684,12 @@ class tform_base { $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds); break; + + case 'DATE': + $dt_value = (isset($field['default'])) ? $field['default'] : 0; + + $new_record[$key] = $this->_getDateHTML($key, $dt_value); + break; default: $new_record[$key] = htmlspecialchars($field['default']); -- GitLab From ebcb3bc7b70ddc312e5274aafb5ed8f3fa63f6fe Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 29 Jun 2016 18:26:57 +0200 Subject: [PATCH 052/313] Fixed a session save issue. --- interface/lib/classes/session.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php index bef2a10378..f4a90beda9 100644 --- a/interface/lib/classes/session.inc.php +++ b/interface/lib/classes/session.inc.php @@ -93,8 +93,8 @@ class session { if (@$this->session_array['session_id'] == '') { - $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),'$session_data',?)"; - $this->db->query($sql, $session_id, ($this->permanent ? 'y' : 'n')); + $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),?,?)"; + $this->db->query($sql, $session_id, $session_data, ($this->permanent ? 'y' : 'n')); } else { $sql = "UPDATE sys_session SET last_updated = NOW(), session_data = ?" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = ?"; -- GitLab From be08cdebf7c631f0f851824bb0d7df69d6711bfa Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 30 Jun 2016 19:26:08 +0200 Subject: [PATCH 053/313] Fixed: Issue #3991 hailed users dont get removed correctly from /etc/passwd --- .../shelluser_jailkit_plugin.inc.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php index 5645953bdf..184a8ca69a 100755 --- a/server/plugins-available/shelluser_jailkit_plugin.inc.php +++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php @@ -245,13 +245,14 @@ class shelluser_jailkit_plugin { //exec('rm -rf '.$data['old']['dir'].$jailkit_chroot_userhome); $app->system->web_folder_protection($web['document_root'], false); + + $userid = intval($app->system->getuid($data['old']['username'])); + $command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; '; + $command .= 'userdel -f '.escapeshellcmd($data['old']['username']).' &> /dev/null'; + exec($command); + if(@is_dir($data['old']['dir'].$jailkit_chroot_userhome)) { - $userid = intval($app->system->getuid($data['old']['username'])); - $command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f'; - $command .= ' '.escapeshellcmd($data['old']['username']).' &> /dev/null'; - exec($command); - $this->_delete_homedir($data['old']['dir'].$jailkit_chroot_userhome,$userid,$data['old']['parent_domain_id']); $app->log("Jailkit Plugin -> delete chroot home:".$data['old']['dir'].$jailkit_chroot_userhome, LOGLEVEL_DEBUG); -- GitLab From 437887f7cc8482aaf9a641ffc08694e4bea91f1a Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 30 Jun 2016 19:34:32 +0200 Subject: [PATCH 054/313] Fixed #3196 --- server/plugins-available/shelluser_jailkit_plugin.inc.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php index 184a8ca69a..16dbcc7a67 100755 --- a/server/plugins-available/shelluser_jailkit_plugin.inc.php +++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php @@ -251,6 +251,9 @@ class shelluser_jailkit_plugin { $command .= 'userdel -f '.escapeshellcmd($data['old']['username']).' &> /dev/null'; exec($command); + // Remove the jailed user from passwd and shadow file inside the jail + $app->system->removeLine($data['old']['dir'].'/etc/passwd', $data['old']['username']); + $app->system->removeLine($data['old']['dir'].'/etc/shadow', $data['old']['username']); if(@is_dir($data['old']['dir'].$jailkit_chroot_userhome)) { $this->_delete_homedir($data['old']['dir'].$jailkit_chroot_userhome,$userid,$data['old']['parent_domain_id']); -- GitLab From da3c0c44e13c665034d5922678388e3ee52e2da6 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 1 Jul 2016 09:52:28 +0200 Subject: [PATCH 055/313] - fixed expert install mode and merged code, fixed #3990 --- install/install.php | 662 +++++++++++++------------------------------- 1 file changed, 194 insertions(+), 468 deletions(-) diff --git a/install/install.php b/install/install.php index 14c9815226..1e0899f02b 100644 --- a/install/install.php +++ b/install/install.php @@ -246,41 +246,99 @@ $conf['services']['firewall'] = false; $conf['services']['proxy'] = false; $conf['services']['xmpp'] = false; -if($install_mode == 'standard') { +//** Get Server ID +// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1'); +// Server ID is an autoInc value of the mysql database now +if($install_mode == 'expert' && strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') { + $conf['mysql']['master_slave_setup'] = 'y'; + + //** Get MySQL root credentials + $finished = false; + do { + $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); + $tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port'); + $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user'); + $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); + $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database'); + + //* Initialize the MySQL server connection + if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, $tmp_mysql_server_database, (int)$tmp_mysql_server_port)) { + $conf['mysql']['master_host'] = $tmp_mysql_server_host; + $conf['mysql']['master_port'] = $tmp_mysql_server_port; + $conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user; + $conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password; + $conf['mysql']['master_database'] = $tmp_mysql_server_database; + $finished = true; + } else { + swriteln($inst->lng('Unable to connect to mysql server').' '.mysqli_connect_error()); + } + } while ($finished == false); + unset($finished); + // initialize the connection to the master database + $inst->dbmaster = new db(); + if($inst->dbmaster->linkId) $inst->dbmaster->closeConn(); + $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]); + $inst->dbmaster->setDBName($conf['mysql']["master_database"]); + +} else { + // the master DB is the same then the slave DB $inst->dbmaster = $inst->db; - - //* Create the MySQL database - $inst->configure_database(); +} + +//* Create the mysql database +$inst->configure_database(); - //* Insert the Server record into the database - $inst->add_database_server_record(); +//* Check for Web-Server +if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) { + $conf['apache']['installed'] = $inst->force_configure_app('Apache', ($install_mode == 'expert')); + $conf['nginx']['installed'] = $inst->force_configure_app('nginx', ($install_mode == 'expert')); +} + +//* Configure Webserver - Apache or nginx +if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) { + $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server'); + if($http_server_to_use == 'apache'){ + $conf['nginx']['installed'] = false; + $conf['services']['file'] = true; + } else { + $conf['apache']['installed'] = false; + } +} + +//* Insert the Server record into the database +if($install_mode == 'expert') { + swriteln('Adding ISPConfig server record to database.'); + swriteln(''); +} +$inst->add_database_server_record(); + +if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') { //* Configure Postgrey - $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', false); + $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', ($install_mode == 'expert')); if($force) swriteln('Configuring Postgrey'); //* Configure Postfix - $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', false); + $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', ($install_mode == 'expert')); if($force) { swriteln('Configuring Postfix'); - $inst->configure_postfix(); $conf['services']['mail'] = true; + $inst->configure_postfix(); } if($conf['services']['mail']) { - //* Configure Mailman - $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', false); + $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', ($install_mode == 'expert')); if($force) { swriteln('Configuring Mailman'); $inst->configure_mailman(); - } + } //* Check for Dovecot and Courier if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) { - $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', false); - $conf['courier']['installed'] = $inst->force_configure_app('Courier', false); + $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert')); + $conf['courier']['installed'] = $inst->force_configure_app('Courier', ($install_mode == 'expert')); } //* Configure Mailserver - Dovecot or Courier if($conf['dovecot']['installed'] && $conf['courier']['installed']) { @@ -307,44 +365,58 @@ if($install_mode == 'standard') { } //* Configure Spamasassin - $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', false); + $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', ($install_mode == 'expert')); if($force) { swriteln('Configuring Spamassassin'); $inst->configure_spamassassin(); } - + //* Configure Amavis - $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', false); + $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', ($install_mode == 'expert')); if($force) { swriteln('Configuring Amavisd'); $inst->configure_amavis(); } //* Configure Getmail - $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', false); + $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert')); if($force) { swriteln('Configuring Getmail'); $inst->configure_getmail(); } + } else { + swriteln('[ERROR] Postfix not installed - skipping Mail'); + } +} + +//* Configure Jailkit +$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', ($install_mode == 'expert')); +if($force) { + swriteln('Configuring Jailkit'); + $inst->configure_jailkit(); +} - } else swriteln('[ERROR] Postfix not installed - skipping Mail'); +//* Configure Pureftpd +$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', ($install_mode == 'expert')); +if($force) { + swriteln('Configuring Pureftpd'); + $inst->configure_pureftpd(); +} +//** Configure DNS +if($install_mode == 'standard' || strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') { //* Check for DNS -// if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) { - if(!$conf['bind']['installed'] && !$conf['mydns']['installed']) { -// $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', false); - $conf['bind']['installed'] = $inst->force_configure_app('BIND', false); - $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', false); + if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) { + if($install_mode == 'expert') $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', ($install_mode == 'expert')); + $conf['bind']['installed'] = $inst->force_configure_app('BIND', ($install_mode == 'expert')); + $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', ($install_mode == 'expert')); } //* Configure PowerDNS -/* - if($conf['powerdns']['installed']) { + if($install_mode == 'expert' && $conf['powerdns']['installed']) { swriteln('Configuring PowerDNS'); $inst->configure_powerdns(); $conf['services']['dns'] = true; } -*/ - //* Configure Bind if($conf['bind']['installed']) { swriteln('Configuring BIND'); @@ -361,36 +433,9 @@ if($install_mode == 'standard') { $conf['services']['dns'] = true; } - //* Configure Jailkit - $force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', false); - if($force) { - swriteln('Configuring Jailkit'); - $inst->configure_jailkit(); - } - - //* Configure Pureftpd - $force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', false); - if($force) { - swriteln('Configuring Pureftpd'); - $inst->configure_pureftpd(); - } - - //* Check for Web-Server - if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) { - $conf['apache']['installed'] = $inst->force_configure_app('Apache', false); - $conf['nginx']['installed'] = $inst->force_configure_app('nginx', false); - } - - //* Configure Webserver - Apache or nginx - if($conf['apache']['installed'] && $conf['nginx']['installed']) { - $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server'); - if($http_server_to_use == 'apache'){ - $conf['nginx']['installed'] = false; - } else { - $conf['apache']['installed'] = false; - } - } +} +if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') { //* Configure Apache if($conf['apache']['installed']){ swriteln('Configuring Apache'); @@ -398,41 +443,42 @@ if($install_mode == 'standard') { $conf['services']['web'] = true; $conf['services']['file'] = true; //* Configure Vlogger - $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', false); + $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', ($install_mode == 'expert')); if($force) { swriteln('Configuring vlogger'); $inst->configure_vlogger(); } //* Configure squid /* - $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid'); + $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid', ($install_mode == 'expert')); if($force) { swriteln('Configuring Squid'); $inst->configure_squid(); $conf['services']['proxy'] = true; + if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null'); } */ } - //* Configure nginx if($conf['nginx']['installed']){ swriteln('Configuring nginx'); $inst->configure_nginx(); $conf['services']['web'] = true; } +} - //* Configure XMPP - $force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', false); - if($force) { - swriteln('Configuring Metronome XMPP Server'); - $inst->configure_xmpp(); - $conf['services']['xmpp'] = true; - } +//* Configure OpenVZ +$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', ($install_mode == 'expert')); +if($force) { + $conf['services']['vserver'] = true; + swriteln('Configuring OpenVZ'); +} +if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') { //* Check for Firewall if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) { - $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', false); - $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', false); + $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', ($install_mode == 'expert')); + $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', ($install_mode == 'expert')); } //* Configure Firewall - Ubuntu or Bastille if($conf['ufw']['installed'] && $conf['firewall']['installed']) { @@ -456,29 +502,49 @@ if($install_mode == 'standard') { $conf['services']['firewall'] = true; $conf['bastille']['installed'] = true; } +} - //* Configure Fail2ban - $force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', false); - if($force) { - swriteln('Configuring Fail2ban'); - $inst->configure_fail2ban(); - } +//* Configure XMPP +$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', ($install_mode == 'expert')); +if($force) { + swriteln('Configuring Metronome XMPP Server'); + $inst->configure_xmpp(); + $conf['services']['xmpp'] = true; +} - //* Configure OpenVZ - $force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', false); - if($force) { - $conf['services']['vserver'] = true; - swriteln('Configuring OpenVZ'); - } +//* Configure Fail2ban +$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', ($install_mode == 'expert')); +if($force) { + swriteln('Configuring Fail2ban'); + $inst->configure_fail2ban(); +} +if($conf['services']['web'] == true) { //** Configure apps vhost swriteln('Configuring Apps vhost'); $inst->configure_apps_vhost(); +} - //* Configure ISPConfig +//** Configure ISPConfig :-) +$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y'; +if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') { swriteln('Installing ISPConfig'); - //** Customize the port ISPConfig runs on + //** We want to check if the server is a module or cgi based php enabled server + //** TODO: Don't always ask for this somehow ? + /* + $fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no'); + + if($fast_cgi == 'yes') { + $alias = $inst->free_query('Script Alias', '/php/'); + $path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin'); + $conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path); + } else { + $conf['apache']['vhost_cgi_alias'] = ""; + } + */ + + //** Customise the port ISPConfig runs on $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port'); $conf['interface_password'] = $inst->free_query('Admin password', 'admin'); if($conf['interface_password'] != 'admin') { @@ -499,398 +565,58 @@ if($install_mode == 'standard') { if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') { $inst->make_ispconfig_ssl_cert(); } + $inst->install_ispconfig_interface = true; - $inst->install_ispconfig(); - - //* Configure DBServer - swriteln('Configuring DBServer'); - $inst->configure_dbserver(); - - //* Configure ISPConfig - if($conf['cron']['installed']) { - swriteln('Installing ISPConfig crontab'); - $inst->install_crontab(); - } else swriteln('[ERROR] Cron not found'); - - swriteln('Detect IP addresses'); - $inst->detect_ips(); - - swriteln('Restarting services ...'); - if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1'); - if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart')); - if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart')); - if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart')); - if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart')); - if($conf['courier']['installed'] == true){ - if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart')); - if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart')); - if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart')); - if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart')); - if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart')); - } - if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart')); - if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &'); - if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart')); - //* Reload is enough for nginx - if($conf['nginx']['installed'] == true){ - if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload')); - if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload')); - } - if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart')); - if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null'); - if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null'); - if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null'); - //if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script'])) system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null'); - if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null'); - if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null'); - if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null'); - -} else { //* expert mode - - //** Get Server ID - // $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1'); - // Server ID is an autoInc value of the mysql database now - if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') { - $conf['mysql']['master_slave_setup'] = 'y'; - - //** Get MySQL root credentials - $finished = false; - do { - $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); - $tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port'); - $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user'); - $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); - $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database'); - - //* Initialize the MySQL server connection - if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, $tmp_mysql_server_database, (int)$tmp_mysql_server_port)) { - $conf['mysql']['master_host'] = $tmp_mysql_server_host; - $conf['mysql']['master_port'] = $tmp_mysql_server_port; - $conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user; - $conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password; - $conf['mysql']['master_database'] = $tmp_mysql_server_database; - $finished = true; - } else { - swriteln($inst->lng('Unable to connect to mysql server').' '.mysqli_connect_error()); - } - } while ($finished == false); - unset($finished); - - // initialize the connection to the master database - $inst->dbmaster = new db(); - if($inst->dbmaster->linkId) $inst->dbmaster->closeConn(); - $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]); - $inst->dbmaster->setDBName($conf['mysql']["master_database"]); - - } else { - // the master DB is the same then the slave DB - $inst->dbmaster = $inst->db; - } - - //* Create the mysql database - $inst->configure_database(); - - //* Check for Web-Server - if($conf['apache']['installed'] != true && $conf['nginx']['installed'] != true) { - $conf['apache']['installed'] = $inst->force_configure_app('Apache'); - $conf['nginx']['installed'] = $inst->force_configure_app('nginx'); - } - //* Configure Webserver - Apache or nginx - if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) { - $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server'); - if($http_server_to_use == 'apache'){ - $conf['nginx']['installed'] = false; - $conf['services']['file'] = true; - } else { - $conf['apache']['installed'] = false; - } - } - - //* Insert the Server record into the database - swriteln('Adding ISPConfig server record to database.'); - swriteln(''); - $inst->add_database_server_record(); - - if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') { - - $conf['services']['mail'] = true; - - //* Configure Postgrey - $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey'); - if($force) swriteln('Configuring Postgrey'); - - //* Configure Postfix - $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix'); - if($force) { - swriteln('Configuring Postfix'); - $inst->configure_postfix(); - } - - //* Configure Mailman - $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman'); - if($force) { - swriteln('Configuring Mailman'); - $inst->configure_mailman(); - } - - //* Check for Dovecot and Courier - if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) { - $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot'); - $conf['courier']['installed'] = $inst->force_configure_app('Courier'); - } - //* Configure Mailserver - Dovecot or Courier - if($conf['dovecot']['installed'] && $conf['courier']['installed']) { - $mail_server_to_use = $inst->simple_query('Dovecot and Courier detected. Select server to use with ISPConfig:', array('dovecot', 'courier'), 'dovecot','mail_server'); - if($mail_server_to_use == 'dovecot'){ - $conf['courier']['installed'] = false; - } else { - $conf['dovecot']['installed'] = false; - } - } - //* Configure Dovecot - if($conf['dovecot']['installed']) { - swriteln('Configuring Dovecot'); - $inst->configure_dovecot(); - } - //* Configure Courier - if($conf['courier']['installed']) { - swriteln('Configuring Courier'); - $inst->configure_courier(); - swriteln('Configuring SASL'); - $inst->configure_saslauthd(); - swriteln('Configuring PAM'); - $inst->configure_pam(); - } - - //* Configure Spamasassin - $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin'); - if($force) { - swriteln('Configuring Spamassassin'); - $inst->configure_spamassassin(); - } - - //* Configure Amavis - $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd'); - if($force) { - swriteln('Configuring Amavisd'); - $inst->configure_amavis(); - } - - //* Configure Getmail - $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail'); - if($force) { - swriteln('Configuring Getmail'); - $inst->configure_getmail(); - } - - if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart')); - if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart')); - if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart')); - if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart')); - if($conf['courier']['installed'] == true){ - if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart')); - if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart')); - if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart')); - if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart')); - if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart')); - } - if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart')); - if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &'); - } - - //* Configure Jailkit - $force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit'); - if($force) { - swriteln('Configuring Jailkit'); - $inst->configure_jailkit(); - } - - //* Configure Pureftpd - $force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd'); - if($force) { - swriteln('Configuring Pureftpd'); - $inst->configure_pureftpd(); - } - - //** Configure DNS - if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') { - $conf['services']['dns'] = true; - - //* Check for DNS - if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) { - $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS'); - $conf['bind']['installed'] = $inst->force_configure_app('BIND'); - $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS'); - } - //* Configure PowerDNS - if($conf['powerdns']['installed']) { - swriteln('Configuring PowerDNS'); - $inst->configure_powerdns(); - $conf['services']['dns'] = true; - } - //* Configure Bind - if($conf['bind']['installed']) { - swriteln('Configuring BIND'); - $inst->configure_bind(); - $conf['services']['dns'] = true; - if(!is_installed('haveged')) { - swriteln("[INFO] haveged not detected - DNSSEC can fail"); - } - } - //* Configure MyDNS - if($conf['mydns']['installed']) { - swriteln('Configuring MyDNS'); - $inst->configure_mydns(); - $conf['services']['dns'] = true; - } - - } - - if(strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') { - $conf['services']['web'] = true; - - //* Configure Apache - if($conf['apache']['installed']){ - swriteln('Configuring Apache'); - $inst->configure_apache(); - $conf['services']['file'] = true; - //* Configure Vlogger - $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger'); - if($force) { - swriteln('Configuring vlogger'); - $inst->configure_vlogger(); - } - //* Configure squid -/* - $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid'); - if($force) { - swriteln('Configuring Squid'); - $inst->configure_squid(); - $conf['services']['proxy'] = true; - if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null'); - } -*/ - } - //* Configure nginx - if($conf['nginx']['installed']){ - swriteln('Configuring nginx'); - $inst->configure_nginx(); - } - } - - //* Configure OpenVZ - $force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ'); - if($force) { - $conf['services']['vserver'] = true; - swriteln('Configuring OpenVZ'); - } - - if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') { - //* Check for Firewall - if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) { - $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall'); - $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall'); - } - //* Configure Firewall - Ubuntu or Bastille - if($conf['ufw']['installed'] && $conf['firewall']['installed']) { - $firewall_to_use = $inst->simple_query('Ubuntu and Bastille Firewall detected. Select firewall to use with ISPConfig:', array('bastille', 'ubuntu'), 'bastille','firewall_server'); - if($firewall_to_use == 'bastille'){ - $conf['ufw']['installed'] = false; - } else { - $conf['firewall']['installed'] = false; - } - } - //* Configure Ubuntu Firewall - if($conf['ufw']['installed']){ - swriteln('Configuring Ubuntu Firewall'); - $inst->configure_ufw_firewall(); - $conf['services']['firewall'] = true; - } - //* Configure Bastille Firewall - if($conf['firewall']['installed']){ - swriteln('Configuring Bastille Firewall'); - $inst->configure_bastille_firewall(); - $conf['services']['firewall'] = true; - } - } - - //* Configure XMPP - $force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server'); - if($force) { - swriteln('Configuring Metronome XMPP Server'); - $inst->configure_xmpp(); - $conf['services']['xmpp'] = true; - } - - //** Configure ISPConfig :-) - $install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y'; - if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') { - swriteln('Installing ISPConfig'); - - //** We want to check if the server is a module or cgi based php enabled server - //** TODO: Don't always ask for this somehow ? - /* - $fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no'); - - if($fast_cgi == 'yes') { - $alias = $inst->free_query('Script Alias', '/php/'); - $path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin'); - $conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path); - } else { - $conf['apache']['vhost_cgi_alias'] = ""; - } - */ - - //** Customise the port ISPConfig runs on - $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port'); - $conf['interface_password'] = $inst->free_query('Admin password', 'admin'); - if($conf['interface_password'] != 'admin') { - $check = false; - do { - unset($temp_password); - $temp_password = $inst->free_query('Re-enter admin password', ''); - $check = @($temp_password == $conf['interface_password'])?true:false; - if(!$check) swriteln('Passwords do not match.'); - } while (!$check); - } - unset($check); - unset($temp_password); - if($conf['apache']['installed'] == true) $conf['apache']['vhost_port'] = $ispconfig_vhost_port; - if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port'] = $ispconfig_vhost_port; - unset($ispconfig_vhost_port); - - if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') { - $inst->make_ispconfig_ssl_cert(); - } - - $inst->install_ispconfig_interface = true; - - } else { - $inst->install_ispconfig_interface = false; - } +} else { + $inst->install_ispconfig_interface = false; +} - $inst->install_ispconfig(); +$inst->install_ispconfig(); - //* Configure DBServer - swriteln('Configuring DBServer'); - $inst->configure_dbserver(); +//* Configure DBServer +swriteln('Configuring DBServer'); +$inst->configure_dbserver(); - //* Configure ISPConfig +//* Configure ISPConfig +swriteln('Installing ISPConfig crontab'); +if($conf['cron']['installed']) { swriteln('Installing ISPConfig crontab'); $inst->install_crontab(); - if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart')); - //* Reload is enough for nginx - if($conf['nginx']['installed'] == true){ - if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload')); - if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload')); - } - - swriteln('Detect IP addresses'); - $inst->detect_ips(); - - +} else swriteln('[ERROR] Cron not found'); + +swriteln('Detect IP addresses'); +$inst->detect_ips(); + +swriteln('Restarting services ...'); +if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1'); +if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart')); +if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart')); +if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart')); +if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart')); +if($conf['courier']['installed'] == true){ + if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart')); + if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart')); + if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart')); + if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart')); + if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart')); +} +if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart')); +if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &'); +if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart')); +//* Reload is enough for nginx +if($conf['nginx']['installed'] == true){ + if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload')); + if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload')); +} +if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart')); +if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null'); +if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null'); +if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null'); +//if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script'])) system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null'); +if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null'); +if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null'); +if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null'); -} //* << $install_mode / 'Standard' or Genius $inst->create_mount_script(); -- GitLab From f9cfd80565bc062ffb6e23ebd2c5b57c8916ca91 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 1 Jul 2016 09:56:17 +0200 Subject: [PATCH 056/313] - fixed client welcome message, fixed #3993 --- interface/web/dashboard/templates/dashboard.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/dashboard/templates/dashboard.htm b/interface/web/dashboard/templates/dashboard.htm index 65ccc7eae9..7c8b46e2a2 100644 --- a/interface/web/dashboard/templates/dashboard.htm +++ b/interface/web/dashboard/templates/dashboard.htm @@ -1,5 +1,5 @@ -- GitLab From 33f68a7706452c727767af05905ee6e7934c14c6 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 1 Jul 2016 11:02:24 +0200 Subject: [PATCH 057/313] Load correct datetimeformat --- interface/lib/classes/remoting_lib.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php index 1299080156..e697810ce5 100644 --- a/interface/lib/classes/remoting_lib.inc.php +++ b/interface/lib/classes/remoting_lib.inc.php @@ -98,6 +98,7 @@ class remoting_lib extends tform_base { unset($form); $this->dateformat = $app->lng('conf_format_dateshort'); + $this->datetimeformat = $app->lng('conf_format_datetime'); return true; } -- GitLab From c7a80c18152ea150ee7910772685195f62fca4ba Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Sun, 3 Jul 2016 19:16:36 +0200 Subject: [PATCH 058/313] Fixed backup list link to website. Issue #4004 --- interface/web/sites/templates/backup_stats_list.htm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/web/sites/templates/backup_stats_list.htm b/interface/web/sites/templates/backup_stats_list.htm index 3dd0959d5a..2941608423 100644 --- a/interface/web/sites/templates/backup_stats_list.htm +++ b/interface/web/sites/templates/backup_stats_list.htm @@ -20,12 +20,12 @@ - {tmpl_var name="active"} - {tmpl_var name="domain"} - {tmpl_var name="server_id"} - {tmpl_var name="backup_interval"} / {tmpl_var name="backup_copies"} - {tmpl_var name="backup_copies_exists"} - {tmpl_var name="backup_size"} + {tmpl_var name="active"} + {tmpl_var name="domain"} + {tmpl_var name="server_id"} + {tmpl_var name="backup_interval"} / {tmpl_var name="backup_copies"} + {tmpl_var name="backup_copies_exists"} + {tmpl_var name="backup_size"} -- GitLab From 3768e3732b5b48e478b9007aaac33ab8dc13391e Mon Sep 17 00:00:00 2001 From: Moll Date: Mon, 4 Jul 2016 11:09:15 +0200 Subject: [PATCH 059/313] Removed none from subdomain / alias list --- server/plugins-available/apache2_plugin.inc.php | 2 +- server/plugins-available/nginx_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 01362f5f73..7aaac0002d 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1207,7 +1207,7 @@ class apache2_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && ! empty($aliasdomain['subdomain'])) { + if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain']) != "none" ) { $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; } } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index e65848797c..a3981520c9 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1281,7 +1281,7 @@ class nginx_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && ! empty($aliasdomain['subdomain'])) { + if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain']) != "none" ) { $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; } -- GitLab From 13aef587a38d03c96823a7b658f1c3d663aabe07 Mon Sep 17 00:00:00 2001 From: Moll Date: Mon, 4 Jul 2016 11:31:52 +0200 Subject: [PATCH 060/313] Set default env[PATH] and env[HOSTNAME] since it is cleared by default setting clear_env = yes in php-fpm --- server/conf/php_fpm_pool.conf.master | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master index 2ef6417c64..c0884acfe4 100644 --- a/server/conf/php_fpm_pool.conf.master +++ b/server/conf/php_fpm_pool.conf.master @@ -28,9 +28,11 @@ pm.max_requests = chdir = / +env[HOSTNAME] = $HOSTNAME env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp +env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin php_admin_value[open_basedir] = -- GitLab From 9d9c762a3eeab7ed1675130812140b49f9e37d63 Mon Sep 17 00:00:00 2001 From: Moll Date: Mon, 4 Jul 2016 15:27:27 +0200 Subject: [PATCH 061/313] Little bracket fix --- server/plugins-available/apache2_plugin.inc.php | 2 +- server/plugins-available/nginx_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 7aaac0002d..18219721b9 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1207,7 +1207,7 @@ class apache2_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain']) != "none" ) { + if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain'] != "none" )) { $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; } } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index a3981520c9..4bd5da5234 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1281,7 +1281,7 @@ class nginx_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain']) != "none" ) { + if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain'] != "none" )) { $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; } -- GitLab From 8c93e18d6e527e39c9cf58f53677c1c7d31286df Mon Sep 17 00:00:00 2001 From: Moll Date: Mon, 4 Jul 2016 15:32:09 +0200 Subject: [PATCH 062/313] Only if none there is no prefix else it's www --- server/plugins-available/apache2_plugin.inc.php | 4 ++-- server/plugins-available/nginx_plugin.inc.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 18219721b9..ec92e699bb 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1207,8 +1207,8 @@ class apache2_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain'] != "none" )) { - $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; + if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) { + $temp_domains[] = "www." . $aliasdomain['domain']; } } } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 4bd5da5234..9933aae618 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1281,8 +1281,8 @@ class nginx_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && (! empty($aliasdomain['subdomain']) && $aliasdomain['subdomain'] != "none" )) { - $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain']; + if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) { + $temp_domains[] = "www." . $aliasdomain['domain']; } foreach($sub_prefixes as $s) { -- GitLab From 644682dbac70a71834050552ae3e0a0fcfcb4121 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 08:38:32 +0200 Subject: [PATCH 063/313] Tooltips on several templates --- interface/web/admin/templates/server_ip_list.htm | 13 ++++++++----- interface/web/client/templates/clients_list.htm | 9 ++++++--- interface/web/client/templates/resellers_list.htm | 9 ++++++--- .../web/dns/templates/dns_soa_admin_list.htm | 15 +++++++++------ interface/web/dns/templates/dns_soa_edit.htm | 2 +- interface/web/dns/templates/dns_soa_list.htm | 15 +++++++++------ interface/web/mail/templates/mail_user_list.htm | 9 ++++++--- interface/web/sites/templates/cron_list.htm | 13 ++++++++----- .../web/sites/templates/database_admin_list.htm | 11 +++++++---- .../templates/web_vhost_domain_admin_list.htm | 11 +++++++---- .../web/sites/templates/web_vhost_domain_list.htm | 11 +++++++---- 11 files changed, 74 insertions(+), 44 deletions(-) diff --git a/interface/web/admin/templates/server_ip_list.htm b/interface/web/admin/templates/server_ip_list.htm index 373bc4c6da..f24e93dded 100644 --- a/interface/web/admin/templates/server_ip_list.htm +++ b/interface/web/admin/templates/server_ip_list.htm @@ -38,10 +38,10 @@ - {tmpl_var name="server_id"} - {tmpl_var name="client_id"} + {tmpl_var name="server_id"} + {tmpl_var name="client_id"} {tmpl_var name="ip_type"} - {tmpl_var name="ip_address"} + {tmpl_var name="ip_address"} {tmpl_var name="virtualhost"} {tmpl_var name="virtualhost_port"} @@ -62,5 +62,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm index e6b153bb99..9f6086d19d 100644 --- a/interface/web/client/templates/clients_list.htm +++ b/interface/web/client/templates/clients_list.htm @@ -47,7 +47,7 @@ {tmpl_var name="company_name"} {tmpl_var name="contact_name"} {tmpl_var name="customer_no"} - {tmpl_var name="username"} + {tmpl_var name="username"} {tmpl_var name="city"} {tmpl_var name="country"} {tmpl_var name="validation_status"} @@ -82,5 +82,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm index 9538e71086..49ef5164f4 100644 --- a/interface/web/client/templates/resellers_list.htm +++ b/interface/web/client/templates/resellers_list.htm @@ -45,7 +45,7 @@ {tmpl_var name="company_name"} {tmpl_var name="contact_name"} {tmpl_var name="customer_no"} - {tmpl_var name="username"} + {tmpl_var name="username"} {tmpl_var name="city"} {tmpl_var name="country"} @@ -67,5 +67,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm index 0f14534c53..b2b6d27917 100644 --- a/interface/web/dns/templates/dns_soa_admin_list.htm +++ b/interface/web/dns/templates/dns_soa_admin_list.htm @@ -59,10 +59,10 @@ {tmpl_var name="active"} {tmpl_var name="sys_groupid"} - {tmpl_var name="server_id"} - {tmpl_var name="origin"} - {tmpl_var name="ns"} - {tmpl_var name="mbox"} + {tmpl_var name="server_id"} + {tmpl_var name="origin"} + {tmpl_var name="ns"} + {tmpl_var name="mbox"} @@ -81,5 +81,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm index be2e7fa831..f35a7e7a3a 100644 --- a/interface/web/dns/templates/dns_soa_edit.htm +++ b/interface/web/dns/templates/dns_soa_edit.htm @@ -170,4 +170,4 @@ searchFieldWatermark: '', resultBoxPosition: '' }); - + \ No newline at end of file diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm index 5162119900..c7b9e46c0f 100644 --- a/interface/web/dns/templates/dns_soa_list.htm +++ b/interface/web/dns/templates/dns_soa_list.htm @@ -56,10 +56,10 @@ {tmpl_var name="active"} - {tmpl_var name="server_id"} - {tmpl_var name="origin"} - {tmpl_var name="ns"} - {tmpl_var name="mbox"} + {tmpl_var name="server_id"} + {tmpl_var name="origin"} + {tmpl_var name="ns"} + {tmpl_var name="mbox"} @@ -78,5 +78,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm index 0ac26e105a..5ec9dfed63 100644 --- a/interface/web/mail/templates/mail_user_list.htm +++ b/interface/web/mail/templates/mail_user_list.htm @@ -59,7 +59,7 @@ - {tmpl_var name="email"} + {tmpl_var name="email"} {tmpl_var name="login"} @@ -92,5 +92,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/sites/templates/cron_list.htm b/interface/web/sites/templates/cron_list.htm index 77c89eedf8..58a44cc125 100644 --- a/interface/web/sites/templates/cron_list.htm +++ b/interface/web/sites/templates/cron_list.htm @@ -46,14 +46,14 @@ {tmpl_var name="active"} - {tmpl_var name="server_id"} - {tmpl_var name="parent_domain_id"} + {tmpl_var name="server_id"} + {tmpl_var name="parent_domain_id"} {tmpl_var name="run_min"} {tmpl_var name="run_hour"} {tmpl_var name="run_mday"} {tmpl_var name="run_month"} {tmpl_var name="run_wday"} - {tmpl_var name="command"} + {tmpl_var name="command"}
@@ -74,5 +74,8 @@
- - \ No newline at end of file + diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm index 8203fa1096..d377ff5ea9 100644 --- a/interface/web/sites/templates/database_admin_list.htm +++ b/interface/web/sites/templates/database_admin_list.htm @@ -46,8 +46,8 @@ {tmpl_var name="remote_access"} {tmpl_var name="type"} {tmpl_var name="sys_groupid"} - {tmpl_var name="server_id"} - {tmpl_var name="parent_domain_id"} + {tmpl_var name="server_id"} + {tmpl_var name="parent_domain_id"} {tmpl_var name="database_user_id"} {tmpl_var name="database_name"} @@ -72,5 +72,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm index d613d6e921..64ecd9e9ad 100644 --- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm +++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm @@ -42,8 +42,8 @@ {tmpl_var name="active"} {tmpl_var name="sys_groupid"} {tmpl_var name="server_id"} - {tmpl_var name="parent_domain_id"} - {tmpl_var name="domain"} + {tmpl_var name="parent_domain_id"} + {tmpl_var name="domain"} @@ -64,5 +64,8 @@
- - \ No newline at end of file + \ No newline at end of file diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm index b81227870d..19a1192699 100644 --- a/interface/web/sites/templates/web_vhost_domain_list.htm +++ b/interface/web/sites/templates/web_vhost_domain_list.htm @@ -55,9 +55,9 @@ {tmpl_var name="domain_id"} {tmpl_var name="active"} - {tmpl_var name="server_id"} + {tmpl_var name="server_id"} {tmpl_var name="parent_domain_id"} - {tmpl_var name="domain"} + {tmpl_var name="domain"} @@ -78,5 +78,8 @@
- - \ No newline at end of file + \ No newline at end of file -- GitLab From fbfdc438eaf2a70d5fefda74c919edc76e82d0fd Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 10:00:30 +0200 Subject: [PATCH 064/313] Fixed IPV6 regex https://git.ispconfig.org/ispconfig/ispconfig3/issues/4002 --- interface/lib/classes/functions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 45c8d9b44d..03bd11d390 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -190,7 +190,7 @@ class functions { $regex = "/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/"; } else { // IPv6 - $regex = "/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i"; + $regex = "/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/"; } $server_by_id = array(); -- GitLab From 6ffe3ce6675b4999543538f5b6cca88883d6335b Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 10:33:26 +0200 Subject: [PATCH 065/313] Tooltips javascript made global fixes #3995 --- interface/web/admin/templates/server_ip_list.htm | 5 ----- interface/web/client/templates/clients_list.htm | 5 ----- interface/web/client/templates/resellers_list.htm | 5 ----- interface/web/dns/templates/dns_soa_admin_list.htm | 5 ----- interface/web/dns/templates/dns_soa_list.htm | 5 ----- interface/web/js/js.d/jquery.tooltip.js | 3 +++ interface/web/mail/templates/mail_user_list.htm | 5 ----- interface/web/sites/templates/cron_list.htm | 5 ----- interface/web/sites/templates/database_admin_list.htm | 5 ----- interface/web/sites/templates/database_list.htm | 8 +++----- .../web/sites/templates/web_vhost_domain_admin_list.htm | 5 ----- interface/web/sites/templates/web_vhost_domain_list.htm | 5 ----- 12 files changed, 6 insertions(+), 55 deletions(-) create mode 100644 interface/web/js/js.d/jquery.tooltip.js diff --git a/interface/web/admin/templates/server_ip_list.htm b/interface/web/admin/templates/server_ip_list.htm index f24e93dded..892c263f20 100644 --- a/interface/web/admin/templates/server_ip_list.htm +++ b/interface/web/admin/templates/server_ip_list.htm @@ -62,8 +62,3 @@
- \ No newline at end of file diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm index 9f6086d19d..644c770d34 100644 --- a/interface/web/client/templates/clients_list.htm +++ b/interface/web/client/templates/clients_list.htm @@ -82,8 +82,3 @@ - \ No newline at end of file diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm index 49ef5164f4..50a9ec239c 100644 --- a/interface/web/client/templates/resellers_list.htm +++ b/interface/web/client/templates/resellers_list.htm @@ -67,8 +67,3 @@ - \ No newline at end of file diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm index b2b6d27917..fbdc0398ed 100644 --- a/interface/web/dns/templates/dns_soa_admin_list.htm +++ b/interface/web/dns/templates/dns_soa_admin_list.htm @@ -81,8 +81,3 @@ - \ No newline at end of file diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm index c7b9e46c0f..22cd19484e 100644 --- a/interface/web/dns/templates/dns_soa_list.htm +++ b/interface/web/dns/templates/dns_soa_list.htm @@ -78,8 +78,3 @@ - \ No newline at end of file diff --git a/interface/web/js/js.d/jquery.tooltip.js b/interface/web/js/js.d/jquery.tooltip.js new file mode 100644 index 0000000000..e22dc9e40f --- /dev/null +++ b/interface/web/js/js.d/jquery.tooltip.js @@ -0,0 +1,3 @@ +$(document).hover(function(){ + $('[data-toggle="tooltip"]').tooltip(); +}); \ No newline at end of file diff --git a/interface/web/mail/templates/mail_user_list.htm b/interface/web/mail/templates/mail_user_list.htm index 5ec9dfed63..4e2fedd50c 100644 --- a/interface/web/mail/templates/mail_user_list.htm +++ b/interface/web/mail/templates/mail_user_list.htm @@ -92,8 +92,3 @@ - \ No newline at end of file diff --git a/interface/web/sites/templates/cron_list.htm b/interface/web/sites/templates/cron_list.htm index 58a44cc125..b38a6224a5 100644 --- a/interface/web/sites/templates/cron_list.htm +++ b/interface/web/sites/templates/cron_list.htm @@ -74,8 +74,3 @@ - diff --git a/interface/web/sites/templates/database_admin_list.htm b/interface/web/sites/templates/database_admin_list.htm index d377ff5ea9..efec228556 100644 --- a/interface/web/sites/templates/database_admin_list.htm +++ b/interface/web/sites/templates/database_admin_list.htm @@ -72,8 +72,3 @@ - \ No newline at end of file diff --git a/interface/web/sites/templates/database_list.htm b/interface/web/sites/templates/database_list.htm index 6aeb8518f8..4d9f91a7c1 100644 --- a/interface/web/sites/templates/database_list.htm +++ b/interface/web/sites/templates/database_list.htm @@ -60,9 +60,9 @@ {tmpl_var name="active"} {tmpl_var name="remote_access"} {tmpl_var name="type"} - {tmpl_var name="server_id"} - {tmpl_var name="parent_domain_id"} - {tmpl_var name="database_user_id"} + {tmpl_var name="server_id"} + {tmpl_var name="parent_domain_id"} + {tmpl_var name="database_user_id"} {tmpl_var name="database_name"} @@ -86,5 +86,3 @@ - - \ No newline at end of file diff --git a/interface/web/sites/templates/web_vhost_domain_admin_list.htm b/interface/web/sites/templates/web_vhost_domain_admin_list.htm index 64ecd9e9ad..6f0e8f39ca 100644 --- a/interface/web/sites/templates/web_vhost_domain_admin_list.htm +++ b/interface/web/sites/templates/web_vhost_domain_admin_list.htm @@ -64,8 +64,3 @@ - \ No newline at end of file diff --git a/interface/web/sites/templates/web_vhost_domain_list.htm b/interface/web/sites/templates/web_vhost_domain_list.htm index 19a1192699..1ece7aca9a 100644 --- a/interface/web/sites/templates/web_vhost_domain_list.htm +++ b/interface/web/sites/templates/web_vhost_domain_list.htm @@ -78,8 +78,3 @@ - \ No newline at end of file -- GitLab From d75040c9027195bd6a80ad67aea1eb0a792c5a18 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 11:13:21 +0200 Subject: [PATCH 066/313] Move tooltip js to global javascript library --- .gitignore | 1 + interface/web/js/js.d/jquery.tooltip.js | 3 --- interface/web/themes/default/assets/javascripts/ispconfig.js | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 .gitignore delete mode 100644 interface/web/js/js.d/jquery.tooltip.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..e43b0f9889 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/interface/web/js/js.d/jquery.tooltip.js b/interface/web/js/js.d/jquery.tooltip.js deleted file mode 100644 index e22dc9e40f..0000000000 --- a/interface/web/js/js.d/jquery.tooltip.js +++ /dev/null @@ -1,3 +0,0 @@ -$(document).hover(function(){ - $('[data-toggle="tooltip"]').tooltip(); -}); \ No newline at end of file diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js index a726d0a220..d791b19cba 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.js @@ -134,6 +134,8 @@ var ISPConfig = { 'fontAwesome': true, 'autoclose': true }); + $('[data-toggle="tooltip"]').tooltip({ + }); ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data }); }, -- GitLab From 6b42bfd0a14c5276c498da1031b19feb312c998e Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 12:53:21 +0200 Subject: [PATCH 067/313] Forgot one template for tooltips as mentioned in: https://git.ispconfig.org/ispconfig/ispconfig3/issues/3995 --- interface/web/dns/templates/dns_a_list.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm index 1f9d125152..b8d57401bb 100644 --- a/interface/web/dns/templates/dns_a_list.htm +++ b/interface/web/dns/templates/dns_a_list.htm @@ -69,8 +69,8 @@ {tmpl_var name="active"} {tmpl_var name="type"} - {tmpl_var name="name"} - {tmpl_var name="data"} + {tmpl_var name="name"} + {tmpl_var name="data"} {tmpl_var name="aux"} {tmpl_var name="ttl"} -- GitLab From e8275798cdb0e05b71e059d6167a08062162e6f2 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 5 Jul 2016 17:04:48 +0200 Subject: [PATCH 068/313] Missing glyphicon fonts (fixes #3981, #3886) --- .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 ++++++++++++++++++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes 4 files changed, 229 insertions(+) create mode 100644 interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.eot create mode 100644 interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg create mode 100644 interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.ttf create mode 100644 interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.woff diff --git a/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.eot b/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg b/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000..25691af8f1 --- /dev/null +++ b/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.ttf b/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.woff b/interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 mX4Rts Date: Wed, 6 Jul 2016 16:29:10 +0200 Subject: [PATCH 069/313] Fixed issue in SQL lib. --- interface/lib/classes/db_mysql.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php index c7105ec323..c74e6e0e9c 100644 --- a/interface/lib/classes/db_mysql.inc.php +++ b/interface/lib/classes/db_mysql.inc.php @@ -563,7 +563,7 @@ class db extends mysqli } $query = 'INSERT INTO ?? (' . $k_query . ') VALUES (' . $v_query . ')'; - return $this->query($query, true, $params + $v_params); + return $this->query($query, true, array_merge($params, $v_params)); } public function diffrec($record_old, $record_new) { -- GitLab From e37c4206de73fea71f0d6e1fd6b47befa81f580c Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 6 Jul 2016 16:29:40 +0200 Subject: [PATCH 070/313] Fixed permission issue of bin directory in on latest Debian in chroot jails. --- server/scripts/create_jailkit_chroot.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/scripts/create_jailkit_chroot.sh b/server/scripts/create_jailkit_chroot.sh index 6ffa889cdb..cc39b6e4cf 100755 --- a/server/scripts/create_jailkit_chroot.sh +++ b/server/scripts/create_jailkit_chroot.sh @@ -30,6 +30,9 @@ then fi chmod a+rwx $CHROOT_HOMEDIR/tmp +## Fix permissions of the root firectory +chmod g-w $CHROOT_HOMEDIR/bin + # mysql needs the socket in the chrooted environment mkdir $CHROOT_HOMEDIR/var -- GitLab From 7827db364a0de419f678301445421108574c3d37 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 09:03:43 +0200 Subject: [PATCH 071/313] vhost quota not correctly pointing to document root (DF -T) fixes #3984 --- server/plugins-available/apache2_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index ec92e699bb..e3b8bfe695 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,7 +884,7 @@ class apache2_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T " . $data['new']['document_root'] . "|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; -- GitLab From 3dfce62636b90575495022d0f55da931d8ddd10d Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 09:06:17 +0200 Subject: [PATCH 072/313] Revert "vhost quota not correctly pointing to document root (DF -T) fixes #3984" This reverts commit 7827db364a0de419f678301445421108574c3d37 --- server/plugins-available/apache2_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index e3b8bfe695..ec92e699bb 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,7 +884,7 @@ class apache2_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T " . $data['new']['document_root'] . "|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; -- GitLab From a481a62a13c241df0b3269f7f915789f4451d51b Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 09:09:33 +0200 Subject: [PATCH 073/313] vhost quota not correctly pointing to document root (DF -T) (fixes #3984) --- server/plugins-available/apache2_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index ec92e699bb..e3b8bfe695 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,7 +884,7 @@ class apache2_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T " . $data['new']['document_root'] . "|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; -- GitLab From c959635e7c473615bad57186e310626debca8d80 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 09:32:22 +0200 Subject: [PATCH 074/313] Tooltips on used percentage within Dashboard --- interface/web/dashboard/dashlets/templates/databasequota.htm | 2 +- interface/web/dashboard/dashlets/templates/limits.htm | 2 +- interface/web/dashboard/dashlets/templates/mailquota.htm | 2 +- interface/web/dashboard/dashlets/templates/quota.htm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/web/dashboard/dashlets/templates/databasequota.htm b/interface/web/dashboard/dashlets/templates/databasequota.htm index 828e344a28..df36f28a13 100644 --- a/interface/web/dashboard/dashlets/templates/databasequota.htm +++ b/interface/web/dashboard/dashlets/templates/databasequota.htm @@ -16,7 +16,7 @@ {tmpl_var name='database_quota'}

-
+
{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'}
diff --git a/interface/web/dashboard/dashlets/templates/limits.htm b/interface/web/dashboard/dashlets/templates/limits.htm index 145d54a342..cc98f78e8c 100644 --- a/interface/web/dashboard/dashlets/templates/limits.htm +++ b/interface/web/dashboard/dashlets/templates/limits.htm @@ -14,7 +14,7 @@ {tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}
-
+
{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}
diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm index 3c3bd2c62b..5ad01d6865 100644 --- a/interface/web/dashboard/dashlets/templates/mailquota.htm +++ b/interface/web/dashboard/dashlets/templates/mailquota.htm @@ -18,7 +18,7 @@ {tmpl_var name='quota'}
-
+
{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'}
diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm index 09895a69b6..4152ee074d 100644 --- a/interface/web/dashboard/dashlets/templates/quota.htm +++ b/interface/web/dashboard/dashlets/templates/quota.htm @@ -18,7 +18,7 @@ {tmpl_var name='hard'}
-
+
{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'}
-- GitLab From f1193b43f4c9fd132741d30f03f0b35841011989 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 10:21:38 +0200 Subject: [PATCH 075/313] Database quota fix % lost in change --- interface/web/dashboard/dashlets/templates/databasequota.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/dashboard/dashlets/templates/databasequota.htm b/interface/web/dashboard/dashlets/templates/databasequota.htm index df36f28a13..46db3cc6b8 100644 --- a/interface/web/dashboard/dashlets/templates/databasequota.htm +++ b/interface/web/dashboard/dashlets/templates/databasequota.htm @@ -16,7 +16,7 @@ {tmpl_var name='database_quota'}
-
+
{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'}
-- GitLab From ff26b4507aed2e81ab30180a784cacf4f3e1000c Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 10:26:54 +0200 Subject: [PATCH 076/313] cron_plugin.inc.php $document root fix for quota --- server/plugins-available/cron_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php index b54e9711be..00ea6d32b6 100644 --- a/server/plugins-available/cron_plugin.inc.php +++ b/server/plugins-available/cron_plugin.inc.php @@ -136,7 +136,7 @@ class cron_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T " . $parent_domain["document_root"] . "|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; -- GitLab From e8dda462f3b02628b4d878ed2c133f1f04d26a50 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 11:25:42 +0200 Subject: [PATCH 077/313] escapeshellarg document root for security reasons (fixes #3984) --- server/plugins-available/apache2_plugin.inc.php | 2 +- server/plugins-available/cron_plugin.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index e3b8bfe695..f4b6ab7bca 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,7 +884,7 @@ class apache2_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T " . $data['new']['document_root'] . "|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php index 00ea6d32b6..c7109a562e 100644 --- a/server/plugins-available/cron_plugin.inc.php +++ b/server/plugins-available/cron_plugin.inc.php @@ -136,7 +136,7 @@ class cron_plugin { } // get the primitive folder for document_root and the filesystem, will need it later. - $df_output=explode(" ", exec("df -T " . $parent_domain["document_root"] . "|awk 'END{print \$2,\$NF}'")); + $df_output=explode(" ", exec("df -T " . escapeshellarg($parent_domain["document_root"]) . "|awk 'END{print \$2,\$NF}'")); $file_system = $df_output[0]; $primitive_root = $df_output[1]; -- GitLab From 505fc4feb44bf9606f6ecc1f7bae897cf61446a3 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 11:43:19 +0200 Subject: [PATCH 078/313] several updates on dutch language files --- interface/web/sites/lib/lang/nl.lng | 16 +++---- interface/web/sites/lib/lang/nl_aps.lng | 40 ++++++++--------- .../sites/lib/lang/nl_aps_instances_list.lng | 16 +++---- .../sites/lib/lang/nl_aps_packages_list.lng | 12 ++--- .../lib/lang/nl_aps_update_packagelist.lng | 8 ++-- interface/web/sites/lib/lang/nl_database.lng | 10 ++--- .../web/sites/lib/lang/nl_database_user.lng | 44 +++++++++---------- .../lib/lang/nl_database_user_admin_list.lng | 8 ++-- .../sites/lib/lang/nl_database_user_list.lng | 6 +-- .../lib/lang/nl_user_quota_stats_list.lng | 4 +- .../web/sites/lib/lang/nl_web_domain.lng | 6 +-- 11 files changed, 85 insertions(+), 85 deletions(-) diff --git a/interface/web/sites/lib/lang/nl.lng b/interface/web/sites/lib/lang/nl.lng index 4772673ddf..cbde78ed45 100644 --- a/interface/web/sites/lib/lang/nl.lng +++ b/interface/web/sites/lib/lang/nl.lng @@ -12,24 +12,24 @@ $wb['Folder users'] = 'Protected Folder Users'; $wb['Command Line'] = 'Command Line'; $wb['Shell-User'] = 'Shell-gebruiker'; $wb['Cron Jobs'] = 'Cron Jobs'; -$wb['Statistics'] = 'Statististieken'; +$wb['Statistics'] = 'Statistieken'; $wb['Web traffic'] = 'Web Traffic'; $wb['Website quota (Harddisk)'] = 'Website quota (Harddisk)'; $wb['Cron'] = 'Cron'; -$wb['Stats'] = 'Statististieken'; +$wb['Stats'] = 'Statistieken'; $wb['Shell'] = 'Shell'; $wb['Webdav'] = 'WebDAV'; $wb['FTP'] = 'FTP'; $wb['Options'] = 'Opties'; -$wb['Domain'] = 'Domain'; +$wb['Domain'] = 'Domein'; $wb['Redirect'] = 'Redirect'; $wb['SSL'] = 'SSL'; $wb['Sites'] = 'Sites'; -$wb['Database User'] = 'Database Users'; +$wb['Database User'] = 'Database gebruikers'; $wb['APS Installer'] = 'APS Installer'; -$wb['Available packages'] = 'Available packages'; -$wb['Installed packages'] = 'Installed packages'; -$wb['Update Packagelist'] = 'Update Packagelist'; -$wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)'; +$wb['Available packages'] = 'Beschikbare pakketten'; +$wb['Installed packages'] = 'Geïnstalleerde pakketten'; +$wb['Update Packagelist'] = 'Pakkettenlijst bijwerken'; +$wb['Subdomain (Vhost)'] = 'Subdomein (Vhost)'; $wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.'; ?> diff --git a/interface/web/sites/lib/lang/nl_aps.lng b/interface/web/sites/lib/lang/nl_aps.lng index 29fb7b6a40..9d51f7457b 100644 --- a/interface/web/sites/lib/lang/nl_aps.lng +++ b/interface/web/sites/lib/lang/nl_aps.lng @@ -1,29 +1,29 @@ diff --git a/interface/web/sites/lib/lang/nl_aps_instances_list.lng b/interface/web/sites/lib/lang/nl_aps_instances_list.lng index 5742b7a6e9..fba33a5e2f 100644 --- a/interface/web/sites/lib/lang/nl_aps_instances_list.lng +++ b/interface/web/sites/lib/lang/nl_aps_instances_list.lng @@ -1,11 +1,11 @@ diff --git a/interface/web/sites/lib/lang/nl_aps_packages_list.lng b/interface/web/sites/lib/lang/nl_aps_packages_list.lng index 68c378085f..b52ea0e1bd 100644 --- a/interface/web/sites/lib/lang/nl_aps_packages_list.lng +++ b/interface/web/sites/lib/lang/nl_aps_packages_list.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/sites/lib/lang/nl_aps_update_packagelist.lng b/interface/web/sites/lib/lang/nl_aps_update_packagelist.lng index ce9fcf68fb..252f92d2d7 100644 --- a/interface/web/sites/lib/lang/nl_aps_update_packagelist.lng +++ b/interface/web/sites/lib/lang/nl_aps_update_packagelist.lng @@ -1,7 +1,7 @@ diff --git a/interface/web/sites/lib/lang/nl_database.lng b/interface/web/sites/lib/lang/nl_database.lng index 919ff25374..ada5ab9df7 100644 --- a/interface/web/sites/lib/lang/nl_database.lng +++ b/interface/web/sites/lib/lang/nl_database.lng @@ -23,11 +23,11 @@ $wb['database_charset_change_txt'] = 'De database karakterset kan niet worden ge $wb['database_name_error_len'] = 'Databasenaam - {db} - is te lang. De max. lengte van de databasenaam incl. voorvoegsel is 64 karakters.'; $wb['database_user_error_len'] = 'Databasenaam - {user}- is te lang. De max. lengte van de database gebruikersnaam incl. voorvoegsel is 16 karakters.'; $wb['parent_domain_id_txt'] = 'Site'; -$wb['database_site_error_empty'] = 'Select the site to which the database belongs.'; -$wb['select_site_txt'] = '- Select Site -'; -$wb['btn_save_txt'] = 'Save'; -$wb['btn_cancel_txt'] = 'Cancel'; -$wb['generate_password_txt'] = 'Generate Password'; +$wb['database_site_error_empty'] = 'Selecteer de site waar deze database aan gelinkt moet worden.'; +$wb['select_site_txt'] = '- Selecteer Site -'; +$wb['btn_save_txt'] = 'Opslaan'; +$wb['btn_cancel_txt'] = 'Annuleren'; +$wb['generate_password_txt'] = 'Genereer wachtwoord'; $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; diff --git a/interface/web/sites/lib/lang/nl_database_user.lng b/interface/web/sites/lib/lang/nl_database_user.lng index d00aefe1f3..d23dec7388 100644 --- a/interface/web/sites/lib/lang/nl_database_user.lng +++ b/interface/web/sites/lib/lang/nl_database_user.lng @@ -1,24 +1,24 @@ diff --git a/interface/web/sites/lib/lang/nl_database_user_admin_list.lng b/interface/web/sites/lib/lang/nl_database_user_admin_list.lng index d7f88c4c36..0850b4e44a 100644 --- a/interface/web/sites/lib/lang/nl_database_user_admin_list.lng +++ b/interface/web/sites/lib/lang/nl_database_user_admin_list.lng @@ -1,6 +1,6 @@ diff --git a/interface/web/sites/lib/lang/nl_database_user_list.lng b/interface/web/sites/lib/lang/nl_database_user_list.lng index 8c226496a6..1a6d1858b5 100644 --- a/interface/web/sites/lib/lang/nl_database_user_list.lng +++ b/interface/web/sites/lib/lang/nl_database_user_list.lng @@ -1,5 +1,5 @@ diff --git a/interface/web/sites/lib/lang/nl_user_quota_stats_list.lng b/interface/web/sites/lib/lang/nl_user_quota_stats_list.lng index 72d068db78..64a5a0753e 100644 --- a/interface/web/sites/lib/lang/nl_user_quota_stats_list.lng +++ b/interface/web/sites/lib/lang/nl_user_quota_stats_list.lng @@ -1,9 +1,9 @@ diff --git a/interface/web/sites/lib/lang/nl_web_domain.lng b/interface/web/sites/lib/lang/nl_web_domain.lng index 2a0a066561..6aaa1aae5f 100644 --- a/interface/web/sites/lib/lang/nl_web_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_domain.lng @@ -27,7 +27,7 @@ $wb['hd_quota_txt'] = 'Harddisk quota'; $wb['traffic_quota_txt'] = 'Traffic quota'; $wb['cgi_txt'] = 'CGI'; $wb['ssi_txt'] = 'SSI'; -$wb['errordocs_txt'] = 'Own Error-documenten'; +$wb['errordocs_txt'] = 'Eigen error documenten'; $wb['subdomain_txt'] = 'Auto-subdomein'; $wb['ssl_txt'] = 'SSL'; $wb['suexec_txt'] = 'SuEXEC'; @@ -72,7 +72,7 @@ $wb['no_flag_txt'] = 'No flag'; $wb['save_certificate_txt'] = 'Save certificate'; $wb['create_certificate_txt'] = 'Create certificate'; $wb['delete_certificate_txt'] = 'Delete certificate'; -$wb['ipv6_address_txt'] = 'IPv6-Address'; +$wb['ipv6_address_txt'] = 'IPv6-Adres'; $wb['nginx_directives_txt'] = 'nginx Directives'; $wb['seo_redirect_txt'] = 'SEO Redirect'; $wb['non_www_to_www_txt'] = 'Non-www -> www'; @@ -93,7 +93,7 @@ $wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.'; $wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.'; $wb['ssl_key_txt'] = 'SSL Key'; $wb['perl_txt'] = 'Perl'; -$wb['fastcgi_php_version_txt'] = 'PHP Version'; +$wb['fastcgi_php_version_txt'] = 'PHP Versie'; $wb['pm_txt'] = 'PHP-FPM Process Manager'; $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout'; $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests'; -- GitLab From a2401ddb28154829f254378b72e081ac2d4af289 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 11:59:12 +0200 Subject: [PATCH 079/313] more dutch language adjustments. --- interface/web/sites/lib/lang/nl.lng | 2 +- .../sites/lib/lang/nl_backup_stats_list.lng | 10 ++++----- interface/web/sites/lib/lang/nl_database.lng | 22 +++++++++---------- .../sites/lib/lang/nl_database_admin_list.lng | 2 +- .../web/sites/lib/lang/nl_database_list.lng | 2 +- .../lib/lang/nl_database_quota_stats_list.lng | 6 ++--- .../web/sites/lib/lang/nl_web_folder.lng | 8 +++---- .../web/sites/lib/lang/nl_web_folder_list.lng | 4 ++-- .../web/sites/lib/lang/nl_web_folder_user.lng | 22 +++++++++---------- .../lib/lang/nl_web_folder_user_list.lng | 8 +++---- .../lib/lang/nl_web_sites_stats_list.lng | 2 +- .../web/sites/lib/lang/nl_web_subdomain.lng | 14 ++++++------ .../sites/lib/lang/nl_web_vhost_domain.lng | 12 +++++----- .../lang/nl_web_vhost_domain_admin_list.lng | 4 ++-- .../lib/lang/nl_web_vhost_domain_list.lng | 4 ++-- .../lib/lang/nl_web_vhost_subdomain_list.lng | 8 +++---- 16 files changed, 65 insertions(+), 65 deletions(-) diff --git a/interface/web/sites/lib/lang/nl.lng b/interface/web/sites/lib/lang/nl.lng index cbde78ed45..8e07a1844a 100644 --- a/interface/web/sites/lib/lang/nl.lng +++ b/interface/web/sites/lib/lang/nl.lng @@ -9,7 +9,7 @@ $wb['FTP-User'] = 'FTP-gebruiker'; $wb['Webdav-User'] = 'Webdav-gebruiker'; $wb['Folder'] = 'Protected Folders'; $wb['Folder users'] = 'Protected Folder Users'; -$wb['Command Line'] = 'Command Line'; +$wb['Command Line'] = 'Opdrachtregel'; $wb['Shell-User'] = 'Shell-gebruiker'; $wb['Cron Jobs'] = 'Cron Jobs'; $wb['Statistics'] = 'Statistieken'; diff --git a/interface/web/sites/lib/lang/nl_backup_stats_list.lng b/interface/web/sites/lib/lang/nl_backup_stats_list.lng index 65792aa591..306beb1d92 100644 --- a/interface/web/sites/lib/lang/nl_backup_stats_list.lng +++ b/interface/web/sites/lib/lang/nl_backup_stats_list.lng @@ -1,10 +1,10 @@ diff --git a/interface/web/sites/lib/lang/nl_database.lng b/interface/web/sites/lib/lang/nl_database.lng index ada5ab9df7..9cbf52692c 100644 --- a/interface/web/sites/lib/lang/nl_database.lng +++ b/interface/web/sites/lib/lang/nl_database.lng @@ -6,9 +6,9 @@ $wb['database_user_txt'] = 'Database gebruikersnaam'; $wb['database_password_txt'] = 'Database wachtwoord'; $wb['password_strength_txt'] = 'Wachtwoord sterkte'; $wb['database_charset_txt'] = 'Database karkakterset'; -$wb['remote_access_txt'] = 'Remote toegang'; -$wb['remote_ips_txt'] = 'Remote toegang IPs (IP adressen gescheiden door een komma, niet ingevuld betekend toegang voor elk IP-adres)'; -$wb['database_remote_error_ips'] = 'Ten minste één van de ingevulde IP-adressen is ongeldig.'; +$wb['remote_access_txt'] = 'Externe toegang'; +$wb['remote_ips_txt'] = 'Externe toegang IPs (IP adressen gescheiden door een komma, niet ingevuld betekent toegang voor elk IP-adres)'; +$wb['database_remote_error_ips'] = 'Ten minste één van de ingevulde IP-adressen is ongeldig.'; $wb['client_txt'] = 'Klant'; $wb['active_txt'] = 'Actief'; $wb['database_name_error_empty'] = 'Databasenaam is niet ingvuld.'; @@ -33,14 +33,14 @@ $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['globalsearch_resultslimit_of_txt'] = 'of'; $wb['globalsearch_resultslimit_results_txt'] = 'results'; -$wb['globalsearch_noresults_text_txt'] = 'No results.'; -$wb['globalsearch_noresults_limit_txt'] = '0 results'; -$wb['globalsearch_searchfield_watermark_txt'] = 'Search'; -$wb['globalsearch_suggestions_text_txt'] = 'Suggestions'; -$wb['database_ro_user_txt'] = 'Read-only database user'; -$wb['optional_txt'] = 'optional'; -$wb['select_dbuser_txt'] = 'Select database user'; -$wb['no_dbuser_txt'] = 'None'; +$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.'; +$wb['globalsearch_noresults_limit_txt'] = '0 resultaten'; +$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken'; +$wb['globalsearch_suggestions_text_txt'] = 'Suggesties'; +$wb['database_ro_user_txt'] = 'Read-only database gebruiker'; +$wb['optional_txt'] = 'optioneel'; +$wb['select_dbuser_txt'] = 'Selecteer database gebruiker'; +$wb['no_dbuser_txt'] = 'Geen'; $wb['database_client_differs_txt'] = 'The client of the parent web and the database do not match.'; $wb['database_user_missing_txt'] = 'Please select a database user for this database.'; $wb['limit_database_quota_txt'] = 'Database quota'; diff --git a/interface/web/sites/lib/lang/nl_database_admin_list.lng b/interface/web/sites/lib/lang/nl_database_admin_list.lng index d9d3a32b21..1bb89e3cbf 100644 --- a/interface/web/sites/lib/lang/nl_database_admin_list.lng +++ b/interface/web/sites/lib/lang/nl_database_admin_list.lng @@ -1,7 +1,7 @@ diff --git a/interface/web/sites/lib/lang/nl_web_folder.lng b/interface/web/sites/lib/lang/nl_web_folder.lng index 2f06a70726..0f59ca63aa 100644 --- a/interface/web/sites/lib/lang/nl_web_folder.lng +++ b/interface/web/sites/lib/lang/nl_web_folder.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/sites/lib/lang/nl_web_folder_list.lng b/interface/web/sites/lib/lang/nl_web_folder_list.lng index 89f8b65ac3..f1700c0e59 100644 --- a/interface/web/sites/lib/lang/nl_web_folder_list.lng +++ b/interface/web/sites/lib/lang/nl_web_folder_list.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/sites/lib/lang/nl_web_folder_user.lng b/interface/web/sites/lib/lang/nl_web_folder_user.lng index 1dbc90534e..8a043d7802 100644 --- a/interface/web/sites/lib/lang/nl_web_folder_user.lng +++ b/interface/web/sites/lib/lang/nl_web_folder_user.lng @@ -1,14 +1,14 @@ diff --git a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng index 67612f5111..1b50abeaed 100644 --- a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng +++ b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng @@ -1,7 +1,7 @@ diff --git a/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng b/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng index a0568db64b..5dae5a33ec 100644 --- a/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng +++ b/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng @@ -5,5 +5,5 @@ $wb['this_month_txt'] = 'Deze maand'; $wb['last_month_txt'] = 'Vorige maand'; $wb['this_year_txt'] = 'Dit jaar'; $wb['last_year_txt'] = 'Vorig jaar'; -$wb['sum_txt'] = 'Sum'; +$wb['sum_txt'] = 'Som'; ?> diff --git a/interface/web/sites/lib/lang/nl_web_subdomain.lng b/interface/web/sites/lib/lang/nl_web_subdomain.lng index 18b4571275..2f4412afba 100644 --- a/interface/web/sites/lib/lang/nl_web_subdomain.lng +++ b/interface/web/sites/lib/lang/nl_web_subdomain.lng @@ -4,7 +4,7 @@ $wb['ssl_locality_txt'] = 'Plaatsnaam'; $wb['ssl_organisation_txt'] = 'Organisatie'; $wb['ssl_organisation_unit_txt'] = 'Organisatie afdeling'; $wb['ssl_country_txt'] = 'Land'; -$wb['ssl_request_txt'] = 'SSL Request'; +$wb['ssl_request_txt'] = 'SSL aanvraag'; $wb['ssl_cert_txt'] = 'SSL Certificaat'; $wb['ssl_bundle_txt'] = 'SSL Bundel'; $wb['ssl_action_txt'] = 'SSL Actie'; @@ -33,18 +33,18 @@ $wb['limit_web_aliasdomain_txt'] = 'Het max. aantal aliasdomeinen voor uw accoun $wb['limit_web_subdomain_txt'] = 'Het max. aantal web subdomeinen voor uw account is bereikt.'; $wb['apache_directives_txt'] = 'Apache directives'; $wb['domain_error_empty'] = 'Domein is niet ingvuld.'; -$wb['domain_error_unique'] = 'Er is al eenwebsite of sub / aliasdomein met deze domeinnaam.'; +$wb['domain_error_unique'] = 'Er is al een website of sub / aliasdomein met deze domeinnaam.'; $wb['domain_error_regex'] = 'Domainnaam ongeldig.'; $wb['host_txt'] = 'Host'; $wb['redirect_error_regex'] = 'Ongeldig redirect pad. Geldige redirects zijn bijvoorbeeld: /test/ or http://www.domain.tld/test/'; -$wb['no_redirect_txt'] = 'No redirect'; -$wb['no_flag_txt'] = 'No flag'; -$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.'; +$wb['no_redirect_txt'] = 'Geen redirect'; +$wb['no_flag_txt'] = 'Geen flag'; +$wb['domain_error_wildcard'] = 'Wildcard subdomeinen zijn niet toegestaan.'; $wb['proxy_directives_txt'] = 'Proxy Directives'; $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:'; $wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.'; $wb['http_port_txt'] = 'HTTP Port'; $wb['https_port_txt'] = 'HTTPS Port'; -$wb['http_port_error_regex'] = 'HTTP Port invalid.'; -$wb['https_port_error_regex'] = 'HTTPS Port invalid.'; +$wb['http_port_error_regex'] = 'HTTP Port niet correct.'; +$wb['https_port_error_regex'] = 'HTTPS Port niet correct.'; ?> diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng index 617d844253..426a131667 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng @@ -70,10 +70,10 @@ $wb['none_txt'] = 'None'; $wb['disabled_txt'] = 'Disabled'; $wb['no_redirect_txt'] = 'No redirect'; $wb['no_flag_txt'] = 'No flag'; -$wb['save_certificate_txt'] = 'Save certificate'; +$wb['save_certificate_txt'] = 'Certificaat opslaan'; $wb['create_certificate_txt'] = 'Create certificate'; -$wb['delete_certificate_txt'] = 'Delete certificate'; -$wb['ipv6_address_txt'] = 'IPv6-Address'; +$wb['delete_certificate_txt'] = 'Certificaat verwijderen'; +$wb['ipv6_address_txt'] = 'IPv6-Adres'; $wb['nginx_directives_txt'] = 'nginx Directives'; $wb['seo_redirect_txt'] = 'SEO Redirect'; $wb['non_www_to_www_txt'] = 'Non-www -> www'; @@ -90,11 +90,11 @@ $wb['pm_max_children_error_regex'] = 'PHP-FPM pm.max_children must be a positive $wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers must be a positive integer value.'; $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.'; $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.'; -$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.'; -$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.'; +$wb['hd_quota_error_regex'] = 'Harddisk quota is niet correct.'; +$wb['traffic_quota_error_regex'] = 'Traffic quota is niet correct.'; $wb['ssl_key_txt'] = 'SSL Key'; $wb['perl_txt'] = 'Perl'; -$wb['fastcgi_php_version_txt'] = 'PHP Version'; +$wb['fastcgi_php_version_txt'] = 'PHP Versie'; $wb['pm_txt'] = 'PHP-FPM Process Manager'; $wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout'; $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests'; diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng index 398f91a940..bfa25cd689 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng @@ -6,6 +6,6 @@ $wb['active_txt'] = 'Actief'; $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domein'; $wb['add_new_record_txt'] = 'Toevoegen nieuwe website'; -$wb['add_new_subdomain_txt'] = 'Add new subdomain'; -$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain'; +$wb['add_new_subdomain_txt'] = 'Toevoegen nieuw subdomain'; +$wb['add_new_aliasdomain_txt'] = 'Toevoegen nieuw aliasdomain'; ?> diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng index 5ee23b30d7..f619301782 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng @@ -6,6 +6,6 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domein'; $wb['add_new_record_txt'] = 'Toevoegen nieuwe website'; $wb['parent_domain_id_txt'] = 'Website'; -$wb['add_new_subdomain_txt'] = 'Add new subdomain'; -$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain'; +$wb['add_new_subdomain_txt'] = 'Toevoegen nieuw subdomain'; +$wb['add_new_aliasdomain_txt'] = 'Toevoegen nieuw aliasdomain'; ?> diff --git a/interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng index 1c16bcda28..e1d947400a 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng @@ -1,8 +1,8 @@ -- GitLab From 173afc3e8272495e72fbcd27bed55d227483aaf7 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 12:48:50 +0200 Subject: [PATCH 080/313] Dashboard / DNS and Login dutch language ajdustments. --- .../lib/lang/nl_dashlet_customer.lng | 4 ++-- .../lib/lang/nl_dashlet_databasequota.lng | 6 +++--- .../nl_dashlet_invoice_client_settings.lng | 2 +- .../lib/lang/nl_dashlet_invoices.lng | 20 +++++++++---------- .../dashboard/lib/lang/nl_dashlet_limits.lng | 4 ++-- .../lib/lang/nl_dashlet_mailquota.lng | 8 ++++---- .../dashboard/lib/lang/nl_dashlet_modules.lng | 2 +- .../lib/lang/nl_dashlet_products.lng | 14 ++++++------- .../dashboard/lib/lang/nl_dashlet_quota.lng | 10 +++++----- .../dashboard/lib/lang/nl_dashlet_shop.lng | 6 +++--- interface/web/dns/lib/lang/nl.lng | 2 +- interface/web/login/lib/lang/nl.lng | 12 +++++------ interface/web/login/lib/lang/nl_login_as.lng | 10 +++++----- 13 files changed, 50 insertions(+), 50 deletions(-) diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_customer.lng b/interface/web/dashboard/lib/lang/nl_dashlet_customer.lng index 4fe6cb0ef7..fa87fa66f9 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_customer.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_customer.lng @@ -1,4 +1,4 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng index bd2402dbf6..1ba30aa693 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng @@ -1,7 +1,7 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng index 8cae3dfb4f..0cef7b9d6c 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng @@ -1,4 +1,4 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng index a680daa8f6..e15e174b91 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng @@ -1,18 +1,18 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng index 9cbb1a79ed..0ce3f0e794 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng @@ -26,6 +26,6 @@ $wb['limit_shell_user_txt'] = 'Aantal Shell users'; $wb['limit_webdav_user_txt'] = 'Aantal Webdav users'; $wb['limit_client_txt'] = 'Aantal klanten'; $wb['limit_database_txt'] = 'Aantal databases'; -$wb['limit_mailmailinglist_txt'] = 'Number of mailing lists'; -$wb['limit_domain_txt'] = 'Number of Domains'; +$wb['limit_mailmailinglist_txt'] = 'Aantal mailing lijsten'; +$wb['limit_domain_txt'] = 'Aantal domeinen'; ?> diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng index 1ab1e66658..28af96bdab 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_modules.lng b/interface/web/dashboard/lib/lang/nl_dashlet_modules.lng index 4788b7d6e6..5662f8705e 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_modules.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_modules.lng @@ -1,4 +1,4 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_products.lng b/interface/web/dashboard/lib/lang/nl_dashlet_products.lng index a69b61d2fb..147d88298a 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_products.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_products.lng @@ -1,9 +1,9 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng b/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng index de7b5a8936..581f48ac47 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_shop.lng b/interface/web/dashboard/lib/lang/nl_dashlet_shop.lng index 1e0b5361d7..182b1795ac 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_shop.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_shop.lng @@ -1,8 +1,8 @@ diff --git a/interface/web/dns/lib/lang/nl.lng b/interface/web/dns/lib/lang/nl.lng index d01b6b31b9..69ddf89f6f 100644 --- a/interface/web/dns/lib/lang/nl.lng +++ b/interface/web/dns/lib/lang/nl.lng @@ -18,5 +18,5 @@ $wb['DNS Wizard'] = 'DNS Wizard'; $wb['Add DNS Zone'] = 'Add DNS Zone'; $wb['Templates'] = 'Templates'; $wb['Secondary Zones'] = 'Secondary Zones'; -$wb['Import Zone File'] = 'Import Zone File'; +$wb['Import Zone File'] = 'Zone bestanden importeren'; ?> diff --git a/interface/web/login/lib/lang/nl.lng b/interface/web/login/lib/lang/nl.lng index 97062c416e..ca641e3b02 100644 --- a/interface/web/login/lib/lang/nl.lng +++ b/interface/web/login/lib/lang/nl.lng @@ -1,5 +1,5 @@ 256 karakters.'; $wb['username_txt'] = 'Gebruikersnaam'; $wb['password_txt'] = 'Wachtwoord'; -$wb['login_button_txt'] = 'Login'; -$wb['pw_lost_txt'] = 'Password lost'; +$wb['login_button_txt'] = 'Inloggen'; +$wb['pw_lost_txt'] = 'Wachtwoord vergeten'; $wb['error_maintenance_mode'] = 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.'; -$wb['login_txt'] = 'Login'; -$wb['pw_reset_txt'] = 'Password reset'; -$wb['pw_button_txt'] = 'Resend password'; +$wb['login_txt'] = 'Inloggen'; +$wb['pw_reset_txt'] = 'Wachtwoord herstellen'; +$wb['pw_button_txt'] = 'Wachtwoord versturen'; $wb['email_txt'] = 'Email'; $wb['theme_not_compatible'] = 'The chosen theme is not compatible with the current ISPConfig version. Please check for a new version of the theme.
The default theme as been activated automatically.'; $wb['back_txt'] = 'Back'; diff --git a/interface/web/login/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng index c660ff1a4b..b02e1a481b 100644 --- a/interface/web/login/lib/lang/nl_login_as.lng +++ b/interface/web/login/lib/lang/nl_login_as.lng @@ -1,9 +1,9 @@ Date: Fri, 8 Jul 2016 16:43:18 +0200 Subject: [PATCH 081/313] - prevent issue when using smtp binding in postfix --- install/tpl/amavisd_user_config.master | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/tpl/amavisd_user_config.master b/install/tpl/amavisd_user_config.master index 621e02956a..8663f07498 100644 --- a/install/tpl/amavisd_user_config.master +++ b/install/tpl/amavisd_user_config.master @@ -77,9 +77,9 @@ $log_level = 0; # (defaults to 0) $inet_socket_port = [10024,10026]; -# *:* = send to IP/HOST:incoming Port + 1 -$forward_method = 'smtp:*:*'; -$notify_method = 'smtp:*:*'; +# :* = send to incoming Port + 1 +$forward_method = 'smtp:127.0.0.1:*'; +$notify_method = 'smtp:127.0.0.1:*'; $interface_policy{'10026'} = 'ORIGINATING'; $policy_bank{'ORIGINATING'} = { originating => 1, -- GitLab From 7e24fd5e41f2b3ec8ecad32e2bedd789360a1de2 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 21:04:49 +0200 Subject: [PATCH 082/313] More dutch language adjustment for dashboard / dns / clients / sites --- interface/web/client/lib/lang/nl.lng | 24 ++++----- .../web/client/lib/lang/nl_client_del.lng | 2 +- .../web/client/lib/lang/nl_client_message.lng | 28 +++++----- .../web/client/lib/lang/nl_clients_list.lng | 4 +- interface/web/client/lib/lang/nl_domain.lng | 4 +- .../web/client/lib/lang/nl_domain_list.lng | 2 +- interface/web/client/lib/lang/nl_reseller.lng | 6 +-- .../web/client/lib/lang/nl_resellers_list.lng | 4 +- .../dashboard/lib/lang/nl_dashlet_quota.lng | 4 +- .../dns/lib/lang/nl_dns_soa_admin_list.lng | 10 ++-- .../web/dns/lib/lang/nl_dns_soa_list.lng | 4 +- interface/web/dns/lib/lang/nl_dns_wizard.lng | 52 +++++++++---------- .../lib/lang/nl_web_sites_stats_list.lng | 2 +- .../sites/lib/lang/nl_web_vhost_domain.lng | 36 ++++++------- 14 files changed, 91 insertions(+), 91 deletions(-) diff --git a/interface/web/client/lib/lang/nl.lng b/interface/web/client/lib/lang/nl.lng index 4c4b4d19b3..34aa5adec3 100644 --- a/interface/web/client/lib/lang/nl.lng +++ b/interface/web/client/lib/lang/nl.lng @@ -5,20 +5,20 @@ $wb['Limits'] = 'Limieten'; $wb['Add Client'] = 'Toevoegen klant'; $wb['Edit Client'] = 'Wijzigen klant'; $wb['Clients'] = 'klanten'; -$wb['Templates'] = 'Templates'; -$wb['Limit-Templates'] = 'Limit-Templates'; -$wb['Add Reseller'] = 'Toevoegen Reseller'; -$wb['Edit Reseller'] = 'Wijzigen Reseller'; +$wb['Templates'] = 'Sjablonen'; +$wb['Limit-Templates'] = 'Limiet sjablonen'; +$wb['Add Reseller'] = 'Toevoegen reseller'; +$wb['Edit Reseller'] = 'Wijzigen reseller'; $wb['Resellers'] = 'Resellers'; $wb['error_has_clients'] = 'Deze reseller heeft klanten. Verwijder eerst de klanten van de reseller'; -$wb['add_additional_template_txt'] = 'Add additional template'; -$wb['delete_additional_template_txt'] = 'Delete additional template'; -$wb['Messaging'] = 'Messaging'; -$wb['Send email'] = 'Send Email'; -$wb['Edit Client Circle'] = 'Edit Client Circle'; -$wb['Domains'] = 'Domains'; -$wb['domain_txt'] = 'Domain'; -$wb['client_txt'] = 'Client'; +$wb['add_additional_template_txt'] = 'Additioneel sjabloon toevoegen'; +$wb['delete_additional_template_txt'] = 'Verwijder additioneel sjabloon'; +$wb['Messaging'] = 'Berichten'; +$wb['Send email'] = 'Verstuur e-mail'; +$wb['Edit Client Circle'] = 'Klanten collectie bewerken'; +$wb['Domains'] = 'Domeinen'; +$wb['domain_txt'] = 'Domein'; +$wb['client_txt'] = 'Klant'; $wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain'; $wb['error_domain_in webuse'] = 'This domain cannot be deleted, because it is in use as web-domain'; $wb['error_client_can_not_add_domain'] = 'You cannot add a new domain'; diff --git a/interface/web/client/lib/lang/nl_client_del.lng b/interface/web/client/lib/lang/nl_client_del.lng index 6a6b3b6ce3..294fb5011b 100644 --- a/interface/web/client/lib/lang/nl_client_del.lng +++ b/interface/web/client/lib/lang/nl_client_del.lng @@ -3,5 +3,5 @@ $wb['confirm_action_txt'] = 'Bevestig actie'; $wb['delete_explanation'] = 'Deze actie verwijderd het volgende aantal aan records die geassocieerd zijn met deze klant'; $wb['btn_save_txt'] = 'Verwijder de klant'; $wb['btn_cancel_txt'] = 'Annuleren zonder de klant te verwijderen'; -$wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?'; +$wb['confirm_client_delete_txt'] = 'Weet je zeker dat je deze klant wil verwijderen ?'; ?> diff --git a/interface/web/client/lib/lang/nl_client_message.lng b/interface/web/client/lib/lang/nl_client_message.lng index 6b2a872f10..aaa93be1b8 100644 --- a/interface/web/client/lib/lang/nl_client_message.lng +++ b/interface/web/client/lib/lang/nl_client_message.lng @@ -1,20 +1,20 @@ diff --git a/interface/web/client/lib/lang/nl_clients_list.lng b/interface/web/client/lib/lang/nl_clients_list.lng index 25d537db8e..4b962f1241 100644 --- a/interface/web/client/lib/lang/nl_clients_list.lng +++ b/interface/web/client/lib/lang/nl_clients_list.lng @@ -6,6 +6,6 @@ $wb['contact_name_txt'] = 'Contactpersoon'; $wb['city_txt'] = 'Plaatsnaam'; $wb['country_txt'] = 'Land'; $wb['add_new_record_txt'] = 'Toevoegen nieuwe klant'; -$wb['username_txt'] = 'Username'; -$wb['customer_no_txt'] = 'Customer No.'; +$wb['username_txt'] = 'Gebruikersnaam'; +$wb['customer_no_txt'] = 'Klantnummer'; ?> diff --git a/interface/web/client/lib/lang/nl_domain.lng b/interface/web/client/lib/lang/nl_domain.lng index fbdce7dc7f..c1da1b741d 100644 --- a/interface/web/client/lib/lang/nl_domain.lng +++ b/interface/web/client/lib/lang/nl_domain.lng @@ -1,6 +1,6 @@ diff --git a/interface/web/client/lib/lang/nl_domain_list.lng b/interface/web/client/lib/lang/nl_domain_list.lng index 7fec9446a0..130345f388 100644 --- a/interface/web/client/lib/lang/nl_domain_list.lng +++ b/interface/web/client/lib/lang/nl_domain_list.lng @@ -2,5 +2,5 @@ $wb['list_head_txt'] = 'Domeinen'; $wb['add_new_record_txt'] = 'Toevoegen nieuw domein'; $wb['domain_txt'] = 'Domein'; -$wb['user_txt'] = 'Client'; +$wb['user_txt'] = 'Klant'; ?> diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng index 28934428dc..63d76bfb15 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -91,11 +91,11 @@ $wb['ssh_chroot_txt'] = 'SSH-Chroot Opties'; $wb['web_php_options_txt'] = 'PHP Opties'; $wb['limit_client_error'] = 'Het max. aantal klanten is bereikt.'; $wb['limit_client_error_positive_or_unlimited'] = 'Het aantal klanten moet > 0'; -$wb['limit_web_quota_txt'] = 'Web Quota'; +$wb['limit_web_quota_txt'] = 'Web quota'; $wb['limit_traffic_quota_txt'] = 'Traffic Quota'; $wb['limit_trafficquota_error_notint'] = 'Traffic Quota moet een numerieke waarde zijn.'; -$wb['customer_no_txt'] = 'Klant nr.'; -$wb['vat_id_txt'] = 'BTW ID'; +$wb['customer_no_txt'] = 'Klantnummer'; +$wb['vat_id_txt'] = 'BTW nummer'; $wb['required_fields_txt'] = '* Verplichte velden'; $wb['limit_webdav_user_txt'] = 'Max. number of Webdav users'; $wb['limit_webdav_user_error_notint'] = 'The webdav user limit must be a number.'; diff --git a/interface/web/client/lib/lang/nl_resellers_list.lng b/interface/web/client/lib/lang/nl_resellers_list.lng index 6360eecbe6..cae7563144 100644 --- a/interface/web/client/lib/lang/nl_resellers_list.lng +++ b/interface/web/client/lib/lang/nl_resellers_list.lng @@ -6,6 +6,6 @@ $wb['contact_name_txt'] = 'Contactnaam'; $wb['city_txt'] = 'Plaatsnaam'; $wb['country_txt'] = 'Land'; $wb['add_new_record_txt'] = 'Toevoegen nieuwe reseller'; -$wb['customer_no_txt'] = 'Customer No.'; -$wb['username_txt'] = 'Username'; +$wb['customer_no_txt'] = 'Klantnummer'; +$wb['username_txt'] = 'Gebruikersnaam'; ?> diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng b/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng index 581f48ac47..c2bab859a8 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_quota.lng @@ -1,6 +1,6 @@ diff --git a/interface/web/dns/lib/lang/nl_dns_soa_list.lng b/interface/web/dns/lib/lang/nl_dns_soa_list.lng index 547c740432..b86e5a3fdc 100644 --- a/interface/web/dns/lib/lang/nl_dns_soa_list.lng +++ b/interface/web/dns/lib/lang/nl_dns_soa_list.lng @@ -5,7 +5,7 @@ $wb['server_id_txt'] = 'Server'; $wb['origin_txt'] = 'Zone'; $wb['ns_txt'] = 'NS'; $wb['mbox_txt'] = 'E-mail'; -$wb['add_new_record_wizard_txt'] = 'Toevoegen nieuw DNS Zone met wizard'; +$wb['add_new_record_wizard_txt'] = 'Toevoegen nieuwe DNS Zone met wizard'; $wb['add_new_record_txt'] = 'Toevoegen nieuwe DNS Zone (handmatig)'; -$wb['import_zone_file_txt'] = 'Import Zone File'; +$wb['import_zone_file_txt'] = 'Importeer zone bestand'; ?> diff --git a/interface/web/dns/lib/lang/nl_dns_wizard.lng b/interface/web/dns/lib/lang/nl_dns_wizard.lng index fa4cdf9cea..3fbe6c71ba 100644 --- a/interface/web/dns/lib/lang/nl_dns_wizard.lng +++ b/interface/web/dns/lib/lang/nl_dns_wizard.lng @@ -1,5 +1,5 @@ diff --git a/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng b/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng index 5dae5a33ec..c25d743da6 100644 --- a/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng +++ b/interface/web/sites/lib/lang/nl_web_sites_stats_list.lng @@ -1,5 +1,5 @@ -- GitLab From 46d2d1a9ff857227bcb21b5bd6136aa40f53286e Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 8 Jul 2016 22:15:22 +0200 Subject: [PATCH 083/313] Dutch language adjustments for Interface and Mail --- interface/lib/lang/nl.lng | 154 +++++++++---------- interface/web/mail/lib/lang/nl_mail_user.lng | 34 ++-- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng index 86ab8b7e78..a71f9f2bdc 100644 --- a/interface/lib/lang/nl.lng +++ b/interface/lib/lang/nl.lng @@ -10,9 +10,9 @@ $wb['number_format_dec_point'] = ','; $wb['number_format_thousands_sep'] = ''; $wb['error_301'] = 'Module niet toegestaan voor de huidige gebruiker.'; $wb['error_302'] = 'Ongeldige module.'; -$wb['error_1001'] = 'De gebruikersnaam en wachtwoord kunnen niet leeg zijn!'; -$wb['error_1002'] = 'De gebruikersnaam en/of wachtwoord zijn onjuist!'; -$wb['error_1003'] = 'De gebruikersnaam wordt gedeactiveerd!'; +$wb['error_1001'] = 'Gebruikersnaam en wachtwoord kunnen niet leeg zijn!'; +$wb['error_1002'] = 'Gebruikersnaam en/of wachtwoord zijn onjuist!'; +$wb['error_1003'] = 'Gebruikersnaam wordt gedeactiveerd!'; $wb['delete_confirmation'] = 'Wilt u dit record echt verwijderen?'; $wb['error_no_view_permission'] = 'U heeft geen toestemming om dit record te bekijken of dit record bestaat niet!'; $wb['error_no_delete_permission'] = 'U heeft geen toestemming om dit record te verwijderen!'; @@ -40,106 +40,106 @@ $wb['top_menu_domain'] = 'Domeinen'; $wb['top_menu_dashboard'] = 'Home'; $wb['latest_news_txt'] = 'Laatste nieuws'; $wb['top_menu_vm'] = 'VServer'; -$wb['daynamesmin_su'] = 'Su'; -$wb['daynamesmin_mo'] = 'Mo'; -$wb['daynamesmin_tu'] = 'Tu'; -$wb['daynamesmin_we'] = 'We'; -$wb['daynamesmin_th'] = 'Th'; -$wb['daynamesmin_fr'] = 'Fr'; -$wb['daynamesmin_sa'] = 'Sa'; -$wb['daynames_sunday'] = 'Sunday'; -$wb['daynames_monday'] = 'Monday'; -$wb['daynames_tuesday'] = 'Tuesday'; -$wb['daynames_wednesday'] = 'Wednesday'; -$wb['daynames_thursday'] = 'Thursday'; -$wb['daynames_friday'] = 'Friday'; -$wb['daynames_saturday'] = 'Saturday'; +$wb['daynamesmin_su'] = 'Zo'; +$wb['daynamesmin_mo'] = 'Ma'; +$wb['daynamesmin_tu'] = 'Di'; +$wb['daynamesmin_we'] = 'Wo'; +$wb['daynamesmin_th'] = 'Do'; +$wb['daynamesmin_fr'] = 'Vr'; +$wb['daynamesmin_sa'] = 'Za'; +$wb['daynames_sunday'] = 'Zondag'; +$wb['daynames_monday'] = 'Maandag'; +$wb['daynames_tuesday'] = 'Dinsdag'; +$wb['daynames_wednesday'] = 'Woensdag'; +$wb['daynames_thursday'] = 'Donderdag'; +$wb['daynames_friday'] = 'Vrijdag'; +$wb['daynames_saturday'] = 'Zaterdag'; $wb['monthnamesshort_jan'] = 'Jan'; $wb['monthnamesshort_feb'] = 'Feb'; $wb['monthnamesshort_mar'] = 'Mar'; $wb['monthnamesshort_apr'] = 'Apr'; -$wb['monthnamesshort_may'] = 'May'; +$wb['monthnamesshort_may'] = 'Mei'; $wb['monthnamesshort_jun'] = 'Jun'; $wb['monthnamesshort_jul'] = 'Jul'; $wb['monthnamesshort_aug'] = 'Aug'; $wb['monthnamesshort_sep'] = 'Sep'; -$wb['monthnamesshort_oct'] = 'Oct'; +$wb['monthnamesshort_oct'] = 'Okt'; $wb['monthnamesshort_nov'] = 'Nov'; $wb['monthnamesshort_dec'] = 'Dec'; -$wb['datepicker_nextText'] = 'Next'; -$wb['datepicker_prevText'] = 'Prev'; -$wb['logout_txt'] = 'Logout'; -$wb['conf_format_dateshort_human_readable'] = 'yyyy-mm-dd'; -$wb['submit_confirmation'] = 'Do you really want to perform this action?'; +$wb['datepicker_nextText'] = 'Volgende'; +$wb['datepicker_prevText'] = 'Vorige'; +$wb['logout_txt'] = 'Uitloggen'; +$wb['conf_format_dateshort_human_readable'] = 'dd-mm-yyyy'; +$wb['submit_confirmation'] = 'Weet je zeker dat je deze actie wilt uitvoeren ?'; $wb['top_menu_mailuser'] = 'Mailuser'; -$wb['globalsearch_resultslimit_of_txt'] = 'of'; -$wb['globalsearch_resultslimit_results_txt'] = 'results'; -$wb['globalsearch_noresults_text_txt'] = 'No results.'; -$wb['globalsearch_noresults_limit_txt'] = '0 results'; -$wb['globalsearch_searchfield_watermark_txt'] = 'Search'; -$wb['globalsearch_suggestions_text_txt'] = 'Suggestions'; +$wb['globalsearch_resultslimit_of_txt'] = 'van'; +$wb['globalsearch_resultslimit_results_txt'] = 'resultaten'; +$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.'; +$wb['globalsearch_noresults_limit_txt'] = '0 resultaten'; +$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken'; +$wb['globalsearch_suggestions_text_txt'] = 'Suggesties'; $wb['global_tabchange_warning_txt'] = 'Changed data in this tab will be changed if you press OK. On cancel they will be discarded.'; $wb['global_tabchange_discard_txt'] = 'You have unsaved changes in this tab. Changes will be discarded if you continue.'; -$wb['datalog_changes_txt'] = 'The following changes are not yet populated to all servers:'; -$wb['datalog_changes_end_txt'] = 'Storing updates can take up to one minute. Please be patient.'; -$wb['datalog_status_i_web_database'] = 'Create new database'; -$wb['datalog_status_u_web_database'] = 'Update database'; -$wb['datalog_status_d_web_database'] = 'Delete database'; -$wb['datalog_status_i_web_database_user'] = 'Create database user for database'; -$wb['datalog_status_u_web_database_user'] = 'Update database user'; -$wb['datalog_status_d_web_database_user'] = 'Delete database user'; -$wb['datalog_status_i_web_domain'] = 'Create new website'; -$wb['datalog_status_u_web_domain'] = 'Update website settings'; -$wb['datalog_status_d_web_domain'] = 'Delete website'; -$wb['datalog_status_i_ftp_user'] = 'Create FTP user'; -$wb['datalog_status_u_ftp_user'] = 'Update FTP user'; -$wb['datalog_status_d_ftp_user'] = 'Delete FTP user'; -$wb['datalog_status_i_mail_domain'] = 'Create email domain'; -$wb['datalog_status_u_mail_domain'] = 'Update email domain'; -$wb['datalog_status_d_mail_domain'] = 'Delete email domain'; -$wb['datalog_status_i_mail_user'] = 'Create email user'; -$wb['datalog_status_u_mail_user'] = 'Update email user'; -$wb['datalog_status_d_mail_user'] = 'Delete email user'; -$wb['datalog_status_i_mail_forwarding'] = 'Create email address'; -$wb['datalog_status_u_mail_forwarding'] = 'Update email address'; -$wb['datalog_status_d_mail_forwarding'] = 'Delete email address'; -$wb['datalog_status_i_dns_rr'] = 'Create DNS record'; -$wb['datalog_status_u_dns_rr'] = 'Update DNS record'; -$wb['datalog_status_d_dns_rr'] = 'Delete DNS record'; -$wb['datalog_status_i_dns_soa'] = 'Create DNS zone'; -$wb['datalog_status_u_dns_soa'] = 'Update DNS zone'; -$wb['datalog_status_d_dns_soa'] = 'Delete DNS zone'; -$wb['datalog_status_i_cron'] = 'Create cron job'; -$wb['datalog_status_u_cron'] = 'Update cron job'; -$wb['datalog_status_d_cron'] = 'Delete cron job'; +$wb['datalog_changes_txt'] = 'De volgende wijzigingen zijn nog niet op alle servers doorgevoerd:'; +$wb['datalog_changes_end_txt'] = 'Het doorvoeren van updates kan tot één minuut duren. Even geduld a.u.b.'; +$wb['datalog_status_i_web_database'] = 'Aanmaken nieuwe database'; +$wb['datalog_status_u_web_database'] = 'Database bijwerken'; +$wb['datalog_status_d_web_database'] = 'Database verwijderen'; +$wb['datalog_status_i_web_database_user'] = 'Aanmaken database gebruiker voor database'; +$wb['datalog_status_u_web_database_user'] = 'Database gebruiker bijwerken'; +$wb['datalog_status_d_web_database_user'] = 'Database gebruiker verwijderen'; +$wb['datalog_status_i_web_domain'] = 'Aanmaken nieuwe website'; +$wb['datalog_status_u_web_domain'] = 'Bijwerken website instellingen'; +$wb['datalog_status_d_web_domain'] = 'Verwijderen website'; +$wb['datalog_status_i_ftp_user'] = 'Aanmaken FTP gebruiker'; +$wb['datalog_status_u_ftp_user'] = 'Bijwerken FTP gebruiker'; +$wb['datalog_status_d_ftp_user'] = 'Verwijderen FTP gebruiker'; +$wb['datalog_status_i_mail_domain'] = 'Aanmaken e-mail domein'; +$wb['datalog_status_u_mail_domain'] = 'Bijwerken e-mail domein'; +$wb['datalog_status_d_mail_domain'] = 'Verwijderen e-mail domein'; +$wb['datalog_status_i_mail_user'] = 'Aanmaken e-mail gebruiker'; +$wb['datalog_status_u_mail_user'] = 'Bijwerken e-mail gebruiker'; +$wb['datalog_status_d_mail_user'] = 'Verwijderen e-mail gebruiker'; +$wb['datalog_status_i_mail_forwarding'] = 'Aanmaken e-mail adres'; +$wb['datalog_status_u_mail_forwarding'] = 'Bijwerken e-mail adres'; +$wb['datalog_status_d_mail_forwarding'] = 'Verwijderen e-mail adres'; +$wb['datalog_status_i_dns_rr'] = 'Aanmaken DNS record'; +$wb['datalog_status_u_dns_rr'] = 'Bijwerken DNS record'; +$wb['datalog_status_d_dns_rr'] = 'Verwijderen DNS record'; +$wb['datalog_status_i_dns_soa'] = 'Aanmaken DNS zone'; +$wb['datalog_status_u_dns_soa'] = 'Bijwerken DNS zone'; +$wb['datalog_status_d_dns_soa'] = 'Verwijderen DNS zone'; +$wb['datalog_status_i_cron'] = 'Aanmaken cron job'; +$wb['datalog_status_u_cron'] = 'Bijwerken cron job'; +$wb['datalog_status_d_cron'] = 'Verwijderen cron job'; $wb['datalog_status_i_mail_get'] = 'Create mail fetcher account'; $wb['datalog_status_u_mail_get'] = 'Update mail fetcher account'; $wb['datalog_status_d_mail_get'] = 'Delete mail fetcher account'; $wb['datalog_status_i_mail_mailinglist'] = 'Create mailing list'; $wb['datalog_status_u_mail_mailinglist'] = 'Update mailing list'; $wb['datalog_status_d_mail_mailinglist'] = 'Delete mailing list'; -$wb['datalog_status_i_shell_user'] = 'Create shell user'; -$wb['datalog_status_u_shell_user'] = 'Update shell user'; -$wb['datalog_status_d_shell_user'] = 'Delete shell user'; -$wb['datalog_status_i_web_folder'] = 'Create folder protection'; -$wb['datalog_status_u_web_folder'] = 'Update folder protection'; -$wb['datalog_status_d_web_folder'] = 'Delete folder protection'; +$wb['datalog_status_i_shell_user'] = 'Aanmaken shell gebruiker (ssh)'; +$wb['datalog_status_u_shell_user'] = 'Bijwerken shell gebruiker (ssh)'; +$wb['datalog_status_d_shell_user'] = 'Verwijderen shell gebruiker (ssh)'; +$wb['datalog_status_i_web_folder'] = 'Aanmaken folder protectie'; +$wb['datalog_status_u_web_folder'] = 'Bijwerken folder protectie'; +$wb['datalog_status_d_web_folder'] = 'Verwijderen folder protectie'; $wb['datalog_status_i_web_folder_user'] = 'Create folder protection user'; $wb['datalog_status_u_web_folder_user'] = 'Update folder protection user'; $wb['datalog_status_d_web_folder_user'] = 'Delete folder protection user'; -$wb['datalog_status_i_spamfilter_users'] = 'Create spam filter settings'; -$wb['datalog_status_u_spamfilter_users'] = 'Update spam filter settings'; -$wb['datalog_status_d_spamfilter_users'] = 'Delete spam filter settings'; -$wb['login_as_txt'] = 'Log in as'; +$wb['datalog_status_i_spamfilter_users'] = 'Aanmaken spam filter instellngen'; +$wb['datalog_status_u_spamfilter_users'] = 'Bijwerken spam filter instellngen'; +$wb['datalog_status_d_spamfilter_users'] = 'Verwijderen spam filter instellngen'; +$wb['login_as_txt'] = 'Inloggen als'; $wb['no_domain_perm'] = 'You have no permission for this domain.'; $wb['no_destination_perm'] = 'You have no permission for this destination.'; $wb['client_you_are_locked'] = 'You have no permission to change any settings.'; -$wb['gender_m_txt'] = 'Mr.'; -$wb['gender_f_txt'] = 'Ms.'; +$wb['gender_m_txt'] = 'Dhr.'; +$wb['gender_f_txt'] = 'Mevr.'; $wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'This client has records in the billing module, therefore he cannot be deleted.'; -$wb['yes_txt'] = 'Yes'; -$wb['no_txt'] = 'No'; -$wb['None'] = 'None'; +$wb['yes_txt'] = 'Ja'; +$wb['no_txt'] = 'Nee'; +$wb['None'] = 'Geen'; $wb['strength_1'] = 'Weak'; $wb['strength_2'] = 'Fair'; $wb['strength_3'] = 'Good'; diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng index 4c0eed548a..f577efd4d3 100644 --- a/interface/web/mail/lib/lang/nl_mail_user.lng +++ b/interface/web/mail/lib/lang/nl_mail_user.lng @@ -4,23 +4,23 @@ $wb['email_txt'] = 'E-mail'; $wb['cryptpwd_txt'] = 'Wachtwoord'; $wb['password_strength_txt'] = 'Wachtwoord sterkte'; $wb['active_txt'] = 'Actief'; -$wb['email_error_isemail'] = 'Email adress is ongeldig.'; +$wb['email_error_isemail'] = 'E-mail adres is ongeldig.'; $wb['email_error_unique'] = 'Duplicaat e-mail adres.'; $wb['autoresponder_text_txt'] = 'Tekst'; $wb['autoresponder_txt'] = 'Actief'; $wb['autoresponder_start_date_txt'] = 'Start op'; $wb['autoresponder_start_date_ispast'] = 'Start datum mag niet in het verleden liggen.'; -$wb['autoresponder_end_date_txt'] = 'Eindigd op'; +$wb['autoresponder_end_date_txt'] = 'Eindigt op'; $wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.'; $wb['no_domain_perm'] = 'U heeft geen toestemming voor dit domein.'; -$wb['error_no_pwd'] = 'Wachtwoord is niet ingvuld.'; +$wb['error_no_pwd'] = 'Wachtwoord is niet ingevuld.'; $wb['quota_error_isint'] = 'Mailbox grootte moet een numerieke waarde zijn.'; $wb['quota_txt'] = 'Quota'; $wb['server_id_txt'] = 'Server_id'; $wb['password_txt'] = 'Wachtwoord'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Ontvangen inschakelen'; -$wb['greylisting_txt'] = 'Enable greylisting'; +$wb['greylisting_txt'] = 'Greylisting inschakelen'; $wb['access_txt'] = 'Toegang inschakelen'; $wb['policy_txt'] = 'Spamfilter'; $wb['no_policy'] = '- niet ingeschakeld -'; @@ -30,24 +30,24 @@ $wb['disableimap_txt'] = 'Uitschakelen IMAP'; $wb['disablepop3_txt'] = 'Uitschakelen POP3'; $wb['duplicate_alias_or_forward_txt'] = 'Er is al een alias of forward met dir e-mailadres.'; $wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 = ongelimiteerd of nummerieke waarde > 1'; -$wb['move_junk_txt'] = 'Verplaats Spam e-mails naar junk directory'; +$wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder'; $wb['name_txt'] = 'Echte naam'; $wb['name_optional_txt'] = '(Optioneel)'; $wb['autoresponder_active'] = 'Inschakelen autoresponder'; $wb['cc_txt'] = 'Stuur kopie naar'; -$wb['cc_error_isemail'] = 'Het Stuur kopie naar veld bevat geen geldig e-mailadres'; +$wb['cc_error_isemail'] = 'Het "Stuur kopie naar" veld bevat geen geldig e-mail adres'; $wb['domain_txt'] = 'Domain'; $wb['now_txt'] = 'Now'; $wb['login_error_unique'] = 'Login is already taken.'; $wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.'; $wb['login_txt'] = 'Login (optional)'; $wb['error_login_email_txt'] = 'This login is not allowed. Please enter a different login or use the mail address as login.'; -$wb['autoresponder_subject_txt'] = 'Email Subject'; -$wb['autoresponder_subject'] = 'Out of office reply'; -$wb['generate_password_txt'] = 'Generate Password'; -$wb['repeat_password_txt'] = 'Repeat Password'; -$wb['password_mismatch_txt'] = 'The passwords do not match.'; -$wb['password_match_txt'] = 'The passwords do match.'; +$wb['autoresponder_subject_txt'] = 'E-mail onderwerp'; +$wb['autoresponder_subject'] = 'Out of office antwoord'; +$wb['generate_password_txt'] = 'Genereer wachtwoord'; +$wb['repeat_password_txt'] = 'Herhaal wachtwoord'; +$wb['password_mismatch_txt'] = 'De wachtwoorden zijn niet gelijk.'; +$wb['password_match_txt'] = 'De wachtwoord zijn gelijk.'; $wb['backup_interval_txt'] = 'Backup interval'; $wb['backup_copies_txt'] = 'Number of backup copies'; $wb['no_backup_txt'] = 'No backup'; @@ -55,10 +55,10 @@ $wb['daily_backup_txt'] = 'Daily'; $wb['weekly_backup_txt'] = 'Weekly'; $wb['monthly_backup_txt'] = 'Monthly'; $wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.'; -$wb['cc_note_txt'] = '(Separate multiple email addresses with commas)'; -$wb['disablesmtp_txt'] = 'Disable SMTP (sending)'; +$wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)'; +$wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)'; $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.'; -$wb['sender_cc_txt'] = 'Send outgoing copy to'; -$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address'; -$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)'; +$wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan'; +$wb['sender_cc_error_isemail'] = 'Het "Stuur uitgaande kopie aan" veld bevat geen geldig e-mail adres'; +$wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)'; ?> -- GitLab From 11fd5d0820c566ee206abb17a0bcaef6c21a49f2 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 10 Jul 2016 09:03:19 +0200 Subject: [PATCH 084/313] More dutch language adjustments --- interface/web/sites/lib/lang/nl_web_domain.lng | 4 ++-- .../web/sites/lib/lang/nl_web_vhost_domain.lng | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/interface/web/sites/lib/lang/nl_web_domain.lng b/interface/web/sites/lib/lang/nl_web_domain.lng index 6aaa1aae5f..60a06c266a 100644 --- a/interface/web/sites/lib/lang/nl_web_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_domain.lng @@ -21,7 +21,7 @@ $wb['active_txt'] = 'Actief'; $wb['document_root_txt'] = 'Documentroot'; $wb['system_user_txt'] = 'Linux gebruiker'; $wb['system_group_txt'] = 'Linux Groep'; -$wb['ip_address_txt'] = 'IP-Adres'; +$wb['ip_address_txt'] = 'IPv4 adres'; $wb['vhost_type_txt'] = 'VHost type'; $wb['hd_quota_txt'] = 'Harddisk quota'; $wb['traffic_quota_txt'] = 'Traffic quota'; @@ -72,7 +72,7 @@ $wb['no_flag_txt'] = 'No flag'; $wb['save_certificate_txt'] = 'Save certificate'; $wb['create_certificate_txt'] = 'Create certificate'; $wb['delete_certificate_txt'] = 'Delete certificate'; -$wb['ipv6_address_txt'] = 'IPv6-Adres'; +$wb['ipv6_address_txt'] = 'IPv6 adres'; $wb['nginx_directives_txt'] = 'nginx Directives'; $wb['seo_redirect_txt'] = 'SEO Redirect'; $wb['non_www_to_www_txt'] = 'Non-www -> www'; diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng index 23ca63306e..6940d62c9e 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng @@ -21,7 +21,7 @@ $wb['active_txt'] = 'Actief'; $wb['document_root_txt'] = 'Document Root'; $wb['system_user_txt'] = 'Linux gebruiker'; $wb['system_group_txt'] = 'Linux Groep'; -$wb['ip_address_txt'] = 'IP-Adres'; +$wb['ip_address_txt'] = 'IPv4 adres'; $wb['vhost_type_txt'] = 'VHost type'; $wb['hd_quota_txt'] = 'Harddisk quota'; $wb['traffic_quota_txt'] = 'Traffic quota'; @@ -49,7 +49,7 @@ $wb['error_ssl_organisation_empty'] = 'SSL Organisatie is niet ingvuld.'; $wb['error_ssl_organisation_unit_empty'] = 'SSL Organisatie afdeling is niet ingvuld.'; $wb['error_ssl_country_empty'] = 'SSL land is niet ingvuld.'; $wb['client_group_id_txt'] = 'Klant'; -$wb['stats_password_txt'] = 'Webstatististieken wachtwoord'; +$wb['stats_password_txt'] = 'Webstatistieken wachtwoord'; $wb['allow_override_txt'] = 'Apache AllowOverride'; $wb['limit_web_quota_free_txt'] = 'Max. beschikbare harddisk quota'; $wb['ssl_state_error_regex'] = 'Ongeldige SSL Provincie/staat. Geldige karakters zijn: a-z, 0-9 and .,-_'; @@ -62,8 +62,8 @@ $wb['redirect_error_regex'] = 'Ongeldig redirect pad. Heldige redirects zijn bij $wb['php_open_basedir_txt'] = 'PHP open_basedir'; $wb['traffic_quota_exceeded_txt'] = 'Traffic quota overschreden'; $wb['ruby_txt'] = 'Ruby'; -$wb['stats_user_txt'] = 'Webstatististieken gebruikersnaam'; -$wb['stats_type_txt'] = 'Webstatististieken programma'; +$wb['stats_user_txt'] = 'Webstatistieken gebruikersnaam'; +$wb['stats_type_txt'] = 'Webstatistieken programma'; $wb['custom_php_ini_txt'] = 'Custom php.ini instellingen'; $wb['error_ssl_cert_empty'] = 'SSL Certificate field is empty'; $wb['none_txt'] = 'None'; @@ -73,7 +73,7 @@ $wb['no_flag_txt'] = 'No flag'; $wb['save_certificate_txt'] = 'Certificaat opslaan'; $wb['create_certificate_txt'] = 'Create certificate'; $wb['delete_certificate_txt'] = 'Certificaat verwijderen'; -$wb['ipv6_address_txt'] = 'IPv6-Adres'; +$wb['ipv6_address_txt'] = 'IPv6 adres'; $wb['nginx_directives_txt'] = 'nginx Directives'; $wb['seo_redirect_txt'] = 'SEO Redirect'; $wb['non_www_to_www_txt'] = 'Non-www -> www'; @@ -101,10 +101,10 @@ $wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests'; $wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM pm.process_idle_timeout must be a positive integer value.'; $wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests must be an integer value >= 0.'; $wb['pm_ondemand_hint_txt'] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!'; -$wb['generate_password_txt'] = 'Generate Password'; -$wb['repeat_password_txt'] = 'Repeat Password'; -$wb['password_mismatch_txt'] = 'The passwords do not match.'; -$wb['password_match_txt'] = 'The passwords do match.'; +$wb['generate_password_txt'] = 'Genereer wachtwoord'; +$wb['repeat_password_txt'] = 'Herhaal wachtwoord'; +$wb['password_mismatch_txt'] = 'De wachtwoorden zijn ongelijk.'; +$wb['password_match_txt'] = 'De wachtwoorden zijn gelijk.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; -- GitLab From 58b8f2bf6dbed7a63150f35e6e3b9fe835ce98ac Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Sun, 10 Jul 2016 11:02:07 +0200 Subject: [PATCH 085/313] - replace *:* by 127.0.0.1:* in amavis config --- install/dist/tpl/gentoo/amavisd-ispconfig.conf.master | 6 +++--- install/tpl/fedora_amavisd_conf.master | 4 ++-- install/tpl/opensuse_amavisd_conf.master | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master index c05ce9835b..88a32b4636 100644 --- a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master +++ b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master @@ -95,9 +95,9 @@ $log_level = 0; # (defaults to 0) $inet_socket_port = [10024,10026]; -# *:* = send to IP/HOST:incoming Port + 1 -$forward_method = 'smtp:*:*'; -$notify_method = 'smtp:*:*'; +# :* = send to incoming Port + 1 +$forward_method = 'smtp:127.0.0.1:*'; +$notify_method = 'smtp:127.0.0.1:*'; $interface_policy{'10026'} = 'ORIGINATING'; $policy_bank{'ORIGINATING'} = { diff --git a/install/tpl/fedora_amavisd_conf.master b/install/tpl/fedora_amavisd_conf.master index 6e454e7cac..f32530cfab 100644 --- a/install/tpl/fedora_amavisd_conf.master +++ b/install/tpl/fedora_amavisd_conf.master @@ -146,8 +146,8 @@ $defang_by_ccat{+CC_BADH.",6"} = 1; # header field syntax error $myhostname = '{hostname}'; -$notify_method = 'smtp:*:*'; -$forward_method = 'smtp:*:*'; # set to undef with milter! +$notify_method = 'smtp:127.0.0.1:*'; +$forward_method = 'smtp:127.0.0.1:*'; # set to undef with milter! # $os_fingerprint_method = 'p0f:127.0.0.1:2345'; # to query p0f-analyzer.pl diff --git a/install/tpl/opensuse_amavisd_conf.master b/install/tpl/opensuse_amavisd_conf.master index a756bb5b25..582dd11631 100644 --- a/install/tpl/opensuse_amavisd_conf.master +++ b/install/tpl/opensuse_amavisd_conf.master @@ -145,8 +145,8 @@ $defang_by_ccat{+CC_BADH.",6"} = 1; # header field syntax error $myhostname = 'linux-jfp8.site'; -$notify_method = 'smtp:*:*'; -$forward_method = 'smtp:*:*'; # set to undef with milter! +$notify_method = 'smtp:127.0.0.1:*'; +$forward_method = 'smtp:127.0.0.1:*'; # set to undef with milter! # $final_virus_destiny = D_DISCARD; # $final_banned_destiny = D_BOUNCE; -- GitLab From 1fad40cafb70734c94cf8e5558d739c8956f0b70 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Sun, 10 Jul 2016 17:00:47 +0200 Subject: [PATCH 086/313] disallow underscore in maildomain-names --- interface/lib/classes/tform_base.inc.php | 20 +++++++++++++++++++ interface/web/mail/form/mail_domain.tform.php | 3 +-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 0c9cda5f51..1c5c6e08af 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -992,6 +992,26 @@ class tform_base { } } break; + case 'ISDOMAIN': + $error = false; + if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n'; + if($validator['allowempty'] == 'y' && $field_value == '') { + //* Do nothing + } else { + if(function_exists('filter_var')) { + if(filter_var('check@'.$field_value, FILTER_VALIDATE_EMAIL) === false) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."
\r\n"; + } else { + $this->errorMessage .= $errmsg."
\r\n"; + } + } + + } else $this->errorMessage .= "function filter_var missing
\r\n"; + } + unset($error); + break; case 'ISEMAIL': $error = false; if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n'; diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php index 5a63d8423b..06fb0906c3 100644 --- a/interface/web/mail/form/mail_domain.tform.php +++ b/interface/web/mail/form/mail_domain.tform.php @@ -88,8 +88,7 @@ $form["tabs"]['domain'] = array ( 'errmsg'=> 'domain_error_empty'), 1 => array ( 'type' => 'UNIQUE', 'errmsg'=> 'domain_error_unique'), - 2 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/', + 2 => array ( 'type' => 'ISDOMAIN', 'errmsg'=> 'domain_error_regex'), ), 'default' => '', -- GitLab From fb024aaf713356d3790933d5dad84b48ec76d23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristia=CC=81n=20Feldsam?= Date: Thu, 7 Jul 2016 14:53:34 +0200 Subject: [PATCH 087/313] Fixed deleting spamfilter users when deleting mail domain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristián Feldsam # Conflicts: # interface/web/mail/mail_domain_del.php --- interface/web/mail/mail_domain_del.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/mail_domain_del.php b/interface/web/mail/mail_domain_del.php index 6941cd6082..bce89695dc 100644 --- a/interface/web/mail/mail_domain_del.php +++ b/interface/web/mail/mail_domain_del.php @@ -78,7 +78,7 @@ class page_action extends tform_actions { } // Delete all spamfilters that belong to this domain - $records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email = ?", '%@' . $domain); + $records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email like ?", '%@' . $domain); foreach($records as $rec) { $app->db->datalogDelete('spamfilter_users', 'id', $rec['id']); } -- GitLab From 575df5615ccb501f51cdd6e2986766a16960f674 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 12 Jul 2016 10:26:02 +0200 Subject: [PATCH 088/313] Fixed loading indicator (missing css/img), fixed #4018 --- .../themes/default/assets/images/ajax-loader.gif | Bin 0 -> 3208 bytes .../default/assets/stylesheets/ispconfig.css | 13 +++++++++++++ .../default/assets/stylesheets/ispconfig.min.css | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 interface/web/themes/default/assets/images/ajax-loader.gif diff --git a/interface/web/themes/default/assets/images/ajax-loader.gif b/interface/web/themes/default/assets/images/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..7c4804ebcaec27b830873a1ff4d157f1bde00ef1 GIT binary patch literal 3208 zcmc(idr%X10>_u^BadA@-3>MnI0F(9Y9Xjlo+<j=n zybK@-B!*~3#0O}#JPT@Zu%e+R?i!va{q8vuC!{(XFW{KUjWS6A2A*x10pKyh(#Q&ZE-%*@M|FUQBnv$C=h5)y!q zm)XCJxrw`Dl6MPPsd34%teAZiIX!e-wZoFB$fYi_y%EJQnaJ7LDGRVM_?fT@iYAHCeM}^RzX`-q!Y7y!w!t zsH*oHjuB~zi^U*^YtUdr^0hYm&4;_nedE#u11QgIty8G|rKnquR=P#f=AFGS&Ycy~ z$*E~Pw@8S#mk#Bn`Unb4k09=Dat<{-sv%0|LM6dqtES<&i$<^X(G{sro@(qgt>auc zpUkfGNh&N(jCA$Mw#gv|3oq7CugV2q5nGJ~LxEmRKVa}@{?Tdd3MTQ-zc0iezj5(8K1_SDO2=gh7c4VhM#XD`Xz6Y0wiE5rmJ2o8nmDzWm|ybFRWfzjpaM|?J`{WHs%oHazo-w7 zGp@ZxNiS=@bv^c|=uWJh_b`7td{Et<^8|R_{WL0;c)YE>>?JVNDl2-svij4?<}FR1 zUv!)_8a5;Sj!#;M|6&f`%5Dz-u^rD|xLvZUS`{*MRuQ_UM6u65KcoM)D~s4RYCjo3 zzdA|dj2c-vtSTEBZ=aLKPjqwy_W|yyyDxBrpve8|t0- zeg^1TV zThds=y3-sYjZuVpEVek(qw-&N`a~VjFlCJQw;~E?k50ugKu4Uc3 z1Na%OUiP=u?lILAy>Vk$>W*~=zU-if6O_d%Xz;SNYe^ZL93;*zRKkPzrkbQ@vOyW! zGNhrAz?xMkOf8d?xT*A*_C(`JtVMHTZPNu_4ZB-$=+YIAmR3)6`h_G&?1|w5j_-gr zK7GFo>Q5UXD50|G%;8n#faKne>FIQSV_DL9{8_`3^>NWUcG;a52Y+?Dk550iet3M{ z?vc*|`da@;KeUkj!|_||W=AZoyfnh?)fEIo+aDA{b*Ctt&A#}jC{dnU)gVZ%TEun` zoAX*%2`#pnOXctUI{w<@9s5NE0>utn30HiV8QleX9% zLdd+8fyth5OteW7lx}*!(=wp0ojj(Aci@c zR-QNR?ncXnDjA!E^k7J~dL28-3hlXEnUV+Pd99^)VJ$#pnAoToNPbZB=uzd@o<$aq z{Ne(hyG}+Xj*9bf`>7QCDz+~2oi9Dl!0==< z3EH$sumzQtic>13_Db4|-o)IWsi)ZK0_G>{cd$tbwuwhf4>(!+%c}^ark3ooyg=$y zdmK?VR5c^@k`{&D2^6zSO<)uSi{qR+JCR0Q$Kq1R-6+|-z{3>8JRqd|yk`W)Q*O`mD6i3q zpUf!Pc42{Q9(q#iqZ1u`e-_YGtv`+p_|zVAqSDqi=s?n zGzz+)(|g)8T+%=k?IvJdM{tgC6?PY(-atF}TkyLWejP=M0z4)O@aR zUgP8&t;{6i-E`L#N6#38JXqyN-?`DB2mQW;@i2PYxj-l#bQ|j9nOL3?c~GUo8mEK`?9xy#-JQkqQ}n z6EnJn;_%>5A$qe9cu0^3JNe+v348|c8kGHjJ$wA^lfg8To5-qRWzgiY#SwUu1gCd1%uk4gh7)cpIIv+zrxex)4MI-UGIzt+X0LjP8Bw z>m(zOodTvdCUD^~GBF#vfj{x}lW{`$9rGpqr|s{0Jw8|U0J+T$6vpUD&yPi*E##m1 zpF%*vz7`vP7=k4n%GzbHzEcr)sAZ2#4P-uB8& zYPI+iQn>761JH%=|J8sn>_00=?Pndiv{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.table tbody tr td{text-overflow:ellipsis;overflow-x:hidden}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0} \ No newline at end of file +body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.table tbody tr td{text-overflow:ellipsis;overflow-x:hidden}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0}#ajaxloader{position:absolute;width:325px;height:150px;background:#fff url('../images/ajax-loader.gif') no-repeat center center;border:solid 2px #e1e1e1;border-radius:10px;padding:20px;text-align:center;z-index:100} \ No newline at end of file -- GitLab From c10911a251bcb9ea4e38853cd0c3b71b1eec9994 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 12 Jul 2016 15:35:50 +0200 Subject: [PATCH 089/313] Typo in remote api event (fixes: 4022) --- interface/lib/classes/remote.d/sites.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/remote.d/sites.inc.php b/interface/lib/classes/remote.d/sites.inc.php index 22c1657d49..2147e550a0 100644 --- a/interface/lib/classes/remote.d/sites.inc.php +++ b/interface/lib/classes/remote.d/sites.inc.php @@ -434,7 +434,7 @@ class remoting_sites extends remoting { if($params['pm_min_spare_servers'] == '') $params['pm_min_spare_servers'] = 1; if($params['pm_max_spare_servers'] == '') $params['pm_max_spare_servers'] = 1; - $domain_id = $this->insertQuery('../sites/form/web_vhost_domain.tform.php', $client_id, $params, 'sites:web_domain:on_after_insert'); + $domain_id = $this->insertQuery('../sites/form/web_vhost_domain.tform.php', $client_id, $params, 'sites:web_vhost_domain:on_after_insert'); if ($readonly === true) $app->db->query("UPDATE web_domain SET `sys_userid` = '1' WHERE domain_id = ?", $domain_id); return $domain_id; -- GitLab From 229a3f0989ef0371e1aa89ff06828dd2cd36e812 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 19 Jul 2016 00:24:07 +0200 Subject: [PATCH 090/313] Prevent password managers to overwrite passwords in reseller / client and mailbox edit screen (fixes #4030) --- interface/web/client/lib/lang/en_client.lng | 1 + interface/web/client/lib/lang/en_reseller.lng | 1 + interface/web/client/lib/lang/nl_client.lng | 1 + interface/web/client/lib/lang/nl_reseller.lng | 1 + interface/web/client/templates/client_edit_address.htm | 4 ++-- interface/web/client/templates/reseller_edit_address.htm | 4 ++-- interface/web/mail/lib/lang/en_mail_user.lng | 1 + interface/web/mail/lib/lang/fr_mail_user.lng | 1 + interface/web/mail/lib/lang/hr_mail_user.lng | 1 + interface/web/mail/lib/lang/hu_mail_user.lng | 1 + interface/web/mail/lib/lang/id_mail_user.lng | 1 + interface/web/mail/lib/lang/it_mail_user.lng | 1 + interface/web/mail/lib/lang/ja_mail_user.lng | 1 + interface/web/mail/lib/lang/nl_mail_user.lng | 5 +++-- interface/web/mail/lib/lang/pl_mail_user.lng | 1 + interface/web/mail/lib/lang/pt_mail_user.lng | 1 + interface/web/mail/lib/lang/ro_mail_user.lng | 1 + interface/web/mail/lib/lang/ru_mail_user.lng | 1 + interface/web/mail/lib/lang/se_mail_user.lng | 1 + interface/web/mail/lib/lang/sk_mail_user.lng | 1 + interface/web/mail/lib/lang/tr_mail_user.lng | 1 + interface/web/mail/templates/mail_user_mailbox_edit.htm | 5 +++-- 22 files changed, 28 insertions(+), 8 deletions(-) diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng index 05cf0f4729..94a57cf500 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -19,6 +19,7 @@ $wb["contact_firstname_txt"] = 'Contact firstname'; $wb["contact_name_txt"] = 'Contact name'; $wb["username_txt"] = 'Username'; $wb["password_txt"] = 'Password'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb["password_strength_txt"] = 'Password strength'; $wb["language_txt"] = 'Language'; $wb["usertheme_txt"] = 'Theme'; diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng index b40219f2b2..a9d8ad0337 100644 --- a/interface/web/client/lib/lang/en_reseller.lng +++ b/interface/web/client/lib/lang/en_reseller.lng @@ -19,6 +19,7 @@ $wb["contact_firstname_txt"] = 'Contact firstname'; $wb["contact_name_txt"] = 'Contact name'; $wb["username_txt"] = 'Username'; $wb["password_txt"] = 'Password'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb["password_strength_txt"] = 'Password strength'; $wb["language_txt"] = 'Language'; $wb["usertheme_txt"] = 'Theme'; diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng index 72065264ec..b1bec1916f 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -18,6 +18,7 @@ $wb['contact_firstname_txt'] = 'Contact firstname'; $wb['contact_name_txt'] = 'Contactpersoon'; $wb['username_txt'] = 'Gebruikersnaam'; $wb['password_txt'] = 'Wachtwoord'; +$wb['password_click_to_set_txt'] = 'Klik om in te stellen'; $wb['password_strength_txt'] = 'Wachtwoord sterkte'; $wb['language_txt'] = 'Taal'; $wb['usertheme_txt'] = 'Thema'; diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng index 63d76bfb15..c53d3eca25 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -17,6 +17,7 @@ $wb['contact_firstname_txt'] = 'Contact firstname'; $wb['contact_name_txt'] = 'Contactpersoon'; $wb['username_txt'] = 'Gebruikersnaam'; $wb['password_txt'] = 'Wachtwoord'; +$wb['password_click_to_set_txt'] = 'Klik om in te stellen'; $wb['password_strength_txt'] = 'Wachtwoord sterkte'; $wb['language_txt'] = 'Taal'; $wb['usertheme_txt'] = 'Thema'; diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm index e119e594e4..b033c63dc2 100644 --- a/interface/web/client/templates/client_edit_address.htm +++ b/interface/web/client/templates/client_edit_address.htm @@ -31,7 +31,7 @@
- + @@ -47,7 +47,7 @@
-
+
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm index 7b3adf4cc9..e5b0a5540b 100644 --- a/interface/web/client/templates/reseller_edit_address.htm +++ b/interface/web/client/templates/reseller_edit_address.htm @@ -31,7 +31,7 @@
- + @@ -47,7 +47,7 @@
-
+
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng index ba4fdd42a0..7768662229 100644 --- a/interface/web/mail/lib/lang/en_mail_user.lng +++ b/interface/web/mail/lib/lang/en_mail_user.lng @@ -21,6 +21,7 @@ $wb["quota_error_isint"] = 'Mailbox size must be a number.'; $wb["quota_txt"] = 'Quota (0 for unlimited)'; $wb["server_id_txt"] = 'Aerver_id'; $wb["password_txt"] = 'Password'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb["maildir_txt"] = 'Maildir'; $wb["postfix_txt"] = 'Enable receiving'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/fr_mail_user.lng b/interface/web/mail/lib/lang/fr_mail_user.lng index 775b425cf5..001282ccd9 100644 --- a/interface/web/mail/lib/lang/fr_mail_user.lng +++ b/interface/web/mail/lib/lang/fr_mail_user.lng @@ -61,4 +61,5 @@ $wb['daily_backup_txt'] = 'Daily'; $wb['weekly_backup_txt'] = 'Weekly'; $wb['monthly_backup_txt'] = 'Monthly'; $wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)'; +$wb['password_click_to_set_txt'] = 'Click to set'; ?> diff --git a/interface/web/mail/lib/lang/hr_mail_user.lng b/interface/web/mail/lib/lang/hr_mail_user.lng index b8d541faa4..50ebef717b 100644 --- a/interface/web/mail/lib/lang/hr_mail_user.lng +++ b/interface/web/mail/lib/lang/hr_mail_user.lng @@ -17,6 +17,7 @@ $wb['quota_error_isint'] = 'Mailbox size must be a number.'; $wb['quota_txt'] = 'Kvota'; $wb['server_id_txt'] = 'Aerver_id'; $wb['password_txt'] = 'Šifra'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Enable Receiving'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/hu_mail_user.lng b/interface/web/mail/lib/lang/hu_mail_user.lng index 97b07798d1..a11f7d2066 100644 --- a/interface/web/mail/lib/lang/hu_mail_user.lng +++ b/interface/web/mail/lib/lang/hu_mail_user.lng @@ -13,6 +13,7 @@ $wb['quota_error_isint'] = 'Mailbox méret mező csak szákot tartalmazhat'; $wb['quota_txt'] = 'Korlát MB-ban kifejezve'; $wb['server_id_txt'] = 'szerver_azonosító'; $wb['password_txt'] = 'Jelszó'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'levelezőláda'; $wb['postfix_txt'] = 'Bejövő engedélyezés'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/id_mail_user.lng b/interface/web/mail/lib/lang/id_mail_user.lng index 22b3b8140d..9ae9474ec8 100644 --- a/interface/web/mail/lib/lang/id_mail_user.lng +++ b/interface/web/mail/lib/lang/id_mail_user.lng @@ -18,6 +18,7 @@ $wb['quota_error_isint'] = 'Ukuran Mailbox harus berupa angka.'; $wb['quota_txt'] = 'Kuota'; $wb['server_id_txt'] = 'id_server'; $wb['password_txt'] = 'Kata Sandi'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Dapat Menerima'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/it_mail_user.lng b/interface/web/mail/lib/lang/it_mail_user.lng index 76f3018123..e548a6b4f0 100644 --- a/interface/web/mail/lib/lang/it_mail_user.lng +++ b/interface/web/mail/lib/lang/it_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'Il valore per la dimensione della casella di posta d $wb['quota_txt'] = 'quota in MB'; $wb['server_id_txt'] = 'server_id'; $wb['password_txt'] = 'password'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'maildir'; $wb['postfix_txt'] = 'Abilita ricezione'; $wb['access_txt'] = 'Abilita indirizzo'; diff --git a/interface/web/mail/lib/lang/ja_mail_user.lng b/interface/web/mail/lib/lang/ja_mail_user.lng index 7e044b9a94..6b3d2ea3ab 100644 --- a/interface/web/mail/lib/lang/ja_mail_user.lng +++ b/interface/web/mail/lib/lang/ja_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'メールボックスの最大数は数字で指定 $wb['quota_txt'] = 'メールボックスの容量'; $wb['server_id_txt'] = 'Aerver_id'; $wb['password_txt'] = 'パスワード'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'メールディレクトリ'; $wb['postfix_txt'] = 'メールを受信する'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/nl_mail_user.lng b/interface/web/mail/lib/lang/nl_mail_user.lng index f577efd4d3..acc2da94e1 100644 --- a/interface/web/mail/lib/lang/nl_mail_user.lng +++ b/interface/web/mail/lib/lang/nl_mail_user.lng @@ -18,6 +18,7 @@ $wb['quota_error_isint'] = 'Mailbox grootte moet een numerieke waarde zijn.'; $wb['quota_txt'] = 'Quota'; $wb['server_id_txt'] = 'Server_id'; $wb['password_txt'] = 'Wachtwoord'; +$wb['password_click_to_set_txt'] = 'Klik om in te stellen'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Ontvangen inschakelen'; $wb['greylisting_txt'] = 'Greylisting inschakelen'; @@ -35,7 +36,7 @@ $wb['name_txt'] = 'Echte naam'; $wb['name_optional_txt'] = '(Optioneel)'; $wb['autoresponder_active'] = 'Inschakelen autoresponder'; $wb['cc_txt'] = 'Stuur kopie naar'; -$wb['cc_error_isemail'] = 'Het "Stuur kopie naar" veld bevat geen geldig e-mail adres'; +$wb['cc_error_isemail'] = 'Het \"Stuur kopie naar\" veld bevat geen geldig e-mail adres'; $wb['domain_txt'] = 'Domain'; $wb['now_txt'] = 'Now'; $wb['login_error_unique'] = 'Login is already taken.'; @@ -59,6 +60,6 @@ $wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)'; $wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)'; $wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.'; $wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan'; -$wb['sender_cc_error_isemail'] = 'Het "Stuur uitgaande kopie aan" veld bevat geen geldig e-mail adres'; +$wb['sender_cc_error_isemail'] = 'Het \"Stuur uitgaande kopie aan\" veld bevat geen geldig e-mail adres'; $wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)'; ?> diff --git a/interface/web/mail/lib/lang/pl_mail_user.lng b/interface/web/mail/lib/lang/pl_mail_user.lng index 58e5aba9d6..69974866dc 100644 --- a/interface/web/mail/lib/lang/pl_mail_user.lng +++ b/interface/web/mail/lib/lang/pl_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'Wielkość skrzynki pocztowej musi być liczbą.'; $wb['quota_txt'] = 'Limit'; $wb['server_id_txt'] = 'Serwer_id'; $wb['password_txt'] = 'Hasło'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Zezwól na odbiór poczty'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/pt_mail_user.lng b/interface/web/mail/lib/lang/pt_mail_user.lng index 4e7934af9c..f638554dc9 100644 --- a/interface/web/mail/lib/lang/pt_mail_user.lng +++ b/interface/web/mail/lib/lang/pt_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'O tamanho da caixa de correio deve ser um número.'; $wb['quota_txt'] = 'Cota'; $wb['server_id_txt'] = 'Aerver_id'; $wb['password_txt'] = 'Senha'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Permitir Recepção'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/ro_mail_user.lng b/interface/web/mail/lib/lang/ro_mail_user.lng index 46938cd80e..af61d06b35 100644 --- a/interface/web/mail/lib/lang/ro_mail_user.lng +++ b/interface/web/mail/lib/lang/ro_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'Marimea Mailbox trebuie s afie un numar'; $wb['quota_txt'] = 'Quota'; $wb['server_id_txt'] = 'Server_id'; $wb['password_txt'] = 'Password'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Maildir'; $wb['postfix_txt'] = 'Enable Receiving'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/ru_mail_user.lng b/interface/web/mail/lib/lang/ru_mail_user.lng index 5ed8b07f5d..9214dc8ba7 100644 --- a/interface/web/mail/lib/lang/ru_mail_user.lng +++ b/interface/web/mail/lib/lang/ru_mail_user.lng @@ -13,6 +13,7 @@ $wb['quota_error_isint'] = 'Размер должен быть цифрой.'; $wb['quota_txt'] = 'квота in MB'; $wb['server_id_txt'] = 'server_id'; $wb['password_txt'] = 'пароль'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'maildir'; $wb['postfix_txt'] = 'Разрешить получение'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng index 7dcdca3e68..9ded10e955 100644 --- a/interface/web/mail/lib/lang/se_mail_user.lng +++ b/interface/web/mail/lib/lang/se_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'Epostkontots kvot måste vara en siffra.'; $wb['quota_txt'] = 'kvot i MB'; $wb['server_id_txt'] = 'server-id'; $wb['password_txt'] = 'lösenord'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'maildir'; $wb['postfix_txt'] = 'Aktivera mottagning'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/sk_mail_user.lng b/interface/web/mail/lib/lang/sk_mail_user.lng index 115cab9aa9..b8d6114d82 100644 --- a/interface/web/mail/lib/lang/sk_mail_user.lng +++ b/interface/web/mail/lib/lang/sk_mail_user.lng @@ -14,6 +14,7 @@ $wb['quota_error_isint'] = 'Veľkosť schránky, musí byť číslo.'; $wb['quota_txt'] = 'Kvóta'; $wb['server_id_txt'] = 'Server_id'; $wb['password_txt'] = 'Heslo'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Mailová záložka'; $wb['postfix_txt'] = 'Povoliť príjem'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/lib/lang/tr_mail_user.lng b/interface/web/mail/lib/lang/tr_mail_user.lng index ebdcce2a92..71241ec9f7 100644 --- a/interface/web/mail/lib/lang/tr_mail_user.lng +++ b/interface/web/mail/lib/lang/tr_mail_user.lng @@ -15,6 +15,7 @@ $wb['quota_error_isint'] = 'Posta kutusunun boyutu bir sayı olmalıdır.'; $wb['quota_txt'] = 'Kota (sınırsız için 0 yazın)'; $wb['server_id_txt'] = 'Sunucu kodu'; $wb['password_txt'] = 'Parola'; +$wb['password_click_to_set_txt'] = 'Click to set'; $wb['maildir_txt'] = 'Posta Klasörü'; $wb['postfix_txt'] = 'Alım Etkin'; $wb['greylisting_txt'] = 'Enable greylisting'; diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm index 4cb4b51c84..754c6b7ee1 100644 --- a/interface/web/mail/templates/mail_user_mailbox_edit.htm +++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm @@ -29,7 +29,7 @@
- + @@ -45,7 +45,8 @@
-
+
+
-- GitLab From 2d5f5359f2d3327543d2a0324c7c9c8ccb2fd2ae Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 19 Jul 2016 00:35:28 +0200 Subject: [PATCH 091/313] Prevent password managers autofill password for mailuser interface --- interface/web/mailuser/lib/lang/en_mail_user_password.lng | 1 + interface/web/mailuser/lib/lang/nl_mail_user_password.lng | 1 + interface/web/mailuser/templates/mail_user_password_edit.htm | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/web/mailuser/lib/lang/en_mail_user_password.lng b/interface/web/mailuser/lib/lang/en_mail_user_password.lng index 43c114a81c..1fae586e68 100644 --- a/interface/web/mailuser/lib/lang/en_mail_user_password.lng +++ b/interface/web/mailuser/lib/lang/en_mail_user_password.lng @@ -7,4 +7,5 @@ $wb['generate_password_txt'] = 'Generate Password'; $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; +$wb['password_click_to_set_txt'] = 'Click to set'; ?> \ No newline at end of file diff --git a/interface/web/mailuser/lib/lang/nl_mail_user_password.lng b/interface/web/mailuser/lib/lang/nl_mail_user_password.lng index cdf9674e70..254608275e 100644 --- a/interface/web/mailuser/lib/lang/nl_mail_user_password.lng +++ b/interface/web/mailuser/lib/lang/nl_mail_user_password.lng @@ -7,4 +7,5 @@ $wb['generate_password_txt'] = 'Generate Password'; $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; +$wb['password_click_to_set_txt'] = 'Klik om in te stellen'; ?> diff --git a/interface/web/mailuser/templates/mail_user_password_edit.htm b/interface/web/mailuser/templates/mail_user_password_edit.htm index 1afd11052c..b35a5c447d 100644 --- a/interface/web/mailuser/templates/mail_user_password_edit.htm +++ b/interface/web/mailuser/templates/mail_user_password_edit.htm @@ -15,7 +15,7 @@
- + @@ -31,7 +31,7 @@
-
+
-- GitLab From 804c520e04353036e6454382b4142945741d2ecd Mon Sep 17 00:00:00 2001 From: Michiel Piscaer Date: Tue, 19 Jul 2016 16:15:29 +0200 Subject: [PATCH 092/313] After enabling "Rewrite HTTP to HTTPS" and "Lets Encrypt SSL" the RewriteCond and RewriteRule got on the same line, becourse of an failing newline --- server/conf/vhost.conf.master | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index bb2d71d7d5..442d630b4e 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -430,7 +430,8 @@ RewriteCond %{HTTPS} off - RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ + RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] -- GitLab From aad102f73868ea83357856c3afe57617f411c83a Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Tue, 19 Jul 2016 20:29:38 +0200 Subject: [PATCH 093/313] Fixed #4033 Special characters in email mailbox password --- interface/lib/classes/auth.inc.php | 5 ++++- interface/lib/classes/tform_base.inc.php | 11 +++++++++++ interface/web/mail/form/mail_user.tform.php | 2 +- interface/web/mail/mail_user_edit.php | 1 - 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php index 4c97757226..9c52f5097c 100644 --- a/interface/lib/classes/auth.inc.php +++ b/interface/lib/classes/auth.inc.php @@ -213,7 +213,10 @@ class auth { return str_shuffle($password); } - public function crypt_password($cleartext_password) { + public function crypt_password($cleartext_password, $charset = 'UTF-8') { + if($charset != 'UTF-8') { + $cleartext_password = mb_convert_encoding($cleartext_password, $charset, 'UTF-8'); + } $salt="$1$"; $base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; for ($n=0;$n<8;$n++) { diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 1c5c6e08af..f5e1793294 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -901,6 +901,9 @@ class tform_base { case 'IDNTOUTF8': $returnval = $app->functions->idn_decode($returnval); break; + case 'TOLATIN1': + $returnval = mb_convert_encoding($returnval, 'ISO-8859-1', 'UTF-8'); + break; case 'TRIM': $returnval = trim($returnval); break; @@ -1263,6 +1266,10 @@ class tform_base { } elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPT') { $record[$key] = $app->auth->crypt_password(stripslashes($record[$key])); $sql_insert_val .= "'".$app->db->quote($record[$key])."', "; + } elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPTMAIL') { + // The password for the mail system needs to be converted to latin1 before it is hashed. + $record[$key] = $app->auth->crypt_password(stripslashes($record[$key]),'ISO-8859-1'); + $sql_insert_val .= "'".$app->db->quote($record[$key])."', "; } elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') { $tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key])); $record[$key] = $tmp['crypted']; @@ -1291,6 +1298,10 @@ class tform_base { } elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPT') { $record[$key] = $app->auth->crypt_password(stripslashes($record[$key])); $sql_update .= "`$key` = '".$app->db->quote($record[$key])."', "; + } elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPTMAIL') { + // The password for the mail system needs to be converted to latin1 before it is hashed. + $record[$key] = $app->auth->crypt_password(stripslashes($record[$key]),'ISO-8859-1'); + $sql_update .= "`$key` = '".$app->db->quote($record[$key])."', "; } elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') { $tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key])); $record[$key] = $tmp['crypted']; diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php index 9b4ff8fefd..8a19e66750 100644 --- a/interface/web/mail/form/mail_user.tform.php +++ b/interface/web/mail/form/mail_user.tform.php @@ -128,7 +128,7 @@ $form["tabs"]['mailuser'] = array( 'errmsg' => 'weak_password_txt' ) ), - 'encryption'=> 'CRYPT', + 'encryption'=> 'CRYPTMAIL', 'default' => '', 'value' => '', 'width' => '30', diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php index aedcd2249b..a79d8f8ff9 100644 --- a/interface/web/mail/mail_user_edit.php +++ b/interface/web/mail/mail_user_edit.php @@ -143,7 +143,6 @@ class page_action extends tform_actions { if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm"); } - //* if its an insert, check that the password is not empty if($this->id == 0 && $_POST["password"] == '') { $app->tform->errorMessage .= $app->tform->lng("error_no_pwd")."
"; -- GitLab From 4f1183ea13f1d35e97487ca19a969c5e2e82a6a2 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Wed, 20 Jul 2016 08:16:17 +0200 Subject: [PATCH 094/313] set user and group for /var/lib/amavis --- install/lib/installer_base.lib.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index c437ea32bf..9666ee883f 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1366,21 +1366,25 @@ class installer_base { // Add the clamav user to the amavis group exec('adduser clamav amavis'); - - // Create the director for DKIM-Keys - if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750, true); - // get shell-user for amavis - $amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd'); - if(!empty($amavis_user)) { - $amavis_user=rtrim($amavis_user, ":"); - exec('chown '.$amavis_user.' /var/lib/amavis/dkim'); - } // get shell-group for amavis $amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group'); if(!empty($amavis_group)) { $amavis_group=rtrim($amavis_group, ":"); - exec('chgrp '.$amavis_group.' /var/lib/amavis/dkim'); } + // get shell-user for amavis + $amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd'); + if(!empty($amavis_user)) { + $amavis_user=rtrim($amavis_user, ":"); + } + + // Create the director for DKIM-Keys + if(!is_dir('/var/lib/amavis')) mkdir('/var/lib/amavis', 0750, true); + if(!empty($amavis_user)) exec('chown '.$amavis_user.' /var/lib/amavis'); + if(!empty($amavis_group)) exec('chgrp '.$amavis_group.' /var/lib/amavis'); + if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750); + if(!empty($amavis_user)) exec('chown -R '.$amavis_user.' /var/lib/amavis/dkim'); + if(!empty($amavis_group)) exec('chgrp -R '.$amavis_group.' /var/lib/amavis/dkim'); + } public function configure_spamassassin() { -- GitLab From bae4a6e395b3f59f50e501604bb54cc3c457227c Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 20 Jul 2016 15:25:38 +0200 Subject: [PATCH 095/313] Disable the HTTP_PROXY header in the ispconfig and apps vhost files for apache and nginx. ISPConfig itself does not read nor interpret this header, but there might be other server components like PHP that might interact with it so I'll disable it just to be sure. --- install/tpl/apache_apps.vhost.master | 4 ++++ install/tpl/apache_ispconfig.vhost.master | 1 + install/tpl/nginx_apps.vhost.master | 1 + install/tpl/nginx_ispconfig.vhost.master | 1 + server/conf/apache_apps.vhost.master | 4 ++++ server/conf/nginx_apps.vhost.master | 1 + 6 files changed, 12 insertions(+) diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master index e56b1d6827..4930e253f9 100644 --- a/install/tpl/apache_apps.vhost.master +++ b/install/tpl/apache_apps.vhost.master @@ -15,6 +15,10 @@ SetHandler None + + RequestHeader unset Proxy early + + DocumentRoot {tmpl_var name='apps_vhost_dir'} AddType application/x-httpd-php .php diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master index 6b71378c84..8aa41fafb1 100644 --- a/install/tpl/apache_ispconfig.vhost.master +++ b/install/tpl/apache_ispconfig.vhost.master @@ -82,6 +82,7 @@ NameVirtualHost *: Header always add Strict-Transport-Security "max-age=15768000" + RequestHeader unset Proxy early diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index d2dc07ba10..e1bb6d1849 100644 --- a/install/tpl/nginx_apps.vhost.master +++ b/install/tpl/nginx_apps.vhost.master @@ -40,6 +40,7 @@ server { fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + fastcgi_param HTTP_PROXY ""; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master index 849877020d..c426e9d0fa 100644 --- a/install/tpl/nginx_ispconfig.vhost.master +++ b/install/tpl/nginx_ispconfig.vhost.master @@ -36,6 +36,7 @@ server { fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_read_timeout 1200; + fastcgi_param HTTP_PROXY ""; } location ~ /\. { diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master index 7d6d66590a..47d35304f6 100644 --- a/server/conf/apache_apps.vhost.master +++ b/server/conf/apache_apps.vhost.master @@ -14,6 +14,10 @@ SetHandler None + + + RequestHeader unset Proxy early + {tmpl_if name="enable_spdy" op="==" value="y"} diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index 1101d19305..ed5e3a49ae 100644 --- a/server/conf/nginx_apps.vhost.master +++ b/server/conf/nginx_apps.vhost.master @@ -32,6 +32,7 @@ server { fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + fastcgi_param HTTP_PROXY ""; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; -- GitLab From 814ec0188d4b44df409e3cff29303e0948aec8fc Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 20 Jul 2016 17:46:02 +0200 Subject: [PATCH 096/313] #4020 Added user agent string to wget cronjobs. --- server/plugins-available/cron_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php index c7109a562e..1a13a57fcd 100644 --- a/server/plugins-available/cron_plugin.inc.php +++ b/server/plugins-available/cron_plugin.inc.php @@ -237,7 +237,7 @@ class cron_plugin { $command .= "\t{$this->parent_domain['system_user']}"; //* running as user if($job['type'] == 'url') { - $command .= "\t{$cron_config['wget']} -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target; + $command .= "\t{$cron_config['wget']} --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target; } else { $web_root = ''; if($job['type'] == 'chrooted') { -- GitLab From 1189fe23803870ab26fdb376e45fc728a45127d4 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 20 Jul 2016 17:55:29 +0200 Subject: [PATCH 097/313] Fixed #4015 Default welcome email translation (de) --- .../lib/lang/de_client_message_template.lng | 18 +++++++++--------- .../lang/de_client_message_template_list.lng | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/interface/web/client/lib/lang/de_client_message_template.lng b/interface/web/client/lib/lang/de_client_message_template.lng index 65e5fbfba3..3c6ba86f36 100644 --- a/interface/web/client/lib/lang/de_client_message_template.lng +++ b/interface/web/client/lib/lang/de_client_message_template.lng @@ -1,11 +1,11 @@ diff --git a/interface/web/client/lib/lang/de_client_message_template_list.lng b/interface/web/client/lib/lang/de_client_message_template_list.lng index d9c307ed52..2eaadab3b6 100644 --- a/interface/web/client/lib/lang/de_client_message_template_list.lng +++ b/interface/web/client/lib/lang/de_client_message_template_list.lng @@ -1,5 +1,5 @@ -- GitLab From 8a1f4cf9991515f0ce7b7bcd3dc1c55274ab0370 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 20 Jul 2016 18:22:06 +0200 Subject: [PATCH 098/313] Do not add www as subdomain to a letsencrypt ssl cert when the domain of the webiste is already www.example.com (and not example.com) even if auto subdomain is set to www. --- server/plugins-available/apache2_plugin.inc.php | 5 +++-- server/plugins-available/nginx_plugin.inc.php | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index f4b6ab7bca..56791d3d2f 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1189,7 +1189,7 @@ class apache2_plugin { $sub_prefixes = array(); //* be sure to have good domain - if($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*") { + if(substr($domain,0,4) != 'www.' && ($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*")) { $temp_domains[] = "www." . $domain; } @@ -1207,7 +1207,7 @@ class apache2_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) { + if(isset($aliasdomain['subdomain']) && substr($aliasdomain['domain'],0,4) != 'www.' && ($aliasdomain['subdomain'] == "www" OR $aliasdomain['subdomain'] == "*")) { $temp_domains[] = "www." . $aliasdomain['domain']; } } @@ -1234,6 +1234,7 @@ class apache2_plugin { //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); + $app->log("Let's Encrypt SSL Cert domains: $lddomain", LOGLEVEL_DEBUG); $success = false; $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 9933aae618..c343f425d3 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1263,7 +1263,7 @@ class nginx_plugin { $sub_prefixes = array(); //* be sure to have good domain - if($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*") { + if(substr($domain,0,4) != 'www.' && ($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*")) { $temp_domains[] = "www." . $domain; } @@ -1281,7 +1281,7 @@ class nginx_plugin { if(is_array($aliasdomains)) { foreach($aliasdomains as $aliasdomain) { $temp_domains[] = $aliasdomain['domain']; - if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) { + if(isset($aliasdomain['subdomain']) && substr($aliasdomain['domain'],0,4) != 'www.' && ($aliasdomain['subdomain'] == "www" OR $aliasdomain['subdomain'] == "*")) { $temp_domains[] = "www." . $aliasdomain['domain']; } @@ -1313,6 +1313,7 @@ class nginx_plugin { //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) { // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); + $app->log("Let's Encrypt SSL Cert domains: $lddomain", LOGLEVEL_DEBUG); $success = false; $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')); -- GitLab From 6c9798e50379cb35d75a941073070662a603c3ea Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Wed, 20 Jul 2016 18:45:21 +0200 Subject: [PATCH 099/313] Fixed: Issue #4007 Language in mail user interface is not the language of the client. --- interface/web/login/index.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/interface/web/login/index.php b/interface/web/login/index.php index 2ecf4ac93d..349f233760 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -159,6 +159,9 @@ if(count($_POST) > 0) { $saved_password = stripslashes($mailuser['password']); //* Check if mailuser password is correct if(crypt(stripslashes($password), $saved_password) == $saved_password) { + //* Get the sys_user language of the client of the mailuser + $sys_user_lang = $app->db->queryOneRecord("SELECT language FROM sys_user WHERE default_group = ?", $mailuser['sys_groupid'] ); + //* we build a fake user here which has access to the mailuser module only and userid 0 $user = array(); $user['userid'] = 0; @@ -168,7 +171,11 @@ if(count($_POST) > 0) { $user['typ'] = 'user'; $user['email'] = $mailuser['email']; $user['username'] = $username; - $user['language'] = $conf['language']; + if(is_array($sys_user_lang) && $sys_user_lang['language'] != '') { + $user['language'] = $sys_user_lang['language']; + } else { + $user['language'] = $conf['language']; + } $user['theme'] = $conf['theme']; $user['app_theme'] = $conf['theme']; $user['mailuser_id'] = $mailuser['mailuser_id']; -- GitLab From 1ecb9918ccf080707fd43e49d1e03f91dcaadb52 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Wed, 20 Jul 2016 22:56:03 +0200 Subject: [PATCH 100/313] Removed inline javascript --- interface/web/client/templates/reseller_edit_address.htm | 4 ++-- interface/web/mail/templates/mail_user_mailbox_edit.htm | 4 ++-- .../web/mailuser/templates/mail_user_password_edit.htm | 4 ++-- .../web/themes/default/assets/javascripts/ispconfig.js | 7 ++++++- .../web/themes/default/assets/javascripts/ispconfig.min.js | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm index e5b0a5540b..26021539b5 100644 --- a/interface/web/client/templates/reseller_edit_address.htm +++ b/interface/web/client/templates/reseller_edit_address.htm @@ -31,7 +31,7 @@
- + @@ -47,7 +47,7 @@
-
+
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm index 754c6b7ee1..0e692199da 100644 --- a/interface/web/mail/templates/mail_user_mailbox_edit.htm +++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm @@ -29,7 +29,7 @@
- + @@ -46,7 +46,7 @@
-
+
diff --git a/interface/web/mailuser/templates/mail_user_password_edit.htm b/interface/web/mailuser/templates/mail_user_password_edit.htm index b35a5c447d..7ad0a9ed5f 100644 --- a/interface/web/mailuser/templates/mail_user_password_edit.htm +++ b/interface/web/mailuser/templates/mail_user_password_edit.htm @@ -15,7 +15,7 @@
- + @@ -31,7 +31,7 @@
-
+
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js index d791b19cba..dbe96d90bd 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.js @@ -550,7 +550,12 @@ var ISPConfig = { } }; - +function removeReadOnly(password) { + password.removeAttribute('readonly'); + password.removeAttribute('data-original-title'); + password.removeAttribute('data-toggle'); + password.removeAttribute('data-placement'); +} $(document).on("change", function(event) { var elName = event.target.localName; if ($("#pageForm .table #Filter").length > 0 && elName == 'select') { diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.min.js b/interface/web/themes/default/assets/javascripts/ispconfig.min.js index a54f3cb89a..bfadfb328e 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.min.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.min.js @@ -1 +1 @@ -var ISPConfig={pageFormChanged:false,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:false,tabChangeDiscard:false,requestsRunning:0,indicatorCompleted:false,registeredHooks:new Array(),new_tpl_add_id:0,options:{useLoadIndicator:false,useComboBox:false},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(a){},registerHook:function(a,c){if(!ISPConfig.registeredHooks[a]){ISPConfig.registeredHooks[a]=new Array()}var b=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][b]=c},callHook:function(a,c){if(!ISPConfig.registeredHooks[a]){return}for(var b=0;b
');a.appendTo("body")}var b=$("#content");if(b.length<1){return}ISPConfig.indicatorCompleted=false;var d=b.offset().left+150;var c=b.offset().top+150;a.css({left:d,top:c}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=true;if(ISPConfig.requestsRunning<1){$(this).fadeOut("fast",function(){$(this).hide()})}})}}},hideLoadIndicator:function(){document.body.style.cursor="";ISPConfig.requestsRunning-=1;if(ISPConfig.requestsRunning<1){ISPConfig.requestsRunning=0;if(ISPConfig.indicatorCompleted==true){$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()})}}},onAfterSideNavLoaded:function(){if(ISPConfig.options.useComboBox==true){$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true})}},onAfterContentLoad:function(a,b){if(!b){b=""}else{b="&"+b}if(ISPConfig.options.useComboBox==true){$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true,formatResult:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return''+c.text+""}else{return c.text}},formatSelection:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return''+c.text+""}else{return c.text}}}).on("change",function(c){if($("#pageForm .table #Filter").length>0){$("#pageForm .table #Filter").trigger("click")}})}$('input[data-input-element="date"]').datetimepicker({language:"en",todayHighlight:true,todayBtn:"linked",bootcssVer:3,fontAwesome:true,autoclose:true,minView:"month"});$('input[data-input-element="datetime"]').datetimepicker({language:"en",todayHighlight:true,todayBtn:"linked",bootcssVer:3,fontAwesome:true,autoclose:true});ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitForm:function(d,e,c){var b=arguments[3];if(!c){c=false}if(!c||window.confirm(c)){var a=$.ajax({type:"POST",url:e,data:$("#"+d).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(g,i,f){if(b){alert(b)}if(f.responseText.indexOf("HEADER_REDIRECT:")>-1){var h=f.responseText.split(":");ISPConfig.loadContent(h[1])}else{if(f.responseText.indexOf("LOGIN_REDIRECT:")>-1){document.location.href="/index.php"}else{$("#pageContent").html(f.responseText);ISPConfig.onAfterContentLoad(e,$("#"+d).serialize());ISPConfig.pageFormChanged=false}}ISPConfig.hideLoadIndicator()},error:function(f,i,h){ISPConfig.hideLoadIndicator();var g=f.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(c,d){var b=function(n){var h,j=n.contentWindow.document.body.innerHTML;try{h=JSON.parse(j)}catch(k){h=j}var o=$("
").html(h);var f="";var l=o.find("#OKMsg").html();if(l){f='
'+l+"
"}var i=o.find("#errorMsg").html();if(i){f=f+'
'+i+"
"}var m=o.find('input[name="_csrf_key"]').val();var g=o.find('input[name="_csrf_id"]').val();f=f+'';return f};var a="ajaxUploader-iframe-"+Math.round(new Date().getTime()/1000);$("body").append('