From 9e6a611833d3b807f363817225f26152164c7be6 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 27 Feb 2019 10:03:22 +0100 Subject: [PATCH 001/403] WIP add CI test to install ispconfig in a clean container --- .gitlab-ci.yml | 16 ++++++++++++++++ helper_scripts/test_install_docker.sh | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100755 helper_scripts/test_install_docker.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 736fbc3083..a81b3b5aa6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ # Defines stages which are to be executed stages: - syntax + - test # ### Stage syntax @@ -13,6 +14,7 @@ syntax:lint: only: - schedules - web + - merge_requests script: - composer require overtrue/phplint @@ -20,3 +22,17 @@ syntax:lint: - echo "For more information http://www.icosaedro.it/phplint/" - vendor/bin/phplint + +test:install: + stage: test + image: jerob/docker-ispconfig + only: + - schedules + - web + - merge_requests + script: + - $CI_PROJECT_DIR/helper_scripts/test_install_docker.sh + - apt-get update + - apt-get --yes install curl + - curl --insecure https://127.0.0.1:8080/login/ + - ps xaf diff --git a/helper_scripts/test_install_docker.sh b/helper_scripts/test_install_docker.sh new file mode 100755 index 0000000000..4de61c3895 --- /dev/null +++ b/helper_scripts/test_install_docker.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# This script is used from .gitlab-ci.yml to do an automated installation inside a docker container for testing. + +if [ -f /usr/local/ispconfig/interface/lib/config.inc.php ]; then + echo "Found an existing configfile, bailing out!" + exit 1 +fi + +mysql_install_db +service mysql start \ +&& echo "UPDATE mysql.user SET Password = PASSWORD('pass') WHERE User = 'root';" | mysql -u root \ +&& echo "UPDATE mysql.user SET plugin='mysql_native_password' where user='root';" | mysql -u root \ +&& echo "DELETE FROM mysql.user WHERE User='';" | mysql -u root \ +&& echo "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" | mysql -u root \ +&& echo "DROP DATABASE IF EXISTS test;" | mysql -u root \ +&& echo "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" | mysql -u root \ +&& echo "FLUSH PRIVILEGES;" | mysql -u root +sed -i "s/^hostname=server1.example.com$/hostname=$HOSTNAME/g" /root/ispconfig3_install/install/autoinstall.ini + +service mysql start && php -q $CI_PROJECT_DIR/install/install.php --autoinstall=/root/ispconfig3_install/install/autoinstall.ini -- GitLab From 039db24f9a900b4b2c0141bfd5eb6d665dc19ed6 Mon Sep 17 00:00:00 2001 From: Robert Breithuber Date: Wed, 9 Sep 2020 17:59:52 +0200 Subject: [PATCH 002/403] makes the language configurable for each site, it reads the "Lang" parameter from awstats.DOMAIN.conf before it gets deleted and adds the parameter to the content before the new config file is written. the "-lang" parameter is removed from the awstats-command, so the global value for lang in awstats.conf.local or the value in awstats.DOMAIN.conf gets respected. Closes #3668 --- server/lib/classes/cron.d/150-awstats.inc.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php index 891919cb02..2edf0222f0 100644 --- a/server/lib/classes/cron.d/150-awstats.inc.php +++ b/server/lib/classes/cron.d/150-awstats.inc.php @@ -86,7 +86,14 @@ class cronjob_awstats extends cronjob { $awstats_conf_dir = $web_config['awstats_conf_dir']; $awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf'; - if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file); + $existing_awstats_conf_array = array(); + if(is_file($awstats_website_conf_file)) { + $existing_awstats_conf = file($awstats_website_conf_file); + foreach ($existing_awstats_conf as $line) { + if(preg_match("/Lang=/",$line)) $existing_awstats_conf_array['Lang'] = implode('',parse_ini_string($line)); + } + unlink($awstats_website_conf_file); + } $sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') AND parent_domain_id = ?"; $aliases = $app->db->queryAllRecords($sql, $rec['domain_id']); @@ -108,6 +115,8 @@ class cronjob_awstats extends cronjob { LogFile="/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log" SiteDomain="'.$domain.'" HostAliases="www.'.$domain.' localhost 127.0.0.1'.$aliasdomain.'"'; + if (array_key_exists('Lang',$existing_awstats_conf_array)) $awstats_conf_file_content .=' + Lang="'.$existing_awstats_conf_array['Lang'].'"'; if (isset($include_file)) { file_put_contents($awstats_website_conf_file, $awstats_conf_file_content); } else { @@ -134,7 +143,7 @@ class cronjob_awstats extends cronjob { } } - $command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -lang=' . escapeshellarg($conf['language']) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl); + $command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl) . '"; if (date("d") == 2) { $awmonth = date("m")-1; -- GitLab From 102a8bfcd55cf2b663e257bcd9a29d6516ba32ae Mon Sep 17 00:00:00 2001 From: Robert Breithuber Date: Wed, 9 Sep 2020 21:04:42 +0200 Subject: [PATCH 003/403] Update 150-awstats.inc.php --- server/lib/classes/cron.d/150-awstats.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php index 2edf0222f0..cd981baf8a 100644 --- a/server/lib/classes/cron.d/150-awstats.inc.php +++ b/server/lib/classes/cron.d/150-awstats.inc.php @@ -143,7 +143,7 @@ class cronjob_awstats extends cronjob { } } - $command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl) . '"; + $command = escapeshellcmd($awstats_buildstaticpages_pl) . ' -month=' . escapeshellarg($awmonth) . ' -year=' . escapeshellarg($awyear) . ' -update -config=' . escapeshellarg($domain) . ' -dir=' . escapeshellarg($statsdir) . ' -awstatsprog=' . escapeshellarg($awstats_pl); if (date("d") == 2) { $awmonth = date("m")-1; -- GitLab From 682be6d148814787c393ec40e3f504fc3b1f3ebf Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 11 Sep 2020 08:16:29 +0200 Subject: [PATCH 004/403] update caa-check --- server/lib/classes/letsencrypt.inc.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index fb67e7c00d..77be94c105 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -373,6 +373,17 @@ class letsencrypt { if((isset($web_config['skip_le_check']) && $web_config['skip_le_check'] == 'y') || (isset($server_config['migration_mode']) && $server_config['migration_mode'] == 'y')) { $le_domains[] = $temp_domain; } else { + $le_hash_check = trim(@file_get_contents('http://' . $temp_domain . '/.well-known/acme-challenge/' . $le_rnd_file)); + if($le_hash_check == $le_rnd_hash) { + $le_domains[] = $temp_domain; + $app->log("Verified domain " . $temp_domain . " should be reachable for letsencrypt.", LOGLEVEL_DEBUG); + } else { + $app->log("Could not verify domain " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN); + } + } + } + if(!empty($le_domains)) { + foreach($le_domains as $idx=>$temp_domain) { //check caa-record $caa_check = false; $caa_domain = $temp_domain; @@ -393,20 +404,13 @@ class letsencrypt { $caa_check = true; } - if($caa_check === true) { - $le_hash_check = trim(@file_get_contents('http://' . $temp_domain . '/.well-known/acme-challenge/' . $le_rnd_file)); - if($le_hash_check == $le_rnd_hash) { - $le_domains[] = $temp_domain; - $app->log("Verified domain " . $temp_domain . " should be reachable for letsencrypt.", LOGLEVEL_DEBUG); - } else { - $app->log("Could not verify domain " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN); - } - } else { + if($caa_check === false) { $app->log("Incomplete CAA-Records for " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN); + unset($le_domains[$idx]); } - } } + $temp_domains = $le_domains; unset($le_domains); @unlink('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/' . $le_rnd_file); -- GitLab From f1e4b77e7a73f56841c4f4b985214b7764507c12 Mon Sep 17 00:00:00 2001 From: thom Date: Fri, 2 Oct 2020 11:44:41 +0200 Subject: [PATCH 005/403] Purge Apps & Addons (#5795) --- install/lib/installer_base.lib.php | 3 - .../sql/incremental/upd_dev_collection.sql | 6 +- install/sql/ispconfig3.sql | 90 ------ install/tpl/config.inc.php.master | 12 +- install/tpl/security_settings.ini.master | 3 - interface/lib/config.inc.php | 4 - .../web/admin/form/software_package.tform.php | 128 -------- .../web/admin/form/software_repo.tform.php | 171 ---------- .../admin/lib/lang/ar_software_package.lng | 6 - .../lib/lang/ar_software_package_install.lng | 6 - .../lib/lang/ar_software_package_list.lng | 13 - .../web/admin/lib/lang/ar_software_repo.lng | 8 - .../admin/lib/lang/ar_software_repo_list.lng | 6 - .../lib/lang/ar_software_update_list.lng | 9 - .../admin/lib/lang/bg_software_package.lng | 6 - .../lib/lang/bg_software_package_install.lng | 6 - .../lib/lang/bg_software_package_list.lng | 13 - .../web/admin/lib/lang/bg_software_repo.lng | 8 - .../admin/lib/lang/bg_software_repo_list.lng | 6 - .../lib/lang/bg_software_update_list.lng | 9 - .../admin/lib/lang/br_software_package.lng | 6 - .../lib/lang/br_software_package_install.lng | 6 - .../lib/lang/br_software_package_list.lng | 13 - .../web/admin/lib/lang/br_software_repo.lng | 8 - .../admin/lib/lang/br_software_repo_list.lng | 6 - .../lib/lang/br_software_update_list.lng | 9 - .../admin/lib/lang/ca_software_package.lng | 6 - .../lib/lang/ca_software_package_install.lng | 6 - .../lib/lang/ca_software_package_list.lng | 13 - .../web/admin/lib/lang/ca_software_repo.lng | 8 - .../admin/lib/lang/ca_software_repo_list.lng | 6 - .../lib/lang/ca_software_update_list.lng | 9 - .../admin/lib/lang/cz_software_package.lng | 6 - .../lib/lang/cz_software_package_install.lng | 6 - .../lib/lang/cz_software_package_list.lng | 13 - .../web/admin/lib/lang/cz_software_repo.lng | 8 - .../admin/lib/lang/cz_software_repo_list.lng | 6 - .../lib/lang/cz_software_update_list.lng | 9 - .../admin/lib/lang/de_software_package.lng | 6 - .../lib/lang/de_software_package_install.lng | 6 - .../lib/lang/de_software_package_list.lng | 13 - .../web/admin/lib/lang/de_software_repo.lng | 8 - .../admin/lib/lang/de_software_repo_list.lng | 6 - .../lib/lang/de_software_update_list.lng | 9 - .../admin/lib/lang/dk_software_package.lng | 6 - .../lib/lang/dk_software_package_install.lng | 6 - .../lib/lang/dk_software_package_list.lng | 13 - .../web/admin/lib/lang/dk_software_repo.lng | 8 - .../admin/lib/lang/dk_software_repo_list.lng | 6 - .../lib/lang/dk_software_update_list.lng | 9 - .../admin/lib/lang/el_software_package.lng | 6 - .../lib/lang/el_software_package_install.lng | 6 - .../lib/lang/el_software_package_list.lng | 13 - .../web/admin/lib/lang/el_software_repo.lng | 8 - .../admin/lib/lang/el_software_repo_list.lng | 6 - .../lib/lang/el_software_update_list.lng | 9 - .../admin/lib/lang/en_software_package.lng | 6 - .../lib/lang/en_software_package_install.lng | 6 - .../lib/lang/en_software_package_list.lng | 13 - .../web/admin/lib/lang/en_software_repo.lng | 8 - .../admin/lib/lang/en_software_repo_list.lng | 6 - .../lib/lang/en_software_update_list.lng | 9 - .../admin/lib/lang/es_software_package.lng | 6 - .../lib/lang/es_software_package_install.lng | 6 - .../lib/lang/es_software_package_list.lng | 13 - .../web/admin/lib/lang/es_software_repo.lng | 8 - .../admin/lib/lang/es_software_repo_list.lng | 6 - .../lib/lang/es_software_update_list.lng | 9 - .../admin/lib/lang/fi_software_package.lng | 6 - .../lib/lang/fi_software_package_install.lng | 6 - .../lib/lang/fi_software_package_list.lng | 13 - .../web/admin/lib/lang/fi_software_repo.lng | 8 - .../admin/lib/lang/fi_software_repo_list.lng | 6 - .../lib/lang/fi_software_update_list.lng | 9 - .../admin/lib/lang/fr_software_package.lng | 6 - .../lib/lang/fr_software_package_install.lng | 6 - .../lib/lang/fr_software_package_list.lng | 13 - .../web/admin/lib/lang/fr_software_repo.lng | 8 - .../admin/lib/lang/fr_software_repo_list.lng | 6 - .../lib/lang/fr_software_update_list.lng | 9 - .../admin/lib/lang/hr_software_package.lng | 6 - .../lib/lang/hr_software_package_install.lng | 6 - .../lib/lang/hr_software_package_list.lng | 13 - .../web/admin/lib/lang/hr_software_repo.lng | 8 - .../admin/lib/lang/hr_software_repo_list.lng | 6 - .../lib/lang/hr_software_update_list.lng | 9 - .../admin/lib/lang/hu_software_package.lng | 6 - .../lib/lang/hu_software_package_install.lng | 6 - .../lib/lang/hu_software_package_list.lng | 13 - .../web/admin/lib/lang/hu_software_repo.lng | 8 - .../admin/lib/lang/hu_software_repo_list.lng | 6 - .../lib/lang/hu_software_update_list.lng | 9 - .../admin/lib/lang/id_software_package.lng | 6 - .../lib/lang/id_software_package_install.lng | 6 - .../lib/lang/id_software_package_list.lng | 13 - .../web/admin/lib/lang/id_software_repo.lng | 8 - .../admin/lib/lang/id_software_repo_list.lng | 6 - .../lib/lang/id_software_update_list.lng | 9 - .../admin/lib/lang/it_software_package.lng | 6 - .../lib/lang/it_software_package_install.lng | 6 - .../lib/lang/it_software_package_list.lng | 13 - .../web/admin/lib/lang/it_software_repo.lng | 8 - .../admin/lib/lang/it_software_repo_list.lng | 6 - .../lib/lang/it_software_update_list.lng | 9 - .../admin/lib/lang/ja_software_package.lng | 6 - .../lib/lang/ja_software_package_install.lng | 6 - .../lib/lang/ja_software_package_list.lng | 13 - .../web/admin/lib/lang/ja_software_repo.lng | 8 - .../admin/lib/lang/ja_software_repo_list.lng | 6 - .../lib/lang/ja_software_update_list.lng | 9 - .../admin/lib/lang/nl_software_package.lng | 6 - .../lib/lang/nl_software_package_install.lng | 6 - .../lib/lang/nl_software_package_list.lng | 13 - .../web/admin/lib/lang/nl_software_repo.lng | 8 - .../admin/lib/lang/nl_software_repo_list.lng | 6 - .../lib/lang/nl_software_update_list.lng | 9 - .../admin/lib/lang/pl_software_package.lng | 6 - .../lib/lang/pl_software_package_install.lng | 6 - .../lib/lang/pl_software_package_list.lng | 13 - .../web/admin/lib/lang/pl_software_repo.lng | 8 - .../admin/lib/lang/pl_software_repo_list.lng | 6 - .../lib/lang/pl_software_update_list.lng | 9 - .../admin/lib/lang/pt_software_package.lng | 6 - .../lib/lang/pt_software_package_install.lng | 6 - .../lib/lang/pt_software_package_list.lng | 13 - .../web/admin/lib/lang/pt_software_repo.lng | 8 - .../admin/lib/lang/pt_software_repo_list.lng | 6 - .../lib/lang/pt_software_update_list.lng | 9 - .../admin/lib/lang/ro_software_package.lng | 6 - .../lib/lang/ro_software_package_install.lng | 6 - .../lib/lang/ro_software_package_list.lng | 13 - .../web/admin/lib/lang/ro_software_repo.lng | 8 - .../admin/lib/lang/ro_software_repo_list.lng | 6 - .../lib/lang/ro_software_update_list.lng | 9 - .../admin/lib/lang/ru_software_package.lng | 6 - .../lib/lang/ru_software_package_install.lng | 6 - .../lib/lang/ru_software_package_list.lng | 13 - .../web/admin/lib/lang/ru_software_repo.lng | 8 - .../admin/lib/lang/ru_software_repo_list.lng | 6 - .../lib/lang/ru_software_update_list.lng | 9 - .../admin/lib/lang/se_software_package.lng | 6 - .../lib/lang/se_software_package_install.lng | 6 - .../lib/lang/se_software_package_list.lng | 13 - .../web/admin/lib/lang/se_software_repo.lng | 8 - .../admin/lib/lang/se_software_repo_list.lng | 6 - .../lib/lang/se_software_update_list.lng | 9 - .../admin/lib/lang/sk_software_package.lng | 6 - .../lib/lang/sk_software_package_install.lng | 6 - .../lib/lang/sk_software_package_list.lng | 13 - .../web/admin/lib/lang/sk_software_repo.lng | 8 - .../admin/lib/lang/sk_software_repo_list.lng | 6 - .../lib/lang/sk_software_update_list.lng | 9 - .../admin/lib/lang/tr_software_package.lng | 6 - .../lib/lang/tr_software_package_install.lng | 6 - .../lib/lang/tr_software_package_list.lng | 13 - .../web/admin/lib/lang/tr_software_repo.lng | 8 - .../admin/lib/lang/tr_software_repo_list.lng | 6 - .../lib/lang/tr_software_update_list.lng | 9 - interface/web/admin/lib/module.conf.php | 24 -- .../web/admin/list/software_repo.list.php | 78 ----- interface/web/admin/software_package_del.php | 57 ---- interface/web/admin/software_package_edit.php | 60 ---- .../web/admin/software_package_install.php | 179 ----------- interface/web/admin/software_package_list.php | 200 ------------ interface/web/admin/software_repo_del.php | 53 --- interface/web/admin/software_repo_edit.php | 60 ---- interface/web/admin/software_repo_list.php | 52 --- interface/web/admin/software_update_list.php | 204 ------------ .../admin/templates/software_package_edit.htm | 22 -- .../templates/software_package_install.htm | 31 -- .../admin/templates/software_package_list.htm | 55 ---- .../admin/templates/software_repo_edit.htm | 26 -- .../admin/templates/software_repo_list.htm | 58 ---- .../admin/templates/software_update_list.htm | 53 --- security/README.txt | 22 +- server/mods-available/server_module.inc.php | 11 +- .../software_update_plugin.inc.php | 303 ------------------ 177 files changed, 16 insertions(+), 3149 deletions(-) delete mode 100644 interface/web/admin/form/software_package.tform.php delete mode 100644 interface/web/admin/form/software_repo.tform.php delete mode 100644 interface/web/admin/lib/lang/ar_software_package.lng delete mode 100644 interface/web/admin/lib/lang/ar_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/ar_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/ar_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/ar_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/ar_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_package.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/bg_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/br_software_package.lng delete mode 100644 interface/web/admin/lib/lang/br_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/br_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/br_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/br_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/br_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_package.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/ca_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_package.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/cz_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/de_software_package.lng delete mode 100644 interface/web/admin/lib/lang/de_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/de_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/de_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/de_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/de_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_package.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/dk_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/el_software_package.lng delete mode 100644 interface/web/admin/lib/lang/el_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/el_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/el_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/el_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/el_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/en_software_package.lng delete mode 100644 interface/web/admin/lib/lang/en_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/en_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/en_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/en_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/en_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/es_software_package.lng delete mode 100644 interface/web/admin/lib/lang/es_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/es_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/es_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/es_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/es_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_package.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/fi_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_package.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/fr_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_package.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/hr_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_package.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/hu_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/id_software_package.lng delete mode 100644 interface/web/admin/lib/lang/id_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/id_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/id_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/id_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/id_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/it_software_package.lng delete mode 100644 interface/web/admin/lib/lang/it_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/it_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/it_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/it_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/it_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_package.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/ja_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_package.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/nl_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_package.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/pl_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_package.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/pt_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_package.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/ro_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_package.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/ru_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/se_software_package.lng delete mode 100644 interface/web/admin/lib/lang/se_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/se_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/se_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/se_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/se_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_package.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/sk_software_update_list.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_package.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_package_install.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_package_list.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_repo.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_repo_list.lng delete mode 100644 interface/web/admin/lib/lang/tr_software_update_list.lng delete mode 100644 interface/web/admin/list/software_repo.list.php delete mode 100644 interface/web/admin/software_package_del.php delete mode 100644 interface/web/admin/software_package_edit.php delete mode 100644 interface/web/admin/software_package_install.php delete mode 100644 interface/web/admin/software_package_list.php delete mode 100644 interface/web/admin/software_repo_del.php delete mode 100644 interface/web/admin/software_repo_edit.php delete mode 100644 interface/web/admin/software_repo_list.php delete mode 100644 interface/web/admin/software_update_list.php delete mode 100644 interface/web/admin/templates/software_package_edit.htm delete mode 100644 interface/web/admin/templates/software_package_install.htm delete mode 100644 interface/web/admin/templates/software_package_list.htm delete mode 100644 interface/web/admin/templates/software_repo_edit.htm delete mode 100644 interface/web/admin/templates/software_repo_list.htm delete mode 100644 interface/web/admin/templates/software_update_list.htm delete mode 100644 server/plugins-available/software_update_plugin.inc.php diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index c82fd16537..ff6110c1e8 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -646,9 +646,6 @@ class installer_base { if ($verbose){ echo $query ."\n"; } - if(!$this->dbmaster->query($query, $value['db'] . '.software_update_inst', $value['user'], $host)) { - $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); - } $query = "GRANT SELECT, UPDATE(`updated`) ON ?? TO ?@?"; if ($verbose){ diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 8b13789179..89585deb9c 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1 +1,5 @@ - +-- Purge apps & addons installer (#5795) +DROP TABLE 'software_package'; +DROP TABLE 'software_repo'; +DROP TABLE 'software_update'; +DROP TABLE 'software_update_inst'; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 67f0f3bdcb..3ef6388e9c 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -1461,88 +1461,6 @@ CREATE TABLE `shell_user` ( -- -------------------------------------------------------- --- --- Table structure for table `software_package` --- - -CREATE TABLE `software_package` ( - `package_id` int(11) unsigned NOT NULL auto_increment, - `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0', - `package_name` varchar(64) NOT NULL DEFAULT '', - `package_title` varchar(64) NOT NULL DEFAULT '', - `package_description` text, - `package_version` varchar(8) default NULL, - `package_type` enum('ispconfig','app','web') NOT NULL default 'app', - `package_installable` enum('yes','no','key') NOT NULL default 'yes', - `package_requires_db` enum('no','mysql') NOT NULL default 'no', - `package_remote_functions` text, - `package_key` varchar(255) NOT NULL DEFAULT '', - `package_config` text, - PRIMARY KEY (`package_id`), - UNIQUE KEY `package_name` (`package_name`) -) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `software_repo` --- - -CREATE TABLE `software_repo` ( - `software_repo_id` int(11) unsigned NOT NULL auto_increment, - `sys_userid` int(11) unsigned NOT NULL default '0', - `sys_groupid` int(11) unsigned NOT NULL default '0', - `sys_perm_user` varchar(5) default NULL, - `sys_perm_group` varchar(5) default NULL, - `sys_perm_other` varchar(5) default NULL, - `repo_name` varchar(64) default NULL, - `repo_url` varchar(255) default NULL, - `repo_username` varchar(64) default NULL, - `repo_password` varchar(64) default NULL, - `active` enum('n','y') NOT NULL default 'y', - PRIMARY KEY (`software_repo_id`) -) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `software_update` --- - -CREATE TABLE `software_update` ( - `software_update_id` int(11) unsigned NOT NULL auto_increment, - `software_repo_id` int(11) unsigned NOT NULL DEFAULT '0', - `package_name` varchar(64) NOT NULL DEFAULT '', - `update_url` varchar(255) NOT NULL DEFAULT '', - `update_md5` varchar(255) NOT NULL DEFAULT '', - `update_dependencies` varchar(255) NOT NULL DEFAULT '', - `update_title` varchar(64) NOT NULL DEFAULT '', - `v1` tinyint(1) NOT NULL default '0', - `v2` tinyint(1) NOT NULL default '0', - `v3` tinyint(1) NOT NULL default '0', - `v4` tinyint(1) NOT NULL default '0', - `type` enum('full','update') NOT NULL default 'full', - PRIMARY KEY (`software_update_id`) -) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `software_update_inst` --- - -CREATE TABLE `software_update_inst` ( - `software_update_inst_id` int(11) unsigned NOT NULL auto_increment, - `software_update_id` int(11) unsigned NOT NULL default '0', - `package_name` varchar(64) NOT NULL DEFAULT '', - `server_id` int(11) unsigned NOT NULL DEFAULT '0', - `status` enum('none','installing','installed','deleting','deleted','failed') NOT NULL default 'none', - PRIMARY KEY (`software_update_inst_id`), - UNIQUE KEY `software_update_id` (`software_update_id`,`package_name`,`server_id`) -) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - -- -- Table structure for table `spamfilter_policy` -- @@ -2528,14 +2446,6 @@ INSERT INTO `help_faq_sections` VALUES (1,'General',0,NULL,NULL,NULL,NULL,NULL); -- -------------------------------------------------------- --- --- Dumping data for table `software_repo` --- - -INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `repo_name`, `repo_url`, `repo_username`, `repo_password`, `active`) VALUES (1, 1, 1, 'riud', 'riud', '', 'ISPConfig Addons', 'http://repo.ispconfig.org/addons/', '', '', 'n'); - --- -------------------------------------------------------- - -- -- Dumping data for table `spamfilter_policy` -- diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master index 946a3ee505..bd5cc8f47f 100644 --- a/install/tpl/config.inc.php.master +++ b/install/tpl/config.inc.php.master @@ -33,11 +33,11 @@ if( !empty($_SERVER['DOCUMENT_ROOT']) ) { Header("Pragma: no-cache"); Header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate"); Header("Content-Type: text/html; charset=utf-8"); - + //** Set a few php.ini values ini_set('register_globals',0); ini_set('magic_quotes_gpc', 0); - + if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS']) || isset($_REQUEST['s']) || isset($_REQUEST['s_old']) || isset($_REQUEST['conf'])) { die('Internal Error: var override attempt detected'); exit; @@ -127,8 +127,8 @@ $conf['init_scripts'] = '/etc/init.d'; $conf['interface_modules_enabled'] = 'dashboard,mail,sites,dns,tools,help'; //** Demo mode -/* The demo mode is an option to restrict certain actions in the interface like -* changing the password of users with sys_userid < 3 etc. to be +/* The demo mode is an option to restrict certain actions in the interface like +* changing the password of users with sys_userid < 3 etc. to be * able to run the ISPConfig interface as online demo. It does not * affect the server part. The demo mode should be always set to false * on every normal installation @@ -141,10 +141,6 @@ $conf['log_file'] = $conf['ispconfig_log_dir'].$conf['fs_div'].'ispconfig.log'; $conf['log_priority'] = {ispconfig_log_priority}; // 0 = Debug, 1 = Warning, 2 = Error -//** Allow software package installations -$conf['software_updates_enabled'] = false; - - //** Themes $conf['theme'] = '{theme}'; $conf['html_content_encoding'] = 'utf-8'; // example: utf-8, iso-8859-1, ... diff --git a/install/tpl/security_settings.ini.master b/install/tpl/security_settings.ini.master index c135652e17..02b1058074 100644 --- a/install/tpl/security_settings.ini.master +++ b/install/tpl/security_settings.ini.master @@ -12,8 +12,6 @@ admin_allow_del_cpuser=superadmin admin_allow_cpuser_group=superadmin admin_allow_firewall_config=superadmin admin_allow_osupdate=superadmin -admin_allow_software_packages=superadmin -admin_allow_software_repo=superadmin remote_api_allowed=yes password_reset_allowed=yes session_regenerate_id=yes @@ -44,4 +42,3 @@ warn_new_admin=yes warn_passwd_change=no warn_shadow_change=no warn_group_change=no - diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php index ccda3717e1..c5d14d79cd 100644 --- a/interface/lib/config.inc.php +++ b/interface/lib/config.inc.php @@ -128,10 +128,6 @@ $conf['log_file'] = $conf['ispconfig_log_dir'].'/ispconfig.log'; $conf['log_priority'] = 0; // 0 = Debug, 1 = Warning, 2 = Error -//** Allow software package installations -$conf['software_updates_enabled'] = false; - - //** Themes $conf['theme'] = 'default'; $conf['html_content_encoding'] = 'utf-8'; // example: utf-8, iso-8859-1, ... diff --git a/interface/web/admin/form/software_package.tform.php b/interface/web/admin/form/software_package.tform.php deleted file mode 100644 index b8368d5457..0000000000 --- a/interface/web/admin/form/software_package.tform.php +++ /dev/null @@ -1,128 +0,0 @@ - 0 id must match with id of current user -$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user -$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete -$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete -$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete - -$form["tabs"]['software_package'] = array ( - 'title' => "Software Package", - 'width' => 80, - 'template' => "templates/software_package_edit.htm", - 'fields' => array ( - //################################# - // Beginn Datenbankfelder - //################################# - 'package_title' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'filters' => array( - 0 => array( 'event' => 'SAVE', - 'type' => 'STRIPTAGS'), - 1 => array( 'event' => 'SAVE', - 'type' => 'STRIPNL') - ), - 'validators' => '', - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '40', - 'maxlength' => '40', - 'rows' => '', - 'cols' => '' - ), - 'package_key' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'filters' => array( - 0 => array( 'event' => 'SAVE', - 'type' => 'STRIPTAGS'), - 1 => array( 'event' => 'SAVE', - 'type' => 'STRIPNL') - ), - 'validators' => '', - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '40', - 'maxlength' => '40', - 'rows' => '', - 'cols' => '' - ), - //################################# - // ENDE Datenbankfelder - //################################# - ) -); -?> diff --git a/interface/web/admin/form/software_repo.tform.php b/interface/web/admin/form/software_repo.tform.php deleted file mode 100644 index cbf68b3a35..0000000000 --- a/interface/web/admin/form/software_repo.tform.php +++ /dev/null @@ -1,171 +0,0 @@ - 0 id must match with id of current user -$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user -$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete -$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete -$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete - -$form["tabs"]['software_repo'] = array ( - 'title' => "Repository", - 'width' => 80, - 'template' => "templates/software_repo_edit.htm", - 'fields' => array ( - //################################# - // Beginn Datenbankfelder - //################################# - 'repo_name' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', - 'errmsg'=> 'repo_name_empty'), - 1 => array ( 'type' => 'UNIQUE', - 'errmsg'=> 'repo_name_unique'), - ), - 'filters' => array( - 0 => array( 'event' => 'SAVE', - 'type' => 'STRIPTAGS'), - 1 => array( 'event' => 'SAVE', - 'type' => 'STRIPNL') - ), - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '40', - 'maxlength' => '40', - 'rows' => '', - 'cols' => '' - ), - 'repo_url' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', - 'errmsg'=> 'repo_name_empty'), - 1 => array ( 'type' => 'UNIQUE', - 'errmsg'=> 'repo_name_unique'), - ), - 'filters' => array( - 0 => array( 'event' => 'SAVE', - 'type' => 'STRIPTAGS'), - 1 => array( 'event' => 'SAVE', - 'type' => 'STRIPNL') - ), - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '40', - 'maxlength' => '40', - 'rows' => '', - 'cols' => '' - ), - 'repo_username' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'filters' => array( - 0 => array( 'event' => 'SAVE', - 'type' => 'STRIPTAGS'), - 1 => array( 'event' => 'SAVE', - 'type' => 'STRIPNL') - ), - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '30', - 'maxlength' => '30', - 'rows' => '', - 'cols' => '' - ), - 'repo_password' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'PASSWORD', - 'encryption' => 'CLEARTEXT', - 'default' => '', - 'value' => '', - 'separator' => '', - 'width' => '30', - 'maxlength' => '30', - 'rows' => '', - 'cols' => '' - ), - 'active' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - //################################# - // ENDE Datenbankfelder - //################################# - ) -); -?> diff --git a/interface/web/admin/lib/lang/ar_software_package.lng b/interface/web/admin/lib/lang/ar_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/ar_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ar_software_package_install.lng b/interface/web/admin/lib/lang/ar_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/ar_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ar_software_package_list.lng b/interface/web/admin/lib/lang/ar_software_package_list.lng deleted file mode 100644 index 9fa53867bc..0000000000 --- a/interface/web/admin/lib/lang/ar_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ar_software_repo.lng b/interface/web/admin/lib/lang/ar_software_repo.lng deleted file mode 100644 index f2cbbb2c25..0000000000 --- a/interface/web/admin/lib/lang/ar_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ar_software_repo_list.lng b/interface/web/admin/lib/lang/ar_software_repo_list.lng deleted file mode 100644 index b7a219ffa8..0000000000 --- a/interface/web/admin/lib/lang/ar_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ar_software_update_list.lng b/interface/web/admin/lib/lang/ar_software_update_list.lng deleted file mode 100644 index fe7639125c..0000000000 --- a/interface/web/admin/lib/lang/ar_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_package.lng b/interface/web/admin/lib/lang/bg_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/bg_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_package_install.lng b/interface/web/admin/lib/lang/bg_software_package_install.lng deleted file mode 100644 index 0c9bd116c3..0000000000 --- a/interface/web/admin/lib/lang/bg_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_package_list.lng b/interface/web/admin/lib/lang/bg_software_package_list.lng deleted file mode 100644 index e251c95fbd..0000000000 --- a/interface/web/admin/lib/lang/bg_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_repo.lng b/interface/web/admin/lib/lang/bg_software_repo.lng deleted file mode 100644 index f515654345..0000000000 --- a/interface/web/admin/lib/lang/bg_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_repo_list.lng b/interface/web/admin/lib/lang/bg_software_repo_list.lng deleted file mode 100644 index 6471d70614..0000000000 --- a/interface/web/admin/lib/lang/bg_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/bg_software_update_list.lng b/interface/web/admin/lib/lang/bg_software_update_list.lng deleted file mode 100644 index c7fa6e07f5..0000000000 --- a/interface/web/admin/lib/lang/bg_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_package.lng b/interface/web/admin/lib/lang/br_software_package.lng deleted file mode 100644 index 94ccc930de..0000000000 --- a/interface/web/admin/lib/lang/br_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_package_install.lng b/interface/web/admin/lib/lang/br_software_package_install.lng deleted file mode 100644 index 0fcccf939e..0000000000 --- a/interface/web/admin/lib/lang/br_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_package_list.lng b/interface/web/admin/lib/lang/br_software_package_list.lng deleted file mode 100644 index de62e3d305..0000000000 --- a/interface/web/admin/lib/lang/br_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_repo.lng b/interface/web/admin/lib/lang/br_software_repo.lng deleted file mode 100644 index dbc14e2032..0000000000 --- a/interface/web/admin/lib/lang/br_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_repo_list.lng b/interface/web/admin/lib/lang/br_software_repo_list.lng deleted file mode 100644 index 6941c7f147..0000000000 --- a/interface/web/admin/lib/lang/br_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/br_software_update_list.lng b/interface/web/admin/lib/lang/br_software_update_list.lng deleted file mode 100644 index 0dff3a245c..0000000000 --- a/interface/web/admin/lib/lang/br_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_package.lng b/interface/web/admin/lib/lang/ca_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/ca_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_package_install.lng b/interface/web/admin/lib/lang/ca_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/ca_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_package_list.lng b/interface/web/admin/lib/lang/ca_software_package_list.lng deleted file mode 100644 index 2909d8376e..0000000000 --- a/interface/web/admin/lib/lang/ca_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_repo.lng b/interface/web/admin/lib/lang/ca_software_repo.lng deleted file mode 100644 index f2cbbb2c25..0000000000 --- a/interface/web/admin/lib/lang/ca_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_repo_list.lng b/interface/web/admin/lib/lang/ca_software_repo_list.lng deleted file mode 100644 index b7a219ffa8..0000000000 --- a/interface/web/admin/lib/lang/ca_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ca_software_update_list.lng b/interface/web/admin/lib/lang/ca_software_update_list.lng deleted file mode 100644 index fe7639125c..0000000000 --- a/interface/web/admin/lib/lang/ca_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_package.lng b/interface/web/admin/lib/lang/cz_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/cz_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_package_install.lng b/interface/web/admin/lib/lang/cz_software_package_install.lng deleted file mode 100644 index 0d079ef6d3..0000000000 --- a/interface/web/admin/lib/lang/cz_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_package_list.lng b/interface/web/admin/lib/lang/cz_software_package_list.lng deleted file mode 100644 index 6896a9feb4..0000000000 --- a/interface/web/admin/lib/lang/cz_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_repo.lng b/interface/web/admin/lib/lang/cz_software_repo.lng deleted file mode 100644 index bd7bc9d0f2..0000000000 --- a/interface/web/admin/lib/lang/cz_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_repo_list.lng b/interface/web/admin/lib/lang/cz_software_repo_list.lng deleted file mode 100644 index ca04f41dcf..0000000000 --- a/interface/web/admin/lib/lang/cz_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/cz_software_update_list.lng b/interface/web/admin/lib/lang/cz_software_update_list.lng deleted file mode 100644 index c48ad8ce30..0000000000 --- a/interface/web/admin/lib/lang/cz_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_package.lng b/interface/web/admin/lib/lang/de_software_package.lng deleted file mode 100644 index 13b3d996c3..0000000000 --- a/interface/web/admin/lib/lang/de_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_package_install.lng b/interface/web/admin/lib/lang/de_software_package_install.lng deleted file mode 100644 index 1ef69d13d3..0000000000 --- a/interface/web/admin/lib/lang/de_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_package_list.lng b/interface/web/admin/lib/lang/de_software_package_list.lng deleted file mode 100644 index 75b7504390..0000000000 --- a/interface/web/admin/lib/lang/de_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_repo.lng b/interface/web/admin/lib/lang/de_software_repo.lng deleted file mode 100644 index 242611cd08..0000000000 --- a/interface/web/admin/lib/lang/de_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_repo_list.lng b/interface/web/admin/lib/lang/de_software_repo_list.lng deleted file mode 100644 index db6f49fd4e..0000000000 --- a/interface/web/admin/lib/lang/de_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/de_software_update_list.lng b/interface/web/admin/lib/lang/de_software_update_list.lng deleted file mode 100644 index cf31e88154..0000000000 --- a/interface/web/admin/lib/lang/de_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_package.lng b/interface/web/admin/lib/lang/dk_software_package.lng deleted file mode 100644 index 86f45dc91e..0000000000 --- a/interface/web/admin/lib/lang/dk_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_package_install.lng b/interface/web/admin/lib/lang/dk_software_package_install.lng deleted file mode 100644 index fd9211652c..0000000000 --- a/interface/web/admin/lib/lang/dk_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_package_list.lng b/interface/web/admin/lib/lang/dk_software_package_list.lng deleted file mode 100644 index 3fb5399eae..0000000000 --- a/interface/web/admin/lib/lang/dk_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_repo.lng b/interface/web/admin/lib/lang/dk_software_repo.lng deleted file mode 100644 index 2c506cdc6b..0000000000 --- a/interface/web/admin/lib/lang/dk_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_repo_list.lng b/interface/web/admin/lib/lang/dk_software_repo_list.lng deleted file mode 100644 index aa33919cbd..0000000000 --- a/interface/web/admin/lib/lang/dk_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/dk_software_update_list.lng b/interface/web/admin/lib/lang/dk_software_update_list.lng deleted file mode 100644 index 8a8e8686af..0000000000 --- a/interface/web/admin/lib/lang/dk_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_package.lng b/interface/web/admin/lib/lang/el_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/el_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_package_install.lng b/interface/web/admin/lib/lang/el_software_package_install.lng deleted file mode 100644 index 5e3d0fd402..0000000000 --- a/interface/web/admin/lib/lang/el_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_package_list.lng b/interface/web/admin/lib/lang/el_software_package_list.lng deleted file mode 100644 index 1553ea1cea..0000000000 --- a/interface/web/admin/lib/lang/el_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_repo.lng b/interface/web/admin/lib/lang/el_software_repo.lng deleted file mode 100644 index 3b12d3fd87..0000000000 --- a/interface/web/admin/lib/lang/el_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_repo_list.lng b/interface/web/admin/lib/lang/el_software_repo_list.lng deleted file mode 100644 index deb896a719..0000000000 --- a/interface/web/admin/lib/lang/el_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/el_software_update_list.lng b/interface/web/admin/lib/lang/el_software_update_list.lng deleted file mode 100644 index 42100d0c89..0000000000 --- a/interface/web/admin/lib/lang/el_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/en_software_package.lng b/interface/web/admin/lib/lang/en_software_package.lng deleted file mode 100644 index 5850719890..0000000000 --- a/interface/web/admin/lib/lang/en_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_software_package_install.lng b/interface/web/admin/lib/lang/en_software_package_install.lng deleted file mode 100644 index d6ec373abb..0000000000 --- a/interface/web/admin/lib/lang/en_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_software_package_list.lng b/interface/web/admin/lib/lang/en_software_package_list.lng deleted file mode 100644 index 2909d8376e..0000000000 --- a/interface/web/admin/lib/lang/en_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/en_software_repo.lng b/interface/web/admin/lib/lang/en_software_repo.lng deleted file mode 100644 index 38c163507e..0000000000 --- a/interface/web/admin/lib/lang/en_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_software_repo_list.lng b/interface/web/admin/lib/lang/en_software_repo_list.lng deleted file mode 100644 index 15b16e2d5b..0000000000 --- a/interface/web/admin/lib/lang/en_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_software_update_list.lng b/interface/web/admin/lib/lang/en_software_update_list.lng deleted file mode 100644 index fe7639125c..0000000000 --- a/interface/web/admin/lib/lang/en_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_package.lng b/interface/web/admin/lib/lang/es_software_package.lng deleted file mode 100644 index af80e4a479..0000000000 --- a/interface/web/admin/lib/lang/es_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_package_install.lng b/interface/web/admin/lib/lang/es_software_package_install.lng deleted file mode 100644 index 838af344ec..0000000000 --- a/interface/web/admin/lib/lang/es_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_package_list.lng b/interface/web/admin/lib/lang/es_software_package_list.lng deleted file mode 100644 index c1837c7a82..0000000000 --- a/interface/web/admin/lib/lang/es_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_repo.lng b/interface/web/admin/lib/lang/es_software_repo.lng deleted file mode 100644 index 26382bd503..0000000000 --- a/interface/web/admin/lib/lang/es_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_repo_list.lng b/interface/web/admin/lib/lang/es_software_repo_list.lng deleted file mode 100644 index f6a624bd7d..0000000000 --- a/interface/web/admin/lib/lang/es_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/es_software_update_list.lng b/interface/web/admin/lib/lang/es_software_update_list.lng deleted file mode 100644 index 827c60e299..0000000000 --- a/interface/web/admin/lib/lang/es_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_package.lng b/interface/web/admin/lib/lang/fi_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/fi_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_package_install.lng b/interface/web/admin/lib/lang/fi_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/fi_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_package_list.lng b/interface/web/admin/lib/lang/fi_software_package_list.lng deleted file mode 100644 index 87a9e193b5..0000000000 --- a/interface/web/admin/lib/lang/fi_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_repo.lng b/interface/web/admin/lib/lang/fi_software_repo.lng deleted file mode 100644 index f875f428b6..0000000000 --- a/interface/web/admin/lib/lang/fi_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_repo_list.lng b/interface/web/admin/lib/lang/fi_software_repo_list.lng deleted file mode 100644 index bde844c99f..0000000000 --- a/interface/web/admin/lib/lang/fi_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fi_software_update_list.lng b/interface/web/admin/lib/lang/fi_software_update_list.lng deleted file mode 100644 index 7871958353..0000000000 --- a/interface/web/admin/lib/lang/fi_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_package.lng b/interface/web/admin/lib/lang/fr_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/fr_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_package_install.lng b/interface/web/admin/lib/lang/fr_software_package_install.lng deleted file mode 100644 index 39f643d3e6..0000000000 --- a/interface/web/admin/lib/lang/fr_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_package_list.lng b/interface/web/admin/lib/lang/fr_software_package_list.lng deleted file mode 100644 index 405b9e296f..0000000000 --- a/interface/web/admin/lib/lang/fr_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_repo.lng b/interface/web/admin/lib/lang/fr_software_repo.lng deleted file mode 100644 index f65c955d52..0000000000 --- a/interface/web/admin/lib/lang/fr_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_repo_list.lng b/interface/web/admin/lib/lang/fr_software_repo_list.lng deleted file mode 100644 index 56749896bb..0000000000 --- a/interface/web/admin/lib/lang/fr_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/fr_software_update_list.lng b/interface/web/admin/lib/lang/fr_software_update_list.lng deleted file mode 100644 index 8fb67a0310..0000000000 --- a/interface/web/admin/lib/lang/fr_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_package.lng b/interface/web/admin/lib/lang/hr_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/hr_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_package_install.lng b/interface/web/admin/lib/lang/hr_software_package_install.lng deleted file mode 100644 index 22d7e0ce7a..0000000000 --- a/interface/web/admin/lib/lang/hr_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_package_list.lng b/interface/web/admin/lib/lang/hr_software_package_list.lng deleted file mode 100644 index 3722c5cff4..0000000000 --- a/interface/web/admin/lib/lang/hr_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_repo.lng b/interface/web/admin/lib/lang/hr_software_repo.lng deleted file mode 100644 index bbfb2e2db2..0000000000 --- a/interface/web/admin/lib/lang/hr_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_repo_list.lng b/interface/web/admin/lib/lang/hr_software_repo_list.lng deleted file mode 100644 index b79045bd76..0000000000 --- a/interface/web/admin/lib/lang/hr_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hr_software_update_list.lng b/interface/web/admin/lib/lang/hr_software_update_list.lng deleted file mode 100644 index 2250a186a3..0000000000 --- a/interface/web/admin/lib/lang/hr_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_package.lng b/interface/web/admin/lib/lang/hu_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/hu_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_package_install.lng b/interface/web/admin/lib/lang/hu_software_package_install.lng deleted file mode 100644 index 6dc8be3f89..0000000000 --- a/interface/web/admin/lib/lang/hu_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_package_list.lng b/interface/web/admin/lib/lang/hu_software_package_list.lng deleted file mode 100644 index 430583ce8a..0000000000 --- a/interface/web/admin/lib/lang/hu_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_repo.lng b/interface/web/admin/lib/lang/hu_software_repo.lng deleted file mode 100644 index 3c578e3694..0000000000 --- a/interface/web/admin/lib/lang/hu_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_repo_list.lng b/interface/web/admin/lib/lang/hu_software_repo_list.lng deleted file mode 100644 index f5e7aabcb2..0000000000 --- a/interface/web/admin/lib/lang/hu_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/hu_software_update_list.lng b/interface/web/admin/lib/lang/hu_software_update_list.lng deleted file mode 100644 index c2edc83217..0000000000 --- a/interface/web/admin/lib/lang/hu_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_package.lng b/interface/web/admin/lib/lang/id_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/id_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_package_install.lng b/interface/web/admin/lib/lang/id_software_package_install.lng deleted file mode 100644 index 9e966893ca..0000000000 --- a/interface/web/admin/lib/lang/id_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_package_list.lng b/interface/web/admin/lib/lang/id_software_package_list.lng deleted file mode 100644 index 02642be6e2..0000000000 --- a/interface/web/admin/lib/lang/id_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_repo.lng b/interface/web/admin/lib/lang/id_software_repo.lng deleted file mode 100644 index 1c3b0305b4..0000000000 --- a/interface/web/admin/lib/lang/id_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_repo_list.lng b/interface/web/admin/lib/lang/id_software_repo_list.lng deleted file mode 100644 index 63444907f3..0000000000 --- a/interface/web/admin/lib/lang/id_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/id_software_update_list.lng b/interface/web/admin/lib/lang/id_software_update_list.lng deleted file mode 100644 index f789a0e72c..0000000000 --- a/interface/web/admin/lib/lang/id_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_package.lng b/interface/web/admin/lib/lang/it_software_package.lng deleted file mode 100644 index d2e123cf85..0000000000 --- a/interface/web/admin/lib/lang/it_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_package_install.lng b/interface/web/admin/lib/lang/it_software_package_install.lng deleted file mode 100644 index 1e210d5894..0000000000 --- a/interface/web/admin/lib/lang/it_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_package_list.lng b/interface/web/admin/lib/lang/it_software_package_list.lng deleted file mode 100644 index 5ab82417de..0000000000 --- a/interface/web/admin/lib/lang/it_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_repo.lng b/interface/web/admin/lib/lang/it_software_repo.lng deleted file mode 100644 index 76b0182697..0000000000 --- a/interface/web/admin/lib/lang/it_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_repo_list.lng b/interface/web/admin/lib/lang/it_software_repo_list.lng deleted file mode 100644 index 4db52118ec..0000000000 --- a/interface/web/admin/lib/lang/it_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/it_software_update_list.lng b/interface/web/admin/lib/lang/it_software_update_list.lng deleted file mode 100644 index cc264b84ec..0000000000 --- a/interface/web/admin/lib/lang/it_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_package.lng b/interface/web/admin/lib/lang/ja_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/ja_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_package_install.lng b/interface/web/admin/lib/lang/ja_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/ja_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_package_list.lng b/interface/web/admin/lib/lang/ja_software_package_list.lng deleted file mode 100644 index e5352e91e7..0000000000 --- a/interface/web/admin/lib/lang/ja_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_repo.lng b/interface/web/admin/lib/lang/ja_software_repo.lng deleted file mode 100644 index c95399a54e..0000000000 --- a/interface/web/admin/lib/lang/ja_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_repo_list.lng b/interface/web/admin/lib/lang/ja_software_repo_list.lng deleted file mode 100644 index a7d06d8fde..0000000000 --- a/interface/web/admin/lib/lang/ja_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ja_software_update_list.lng b/interface/web/admin/lib/lang/ja_software_update_list.lng deleted file mode 100644 index f0ecf5711b..0000000000 --- a/interface/web/admin/lib/lang/ja_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_package.lng b/interface/web/admin/lib/lang/nl_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/nl_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_package_install.lng b/interface/web/admin/lib/lang/nl_software_package_install.lng deleted file mode 100644 index 87150b8cf1..0000000000 --- a/interface/web/admin/lib/lang/nl_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_package_list.lng b/interface/web/admin/lib/lang/nl_software_package_list.lng deleted file mode 100644 index 44aaa563ad..0000000000 --- a/interface/web/admin/lib/lang/nl_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_repo.lng b/interface/web/admin/lib/lang/nl_software_repo.lng deleted file mode 100644 index 665c4197a2..0000000000 --- a/interface/web/admin/lib/lang/nl_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_repo_list.lng b/interface/web/admin/lib/lang/nl_software_repo_list.lng deleted file mode 100644 index fc05fc269b..0000000000 --- a/interface/web/admin/lib/lang/nl_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/nl_software_update_list.lng b/interface/web/admin/lib/lang/nl_software_update_list.lng deleted file mode 100644 index 0d05c85594..0000000000 --- a/interface/web/admin/lib/lang/nl_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_package.lng b/interface/web/admin/lib/lang/pl_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/pl_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_package_install.lng b/interface/web/admin/lib/lang/pl_software_package_install.lng deleted file mode 100644 index fd2f2930dd..0000000000 --- a/interface/web/admin/lib/lang/pl_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_package_list.lng b/interface/web/admin/lib/lang/pl_software_package_list.lng deleted file mode 100644 index cb47abc46d..0000000000 --- a/interface/web/admin/lib/lang/pl_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_repo.lng b/interface/web/admin/lib/lang/pl_software_repo.lng deleted file mode 100644 index 1cc3dbb61c..0000000000 --- a/interface/web/admin/lib/lang/pl_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_repo_list.lng b/interface/web/admin/lib/lang/pl_software_repo_list.lng deleted file mode 100644 index 7ca6af9f9f..0000000000 --- a/interface/web/admin/lib/lang/pl_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pl_software_update_list.lng b/interface/web/admin/lib/lang/pl_software_update_list.lng deleted file mode 100644 index aa49fba4e7..0000000000 --- a/interface/web/admin/lib/lang/pl_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_package.lng b/interface/web/admin/lib/lang/pt_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/pt_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_package_install.lng b/interface/web/admin/lib/lang/pt_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/pt_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_package_list.lng b/interface/web/admin/lib/lang/pt_software_package_list.lng deleted file mode 100644 index 1ec77bdd15..0000000000 --- a/interface/web/admin/lib/lang/pt_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_repo.lng b/interface/web/admin/lib/lang/pt_software_repo.lng deleted file mode 100644 index 436758e687..0000000000 --- a/interface/web/admin/lib/lang/pt_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_repo_list.lng b/interface/web/admin/lib/lang/pt_software_repo_list.lng deleted file mode 100644 index 5afba6d5e3..0000000000 --- a/interface/web/admin/lib/lang/pt_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/pt_software_update_list.lng b/interface/web/admin/lib/lang/pt_software_update_list.lng deleted file mode 100644 index 12fd9e2fa9..0000000000 --- a/interface/web/admin/lib/lang/pt_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_package.lng b/interface/web/admin/lib/lang/ro_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/ro_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_package_install.lng b/interface/web/admin/lib/lang/ro_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/ro_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_package_list.lng b/interface/web/admin/lib/lang/ro_software_package_list.lng deleted file mode 100644 index 4a8dcbcbf0..0000000000 --- a/interface/web/admin/lib/lang/ro_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_repo.lng b/interface/web/admin/lib/lang/ro_software_repo.lng deleted file mode 100644 index f2cbbb2c25..0000000000 --- a/interface/web/admin/lib/lang/ro_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_repo_list.lng b/interface/web/admin/lib/lang/ro_software_repo_list.lng deleted file mode 100644 index b7a219ffa8..0000000000 --- a/interface/web/admin/lib/lang/ro_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ro_software_update_list.lng b/interface/web/admin/lib/lang/ro_software_update_list.lng deleted file mode 100644 index 1e85d6de5f..0000000000 --- a/interface/web/admin/lib/lang/ro_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_package.lng b/interface/web/admin/lib/lang/ru_software_package.lng deleted file mode 100644 index 490184dd92..0000000000 --- a/interface/web/admin/lib/lang/ru_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_package_install.lng b/interface/web/admin/lib/lang/ru_software_package_install.lng deleted file mode 100644 index 21efc7d562..0000000000 --- a/interface/web/admin/lib/lang/ru_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_package_list.lng b/interface/web/admin/lib/lang/ru_software_package_list.lng deleted file mode 100644 index 791cfa33ae..0000000000 --- a/interface/web/admin/lib/lang/ru_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_repo.lng b/interface/web/admin/lib/lang/ru_software_repo.lng deleted file mode 100644 index 5aec8763c1..0000000000 --- a/interface/web/admin/lib/lang/ru_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_repo_list.lng b/interface/web/admin/lib/lang/ru_software_repo_list.lng deleted file mode 100644 index ed307454ae..0000000000 --- a/interface/web/admin/lib/lang/ru_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/ru_software_update_list.lng b/interface/web/admin/lib/lang/ru_software_update_list.lng deleted file mode 100644 index dde28811d5..0000000000 --- a/interface/web/admin/lib/lang/ru_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_package.lng b/interface/web/admin/lib/lang/se_software_package.lng deleted file mode 100644 index 086902db0c..0000000000 --- a/interface/web/admin/lib/lang/se_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_package_install.lng b/interface/web/admin/lib/lang/se_software_package_install.lng deleted file mode 100644 index 434fc4bc98..0000000000 --- a/interface/web/admin/lib/lang/se_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_package_list.lng b/interface/web/admin/lib/lang/se_software_package_list.lng deleted file mode 100644 index c0222e1ba4..0000000000 --- a/interface/web/admin/lib/lang/se_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_repo.lng b/interface/web/admin/lib/lang/se_software_repo.lng deleted file mode 100644 index a0e0de6822..0000000000 --- a/interface/web/admin/lib/lang/se_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_repo_list.lng b/interface/web/admin/lib/lang/se_software_repo_list.lng deleted file mode 100644 index b7a219ffa8..0000000000 --- a/interface/web/admin/lib/lang/se_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/se_software_update_list.lng b/interface/web/admin/lib/lang/se_software_update_list.lng deleted file mode 100644 index 0cf7c0eddc..0000000000 --- a/interface/web/admin/lib/lang/se_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_package.lng b/interface/web/admin/lib/lang/sk_software_package.lng deleted file mode 100644 index faffe38217..0000000000 --- a/interface/web/admin/lib/lang/sk_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_package_install.lng b/interface/web/admin/lib/lang/sk_software_package_install.lng deleted file mode 100644 index 5c8b756434..0000000000 --- a/interface/web/admin/lib/lang/sk_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_package_list.lng b/interface/web/admin/lib/lang/sk_software_package_list.lng deleted file mode 100644 index 502a3a2237..0000000000 --- a/interface/web/admin/lib/lang/sk_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_repo.lng b/interface/web/admin/lib/lang/sk_software_repo.lng deleted file mode 100644 index 263614f50c..0000000000 --- a/interface/web/admin/lib/lang/sk_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_repo_list.lng b/interface/web/admin/lib/lang/sk_software_repo_list.lng deleted file mode 100644 index c77d4a3846..0000000000 --- a/interface/web/admin/lib/lang/sk_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/sk_software_update_list.lng b/interface/web/admin/lib/lang/sk_software_update_list.lng deleted file mode 100644 index 9a04707c3e..0000000000 --- a/interface/web/admin/lib/lang/sk_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_package.lng b/interface/web/admin/lib/lang/tr_software_package.lng deleted file mode 100644 index addda60195..0000000000 --- a/interface/web/admin/lib/lang/tr_software_package.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_package_install.lng b/interface/web/admin/lib/lang/tr_software_package_install.lng deleted file mode 100644 index fe7dd26e73..0000000000 --- a/interface/web/admin/lib/lang/tr_software_package_install.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_package_list.lng b/interface/web/admin/lib/lang/tr_software_package_list.lng deleted file mode 100644 index 1838ff94cf..0000000000 --- a/interface/web/admin/lib/lang/tr_software_package_list.lng +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_repo.lng b/interface/web/admin/lib/lang/tr_software_repo.lng deleted file mode 100644 index 13e113967f..0000000000 --- a/interface/web/admin/lib/lang/tr_software_repo.lng +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_repo_list.lng b/interface/web/admin/lib/lang/tr_software_repo_list.lng deleted file mode 100644 index 5e2fdf5b92..0000000000 --- a/interface/web/admin/lib/lang/tr_software_repo_list.lng +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_software_update_list.lng b/interface/web/admin/lib/lang/tr_software_update_list.lng deleted file mode 100644 index a462d90faa..0000000000 --- a/interface/web/admin/lib/lang/tr_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php index 124656b7f3..59b2e1ffc1 100644 --- a/interface/web/admin/lib/module.conf.php +++ b/interface/web/admin/lib/module.conf.php @@ -92,30 +92,6 @@ $module['nav'][] = array( 'title' => 'Interface', 'items' => $items); -// cleanup -unset($items); - - -$items[] = array( 'title' => 'Repositories', - 'target' => 'content', - 'link' => 'admin/software_repo_list.php', - 'html_id' => 'software_repo_list'); - -$items[] = array( 'title' => 'Packages', - 'target' => 'content', - 'link' => 'admin/software_package_list.php', - 'html_id' => 'software_package_list'); - -$items[] = array( 'title' => 'Updates', - 'target' => 'content', - 'link' => 'admin/software_update_list.php', - 'html_id' => 'software_update_list'); - -$module['nav'][] = array( 'title' => 'Software', - 'open' => 1, - 'items' => $items); - - // cleanup unset($items); diff --git a/interface/web/admin/list/software_repo.list.php b/interface/web/admin/list/software_repo.list.php deleted file mode 100644 index 0e172ace99..0000000000 --- a/interface/web/admin/list/software_repo.list.php +++ /dev/null @@ -1,78 +0,0 @@ - "active", - 'datatype' => "VARCHAR", - 'formtype' => "SELECT", - 'op' => "=", - 'prefix' => "", - 'suffix' => "", - 'width' => "", - 'value' => array('y' => $app->lng('yes_txt'), 'n' => $app->lng('no_txt'))); - -$liste["item"][] = array( 'field' => "repo_name", - 'datatype' => "VARCHAR", - 'formtype' => "TEXT", - 'op' => "like", - 'prefix' => "%", - 'suffix' => "%", - 'width' => "", - 'value' => ""); - - -$liste["item"][] = array( 'field' => "repo_url", - 'datatype' => "VARCHAR", - 'formtype' => "TEXT", - 'op' => "like", - 'prefix' => "%", - 'suffix' => "%", - 'width' => "", - 'value' => ""); - -?> diff --git a/interface/web/admin/software_package_del.php b/interface/web/admin/software_package_del.php deleted file mode 100644 index e1387f39c4..0000000000 --- a/interface/web/admin/software_package_del.php +++ /dev/null @@ -1,57 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_packages'); -if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.'); - -// Check CSRF Token -$app->auth->csrf_token_check('GET'); - -$software_update_inst_id = $app->functions->intval($_GET['software_update_inst_id']); - -if($software_update_inst_id > 0) { - $app->db->datalogDelete('software_update_inst', 'software_update_inst_id', $software_update_inst_id); - //header('Location: admin/software_package_list.php'); - die('HEADER_REDIRECT: admin/software_package_list.php'); -} else { - die('Invalid ID'); -} - - - - - - -?> diff --git a/interface/web/admin/software_package_edit.php b/interface/web/admin/software_package_edit.php deleted file mode 100644 index 65555d3a35..0000000000 --- a/interface/web/admin/software_package_edit.php +++ /dev/null @@ -1,60 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_packages'); -if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.'); - -// Loading classes -$app->uses('tpl,tform,tform_actions'); -$app->load('tform_actions'); - -class page_action extends tform_actions { - -} - -$page = new page_action; -$page->onLoad(); - -?> diff --git a/interface/web/admin/software_package_install.php b/interface/web/admin/software_package_install.php deleted file mode 100644 index 6a5326d51a..0000000000 --- a/interface/web/admin/software_package_install.php +++ /dev/null @@ -1,179 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_packages'); - -//* This is only allowed for administrators -if(!$app->auth->is_admin()) die('only allowed for administrators.'); - -// Check CSRF Token -if(count($_POST) > 0) { - $app->auth->csrf_token_check('POST'); -} else { - $app->auth->csrf_token_check('GET'); -} - -$package_name = $_REQUEST['package']; -$install_server_id = $app->functions->intval($_REQUEST['server_id']); -$install_key = trim($_REQUEST['install_key']); - -$package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = ?", $package_name); - -$install_key_verified = false; -$message_err = ''; -$message_ok = ''; - -//* verify the key -if($package['package_installable'] == 'key' && $install_key != '') { - - $repo = $app->db->queryOneRecord("SELECT * FROM software_repo WHERE software_repo_id = ?", $package['software_repo_id']); - - $client = new SoapClient(null, array('location' => $repo['repo_url'], - 'uri' => $repo['repo_url'])); - - $install_key_verified = $client->check_installable($package_name, $install_key, $repo['repo_username'], $repo['repo_password']); - - if($install_key_verified == false) { - //$install_key = ''; - $message_err = 'Verification of the key failed.'; - } else { - // Store the verified key into the database - $app->db->datalogUpdate('software_package', array("package_key" => $install_key), 'package_id', $package['package_id']); - } -} else { - $message_ok = 'Please enter the software key for the package.'; -} - -//* Install packages, if all requirements are fullfilled. -if($install_server_id > 0 && $package_name != '' && ($package['package_installable'] == 'yes' || $install_key_verified == true)) { - $sql = "SELECT software_update_id, package_name, update_title FROM software_update WHERE type = 'full' AND package_name = ? ORDER BY v1 DESC, v2 DESC, v3 DESC, v4 DESC LIMIT 0,1"; - $tmp = $app->db->queryOneRecord($sql, $package_name); - $software_update_id = $tmp['software_update_id']; - - //* if package requires a DB and there is no data for a db in config, then we create this data now - if($package['package_requires_db'] == 'mysql') { - $app->uses('ini_parser,getconf'); - - $package_config_array = array(); - if(trim($package['package_config']) != '') { - $package_config_array = $app->ini_parser->parse_ini_string(stripslashes($package['package_config'])); - } - - if(!isset($package_config_array['mysql'])) { - $package_config_array['mysql'] = array( 'database_name' => 'ispapp'.$package['package_id'], - 'database_user' => 'ispapp'.$package['package_id'], - 'database_password' => md5(mt_rand()), - 'database_host' => 'localhost'); - $package_config_str = $app->ini_parser->get_ini_string($package_config_array); - $package['package_config'] = $package_config_str; - $app->db->datalogUpdate('software_package', array("package_config" => $package_config_str), 'package_id', $package['package_id']); - } - } - - //* If the packages requires a remote user - if($package['package_remote_functions'] != '') { - - if(trim($package['package_config']) != '') { - $package_config_array = $app->ini_parser->parse_ini_string(stripslashes($package['package_config'])); - } - - if(!isset($package_config_array['remote_api'])) { - $remote_user = 'ispapp'.$package['package_id']; - $remote_password = md5(mt_rand()); - $remote_functions = $package['package_remote_functions']; - - $package_config_array['remote_api'] = array( - 'remote_hostname' => $_SERVER['HTTP_HOST'], - 'remote_user' => $remote_user, - 'remote_password' => $remote_password - ); - - $package_config_str = $app->ini_parser->get_ini_string($package_config_array); - $package['package_config'] = $package_config_str; - $remote_password_md5 = md5($remote_password); - $app->db->datalogUpdate('software_package', array("package_config" => $package_config_str), 'package_id', $package['package_id']); - - $sql = "INSERT INTO `remote_user` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `remote_username`, `remote_password`, `remote_functions`) VALUES - (1, 1, 'riud', 'riud', '', ?, ?, ?)"; - $app->db->query($sql, $remote_user, $remote_password_md5, $remote_functions); - - } - - } - - //* Add the record to start the install process - $insert_data = array( - "package_name" => $package_name, - "server_id" => $install_server_id, - "software_update_id" => $software_update_id, - "status" => 'installing' - ); - $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id'); - $message_ok = 'Starting package installation '."".$app->lng('next').""; - -} - -if(count($_POST) > 2 && $install_key == '') { - $message_ok = 'Please enter the software key.'; -} - -//* Show key input form -if($package['package_installable'] == 'key' && !$install_key_verified) { - $insert_key = true; -} else { - $insert_key = false; -} - -// Loading the template -$app->uses('tpl'); -$app->tpl->newTemplate("form.tpl.htm"); -$app->tpl->setInclude('content_tpl', 'templates/software_package_install.htm'); - -$app->tpl->setVar('message_ok', $message_ok); -$app->tpl->setVar('message_err', $message_err); -$app->tpl->setVar('insert_key', $insert_key); -$app->tpl->setVar('install_key', $install_key); -$app->tpl->setVar('package_name', $package_name); -$app->tpl->setVar('server_id', $install_server_id); - - -include_once 'lib/lang/en_software_package_install.lng'; -$app->tpl->setVar($wb); - - -$app->tpl_defaults(); -$app->tpl->pparse(); - -?> diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php deleted file mode 100644 index 8a21696c7f..0000000000 --- a/interface/web/admin/software_package_list.php +++ /dev/null @@ -1,200 +0,0 @@ -auth->check_module_permissions('admin'); - -//* This is only allowed for administrators -if(!$app->auth->is_admin()) die('only allowed for administrators.'); - -//* Get the latest packages from the repositorys and insert them in the local database -$packages_added = 0; -$repos = $app->db->queryAllRecords("SELECT software_repo_id, repo_url, repo_username, repo_password FROM software_repo WHERE active = 'y'"); -if(is_array($repos) && isset($_GET['action']) && $_GET['action'] == 'repoupdate' ) { - foreach($repos as $repo) { - $client = new SoapClient(null, array('location' => $repo['repo_url'], - 'uri' => $repo['repo_url'])); - - $packages = $client->get_packages($repo['repo_username'], $repo['repo_password']); - if(is_array($packages)) { - foreach($packages as $p) { - $package_name = $p['name']; - $tmp = $app->db->queryOneRecord("SELECT package_id FROM software_package WHERE package_name = ?", $package_name); - - $package_title = $p['title']; - $package_description = $p['description']; - $software_repo_id = $app->functions->intval($repo['software_repo_id']); - $package_type = $p['type']; - $package_installable = $p['installable']; - $package_requires_db = $p['requires_db']; - $package_remote_functions = $p['remote_functions']; - - if(empty($tmp['package_id'])) { - $insert_data = array( - "software_repo_id" => $software_repo_id, - "package_name" => $package_name, - "package_title" => $package_title, - "package_description" => $package_description, - "package_type" => $package_type, - "package_installable" => $package_installable, - "package_requires_db" => $package_requires_db, - "package_remote_functions" => $package_remote_functions - ); - $app->db->datalogInsert('software_package', $insert_data, 'package_id'); - $packages_added++; - } else { - $update_data = array( - "software_repo_id" => $software_repo_id, - "package_title" => $package_title, - "package_description" => $package_description, - "package_type" => $package_type, - "package_installable" => $package_installable, - "package_requires_db" => $package_requires_db, - "package_remote_functions" => $package_remote_functions - ); - //echo $update_data; - $app->db->datalogUpdate('software_package', $update_data, 'package_id', $tmp['package_id']); - } - } - } - - $packages = $app->db->queryAllRecords("SELECT software_package.package_name, v1, v2, v3, v4 FROM software_package LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) GROUP BY package_name ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC"); - if(is_array($packages)) { - foreach($packages as $p) { - - $version = $p['v1'].'.'.$p['v2'].'.'.$p['v3'].'.'.$p['v4']; - $updates = $client->get_updates($p['package_name'], $version, $repo['repo_username'], $repo['repo_password']); - - if(is_array($updates)) { - foreach($updates as $u) { - - $version_array = explode('.', $u['version']); - $v1 = $app->functions->intval($version_array[0]); - $v2 = $app->functions->intval($version_array[1]); - $v3 = $app->functions->intval($version_array[2]); - $v4 = $app->functions->intval($version_array[3]); - - $package_name = $u['package_name']; - $software_repo_id = $app->functions->intval($repo['software_repo_id']); - $update_url = $u['url']; - $update_md5 = $u['md5']; - $update_dependencies = (isset($u['dependencies']))?$u['dependencies']:''; - $update_title = $u['title']; - $type = $u['type']; - - // Check that we do not have this update in the database yet - $sql = "SELECT * FROM software_update WHERE package_name = ? and v1 = ? and v2 = ? and v3 = ? and v4 = ?"; - $tmp = $app->db->queryOneRecord($sql, $package_name, $v1, $v2, $v3, $v4); - if(!isset($tmp['software_update_id'])) { - $insert_data = array( - "software_repo_id" => $software_repo_id, - "package_name" => $package_name, - "update_url" => $update_url, - "update_md5" => $update_md5, - "update_dependencies" => $update_dependencies, - "update_title" => $update_title, - "v1" => $v1, - "v2" => $v2, - "v3" => $v3, - "v4" => $v4, - "type" => $type - ); - $app->db->datalogInsert('software_update', $insert_data, 'software_update_id'); - } - - } - } - } - } - } -} - -// Show the list in the interface -// Loading the template -$app->uses('tpl'); -$app->tpl->newTemplate("form.tpl.htm"); -$app->tpl->setInclude('content_tpl', 'templates/software_package_list.htm'); - -$csrf_token = $app->auth->csrf_token_get('software_package_list'); -$_csrf_id = $csrf_token['csrf_id']; -$_csrf_key = $csrf_token['csrf_key']; - -$servers = $app->db->queryAllRecords('SELECT server_id, server_name FROM server ORDER BY server_name'); -$packages = $app->db->queryAllRecords('SELECT * FROM software_package'); -if(is_array($packages) && count($packages) > 0) { - foreach($packages as $key => $p) { - $installed_txt = ''; - foreach($servers as $s) { - $inst = $app->db->queryOneRecord("SELECT * FROM software_update, software_update_inst WHERE software_update_inst.software_update_id = software_update.software_update_id AND software_update_inst.package_name = ? AND server_id = ?", $p["package_name"], $s["server_id"]); - $version = $inst['v1'].'.'.$inst['v2'].'.'.$inst['v3'].'.'.$inst['v4']; - - if($inst['status'] == 'installed') { - $installed_txt .= $s['server_name'].": ".$app->lng("Installed version $version")."
"; - } elseif ($inst['status'] == 'installing') { - $installed_txt .= $s['server_name'].": ".$app->lng("Installation in progress")."
"; - } elseif ($inst['status'] == 'failed') { - $installed_txt .= $s['server_name'].": ".$app->lng("Installation failed")."
"; - } elseif ($inst['status'] == 'deleting') { - $installed_txt .= $s['server_name'].": ".$app->lng("Deletion in progress")."
"; - } else { - if($p['package_installable'] == 'no') { - $installed_txt .= $s['server_name'].": ".$app->lng("Package can not be installed.")."
"; - } else { - $installed_txt .= $s['server_name'].": Install now
"; - } - } - } - $packages[$key]['software_update_inst_id'] = intval($inst['software_update_inst_id']); - $packages[$key]['installed'] = $installed_txt; - $packages[$key]['csrf_id'] = $_csrf_id; - $packages[$key]['csrf_key'] = $_csrf_key; - } - $app->tpl->setVar('has_packages', 1); -} else { - $app->tpl->setVar('has_packages', 0); -} - - - -$app->tpl->setLoop('records', $packages); - -$language = (isset($_SESSION['s']['language']))?$_SESSION['s']['language']:$conf['language']; -include_once 'lib/lang/'.$app->functions->check_language($language).'_software_package_list.lng'; -$app->tpl->setVar($wb); - - -$app->tpl_defaults(); -$app->tpl->pparse(); - - -?> diff --git a/interface/web/admin/software_repo_del.php b/interface/web/admin/software_repo_del.php deleted file mode 100644 index 630993717c..0000000000 --- a/interface/web/admin/software_repo_del.php +++ /dev/null @@ -1,53 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_repo'); -if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.'); - -$app->uses("tform_actions"); -$app->tform_actions->onDelete(); - -?> diff --git a/interface/web/admin/software_repo_edit.php b/interface/web/admin/software_repo_edit.php deleted file mode 100644 index 6d52da2b56..0000000000 --- a/interface/web/admin/software_repo_edit.php +++ /dev/null @@ -1,60 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_repo'); -if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.'); - -// Loading classes -$app->uses('tpl,tform,tform_actions'); -$app->load('tform_actions'); - -class page_action extends tform_actions { - -} - -$page = new page_action; -$page->onLoad(); - -?> diff --git a/interface/web/admin/software_repo_list.php b/interface/web/admin/software_repo_list.php deleted file mode 100644 index b8afc8f9bc..0000000000 --- a/interface/web/admin/software_repo_list.php +++ /dev/null @@ -1,52 +0,0 @@ -auth->check_module_permissions('admin'); - -$app->uses('listform_actions'); - -$app->listform_actions->onLoad(); - - -?> diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php deleted file mode 100644 index 6d680c0ec1..0000000000 --- a/interface/web/admin/software_update_list.php +++ /dev/null @@ -1,204 +0,0 @@ -auth->check_module_permissions('admin'); -$app->auth->check_security_permissions('admin_allow_software_packages'); - -//* This is only allowed for administrators -if(!$app->auth->is_admin()) die('only allowed for administrators.'); - -//* Get the latest updates from the repositorys and insert them in the local database -$updates_added = 0; -$repos = $app->db->queryAllRecords("SELECT software_repo_id, repo_url, repo_username, repo_password FROM software_repo WHERE active = 'y'"); -if(is_array($repos)) { - foreach($repos as $repo) { - - /* - SELECT software_package.package_name, v1, v2, v3, v4 - FROM software_package - LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) - LEFT JOIN software_update_inst ON ( software_update.software_update_id = software_update_inst.software_update_id ) - GROUP BY package_name - ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC - */ - - $client = new SoapClient(null, array('location' => $repo['repo_url'], - 'uri' => $repo['repo_url'])); - - $packages = $app->db->queryAllRecords("SELECT software_package.package_name, v1, v2, v3, v4 FROM software_package LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) GROUP BY package_name ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC"); - if(is_array($packages)) { - foreach($packages as $p) { - - $version = $p['v1'].'.'.$p['v2'].'.'.$p['v3'].'.'.$p['v4']; - $updates = $client->get_updates($p['package_name'], $version, $repo['repo_username'], $repo['repo_password']); - - if(is_array($updates)) { - foreach($updates as $u) { - - $version_array = explode('.', $u['version']); - $v1 = $app->functions->intval($version_array[0]); - $v2 = $app->functions->intval($version_array[1]); - $v3 = $app->functions->intval($version_array[2]); - $v4 = $app->functions->intval($version_array[3]); - - $package_name = $u['package_name']; - $software_repo_id = $app->functions->intval($repo['software_repo_id']); - $update_url = $u['url']; - $update_md5 = $u['md5']; - $update_dependencies = (isset($u['dependencies']))?$u['dependencies']:''; - $update_title = $u['title']; - $type = $u['type']; - - // Check that we do not have this update in the database yet - $sql = "SELECT * FROM software_update WHERE package_name = ? and v1 = ? and v2 = ? and v3 = ? and v4 = ?"; - $tmp = $app->db->queryOneRecord($sql, $package_name, $v1, $v2, $v3, $v4); - if(!isset($tmp['software_update_id'])) { - // Insert the update in the datbase - $sql = "INSERT INTO software_update (software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type) - VALUES ($software_repo_id, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - //die($sql); - $app->db->query($sql, $package_name, $update_url, $update_md5, $update_dependencies, $update_title, $v1, $v2, $v3, $v4, $type); - } - - } - } - } - } - } -} - - -//* Install packages, if GET Request -if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] != '' && $_GET['server_id'] > 0) { - $package_name = $_GET['package']; - $server_id = $app->functions->intval($_GET['server_id']); - $software_update_id = $app->functions->intval($_GET['id']); - - $insert_data = array( - "package_name" => $package_name, - "server_id" => $server_id, - "software_update_id" => $software_update_id, - "status" => 'installing' - ); - $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id'); - -} - - - -// Show the list in the interface -// Loading the template -$app->uses('tpl'); -$app->tpl->newTemplate("form.tpl.htm"); -$app->tpl->setInclude('content_tpl', 'templates/software_update_list.htm'); - -/* -SELECT software_package.package_name, software_package.package_title, software_update.update_title, v1, v2, v3, v4, software_update_inst.status - FROM software_package - LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) - LEFT JOIN software_update_inst ON ( software_update.software_update_id = software_update_inst.software_update_id ) -GROUP BY software_update.software_update_id - ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC -*/ - - - -if(isset($_POST["server_id"]) && $_POST["server_id"] > 0) { - $server_id = $app->functions->intval($_POST["server_id"]); -} else { - $server_id = 1; -} - -$servers = $app->db->queryAllRecords('SELECT server_id, server_name FROM server ORDER BY server_name'); -foreach($servers as $key => $server) { - if($server['server_id'] == $server_id) { - $servers[$key]['selected'] = 'selected'; - } else { - $servers[$key]['selected'] = ''; - } -} - -$app->tpl->setLoop('servers', $servers); - -$sql = "SELECT v1, v2, v3, v4, software_update.update_title, software_update.software_update_id, software_update.package_name, v1, v2, v3, v4, software_update_inst.status - FROM software_update LEFT JOIN software_update_inst ON ( software_update.software_update_id = software_update_inst.software_update_id ) - WHERE server_id = $server_id - GROUP BY software_update.package_name - ORDER BY software_update.package_name ASC, v1 DESC , v2 DESC , v3 DESC , v4 DESC"; - -$installed_packages = $app->db->queryAllRecords($sql); - - -$records_out = array(); - -if(is_array($installed_packages)) { - foreach($installed_packages as $ip) { - - // Get version number of the latest installed version - $sql = "SELECT v1, v2, v3, v4 FROM software_update, software_update_inst WHERE software_update.software_update_id = software_update_inst.software_update_id AND server_id = ? ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC LIMIT 0,1"; - $lu = $app->db->queryOneRecord($sql, $server_id); - - // Get all installable updates - $sql = "SELECT * FROM software_update WHERE v1 >= ? AND v2 >= ? AND v3 >= ? AND v4 >= ? AND package_name = ? ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC"; - $updates = $app->db->queryAllRecords($sql, $lu['v1'], $lu['v2'], $lu['v3'], $lu['v4'], $ip['package_name']); - //die($sql); - - if(is_array($updates)) { - // Delete the last record as it is already installed - unset($updates[count($updates)-1]); - - foreach($updates as $key => $u) { - $version = $u['v1'].'.'.$u['v2'].'.'.$u['v3'].'.'.$u['v4']; - $installed_txt = "Install Update
"; - $records_out[] = array('version' => $version, 'update_title' => $u["update_title"], 'installed' => $installed_txt); - - } - } - } -} - - - -$app->tpl->setLoop('records', $records_out); - -$language = (isset($_SESSION['s']['language']))?$_SESSION['s']['language']:$conf['language']; -include_once 'lib/lang/'.$app->functions->check_language($language).'_software_update_list.lng'; -$app->tpl->setVar($wb); - - -$app->tpl_defaults(); -$app->tpl->pparse(); - - -?> diff --git a/interface/web/admin/templates/software_package_edit.htm b/interface/web/admin/templates/software_package_edit.htm deleted file mode 100644 index 2569c267f0..0000000000 --- a/interface/web/admin/templates/software_package_edit.htm +++ /dev/null @@ -1,22 +0,0 @@ - -

- - - -
- - {tmpl_var name='package_title'} -
-
- -
- - - - -
- - -
\ No newline at end of file diff --git a/interface/web/admin/templates/software_package_install.htm b/interface/web/admin/templates/software_package_install.htm deleted file mode 100644 index 8524b3c087..0000000000 --- a/interface/web/admin/templates/software_package_install.htm +++ /dev/null @@ -1,31 +0,0 @@ - -

- -
- -
-
- -
-
- -
- -

 

-
- -
- - - -

 

-
- - -
- -
-
-
\ No newline at end of file diff --git a/interface/web/admin/templates/software_package_list.htm b/interface/web/admin/templates/software_package_list.htm deleted file mode 100644 index e69e3780af..0000000000 --- a/interface/web/admin/templates/software_package_list.htm +++ /dev/null @@ -1,55 +0,0 @@ - -

- - -

{tmpl_var name="toolsarea_head_txt"}

- - - - - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{tmpl_var name='search_limit'}
{tmpl_var name="installed"}{tmpl_var name="package_title"}{tmpl_var name="package_description"}ispapp{tmpl_var name="package_id"} - - -
{tmpl_var name='no_packages_txt'}
-
- - \ No newline at end of file diff --git a/interface/web/admin/templates/software_repo_edit.htm b/interface/web/admin/templates/software_repo_edit.htm deleted file mode 100644 index a43ea74900..0000000000 --- a/interface/web/admin/templates/software_repo_edit.htm +++ /dev/null @@ -1,26 +0,0 @@ -
- -
-
- -
-
- -
-
- -
-
- -
- {tmpl_var name='active'} -
-
- - - - -
- - -
diff --git a/interface/web/admin/templates/software_repo_list.htm b/interface/web/admin/templates/software_repo_list.htm deleted file mode 100644 index d408896de6..0000000000 --- a/interface/web/admin/templates/software_repo_list.htm +++ /dev/null @@ -1,58 +0,0 @@ - -

- - -

{tmpl_var name="toolsarea_head_txt"}

- - - - - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
- -
{tmpl_var name="active"}{tmpl_var name="repo_name"}{tmpl_var name="repo_url"} - -
{tmpl_var name='globalsearch_noresults_text_txt'}
-
- - \ No newline at end of file diff --git a/interface/web/admin/templates/software_update_list.htm b/interface/web/admin/templates/software_update_list.htm deleted file mode 100644 index 6776b66a7a..0000000000 --- a/interface/web/admin/templates/software_update_list.htm +++ /dev/null @@ -1,53 +0,0 @@ - -

- - - Tools - -
- -
- - -
- - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
{tmpl_var name="installed"}{tmpl_var name="update_title"}{tmpl_var name="version"}
{tmpl_var name='no_updates_txt'}
-
- - \ No newline at end of file diff --git a/security/README.txt b/security/README.txt index b42cbaabb4..1825b981f2 100644 --- a/security/README.txt +++ b/security/README.txt @@ -1,7 +1,7 @@ Description for security_settings.ini values. -The option "superadmin" means that a setting is only available to the admin user with userid 1 in the interface. +The option "superadmin" means that a setting is only available to the admin user with userid 1 in the interface. If there are other amdins, then they cant access this setting. ----------------------------------------------------------- @@ -57,14 +57,6 @@ Setting: admin_allow_osupdate Options: yes/no/superadmin Description: Disables System > OS update -Setting: admin_allow_software_packages -Options: yes/no/superadmin -Description: Disables System > Apps & Addons > Packages and Update - -Setting: admin_allow_software_repo -Options: yes/no/superadmin -Description: Disables System > Apps & Addons > Repo - Setting: remote_api_allowed Options: yes/no Description: Disables the remote API @@ -80,13 +72,13 @@ Description: Enables the Intrusion Detection System Setting: ids_log_level Options: 1 (number, default = 1) Description: IDS score that triggers the log in /usr/local/ispconfig/interface/temp/ids.log - This log can be used to feed the whitelist. - + This log can be used to feed the whitelist. + Example: - + cat /usr/local/ispconfig/interface/temp/ids.log >> /usr/local/ispconfig/security/ids.whitelist rm -f /usr/local/ispconfig/interface/temp/ids.log - + If you want to use a custom whitelist, then store it as /usr/local/ispconfig/security/ids.whitelist.custom Setting: ids_warn_level @@ -95,7 +87,7 @@ Description: When the IDS score exceeds this level, a error message is logged in Setting: ids_block_level Options: 100 (number, default = 100) -Description: When the IDS score exceeds this level, a error message is shown to the user and further processing is blocked. A score of 100 will most likely never be reached. +Description: When the IDS score exceeds this level, a error message is shown to the user and further processing is blocked. A score of 100 will most likely never be reached. We have choosen such a high score as default until we have more complete whitelists for this new feature. Setting: sql_scan_enabled @@ -135,5 +127,3 @@ Description: Warn by email when /etc/shadow has been changed. Setting: warn_group_change Options: yes/no Description: Warn by email when /etc/group has been changed. - - diff --git a/server/mods-available/server_module.inc.php b/server/mods-available/server_module.inc.php index bc846cf530..92a50c5128 100644 --- a/server/mods-available/server_module.inc.php +++ b/server/mods-available/server_module.inc.php @@ -40,10 +40,7 @@ class server_module { 'server_ip_delete', 'firewall_insert', 'firewall_update', - 'firewall_delete', - 'software_update_inst_insert', - 'software_update_inst_update', - 'software_update_inst_delete'); + 'firewall_delete'); //* This function is called during ispconfig installation to determine // if a symlink shall be created for this plugin. @@ -81,7 +78,6 @@ class server_module { $app->modules->registerTableHook('server', 'server_module', 'process'); $app->modules->registerTableHook('server_ip', 'server_module', 'process'); $app->modules->registerTableHook('firewall', 'server_module', 'process'); - $app->modules->registerTableHook('software_update_inst', 'server_module', 'process'); // Register service //$app->services->registerService('httpd','web_module','restartHttpd'); @@ -112,11 +108,6 @@ class server_module { if($action == 'u') $app->plugins->raiseEvent('firewall_update', $data); if($action == 'd') $app->plugins->raiseEvent('firewall_delete', $data); break; - case 'software_update_inst': - if($action == 'i') $app->plugins->raiseEvent('software_update_inst_insert', $data); - if($action == 'u') $app->plugins->raiseEvent('software_update_inst_update', $data); - if($action == 'd') $app->plugins->raiseEvent('software_update_inst_delete', $data); - break; } // end switch } // end function diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php deleted file mode 100644 index 2626d1e756..0000000000 --- a/server/plugins-available/software_update_plugin.inc.php +++ /dev/null @@ -1,303 +0,0 @@ -plugins->registerEvent('software_update_inst_insert', $this->plugin_name, 'process'); - //$app->plugins->registerEvent('software_update_inst_update',$this->plugin_name,'process'); - //$app->plugins->registerEvent('software_update_inst_delete',$this->plugin_name,'process'); - - //* Register for actions - $app->plugins->registerAction('os_update', $this->plugin_name, 'os_update'); - - - } - - private function set_install_status($inst_id, $status) { - global $app; - - $app->db->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id); - $app->dbmaster->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id); - } - - public function process($event_name, $data) { - global $app, $conf; - - //* Get the info of the package: - $software_update_id = intval($data["new"]["software_update_id"]); - $software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = ?", $software_update_id); - $software_package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = ?", $software_update['package_name']); - - if($software_package['package_type'] == 'ispconfig' && !$conf['software_updates_enabled'] == true) { - $app->log('Software Updates not enabled on this server. To enable updates, set $conf["software_updates_enabled"] = true; in config.inc.php', LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $installuser = ''; - if($software_package['package_type'] == 'ispconfig') { - $installuser = ''; - } elseif ($software_package['package_type'] == 'app') { - $installuser = 'ispapps'; - } else { - $app->log('package_type not supported', LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $temp_dir = '/tmp/'.md5(uniqid(rand())); - $app->log("The temp dir is $temp_dir", LOGLEVEL_DEBUG); - mkdir($temp_dir); - if($installuser != '') chown($temp_dir, $installuser); - - if(!is_dir($temp_dir)) { - $app->log("Unable to create temp directory.", LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - //* Replace placeholders in download URL - $software_update["update_url"] = str_replace('{key}', $software_package['package_key'], $software_update["update_url"]); - - //* Download the update package - if($installuser == '') { - $cmd = "cd ? && wget ?"; - $app->system->exec_safe($cmd, $temp_dir, $software_update["update_url"]); - } else { - $cmd = "cd $temp_dir && wget ".$software_update["update_url"]; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - $app->log("Downloading the update file from: ".$software_update["update_url"], LOGLEVEL_DEBUG); - - //$url_parts = parse_url($software_update["update_url"]); - //$update_filename = basename($url_parts["path"]); - //* Find the name of the zip file which contains the app. - $tmp_dir_handle = dir($temp_dir); - $update_filename = ''; - while (false !== ($t = $tmp_dir_handle->read())) { - if($t != '.' && $t != '..' && is_file($temp_dir.'/'.$t) && substr($t, -4) == '.zip') { - $update_filename = $t; - } - } - $tmp_dir_handle->close(); - unset($tmp_dir_handle); - unset($t); - - if($update_filename == '') { - $app->log("No package file found. Download failed? Installation aborted.", LOGLEVEL_WARN); - $app->system->exec_safe("rm -rf ?", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $app->log("The update filename is $update_filename", LOGLEVEL_DEBUG); - - if(is_file($temp_dir.'/'.$update_filename)) { - - //* Checking the md5sum - if(md5_file($temp_dir.'/'.$update_filename) != $software_update["update_md5"]) { - $app->log("The md5 sum of the downloaded file is incorrect. Update aborted.", LOGLEVEL_WARN); - $app->system->exec_safe("rm -rf ", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } else { - $app->log("MD5 checksum of the downloaded file verified.", LOGLEVEL_DEBUG); - } - - - //* unpacking the update - - if($installuser == '') { - $cmd = "cd ? && unzip ?"; - $app->system->exec_safe($cmd, $temp_dir, $update_filename); - } else { - $cmd = "cd $temp_dir && unzip $update_filename"; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - - //* Create a database, if the package requires one - if($software_package['package_type'] == 'app' && $software_package['package_requires_db'] == 'mysql') { - - $app->uses('ini_parser'); - $package_config = $app->ini_parser->parse_ini_string(stripslashes($software_package['package_config'])); - - $this->create_app_db($package_config['mysql']); - $app->log("Creating the app DB.", LOGLEVEL_DEBUG); - - //* Load the sql dump into the database - if(is_file($temp_dir.'/setup.sql')) { - $db_config = $package_config['mysql']; - if( $db_config['database_user'] != '' && - $db_config['database_password'] != '' && - $db_config['database_name'] != '' && - $db_config['database_host'] != '') { - $app->system->exec_safe("mysql --default-character-set=utf8 --force -h ? -u ? ? < ?", $db_config['database_host'], $db_config['database_user'], $db_config['database_name'], $temp_dir.'/setup.sql'); - $app->log("Loading setup.sql dump into the app db.", LOGLEVEL_DEBUG); - } - } - - } - - //* Save the package config file as app.ini - if($software_package['package_config'] != '') { - file_put_contents($temp_dir.'/app.ini', $software_package['package_config']); - $app->log("Writing ".$temp_dir.'/app.ini', LOGLEVEL_DEBUG); - } - - if(is_file($temp_dir.'/setup.sh')) { - // Execute the setup script - $app->system->exec_safe('chmod +x ?', $temp_dir.'/setup.sh'); - $app->log("Executing setup.sh file in directory $temp_dir", LOGLEVEL_DEBUG); - - if($installuser == '') { - $cmd = 'cd ? && ./setup.sh > package_install.log'; - $app->system->exec_safe($cmd, $temp_dir); - } else { - $cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log'; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - - $log_data = @file_get_contents("{$temp_dir}/package_install.log"); - if(preg_match("'.*\[OK\]\s*$'is", $log_data)) { - $app->log("Installation successful", LOGLEVEL_DEBUG); - $app->log($log_data, LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "installed"); - } else { - $app->log("Installation failed:\n\n" . $log_data, LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - } else { - $app->log("setup.sh file not found", LOGLEVEL_ERROR); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - } else { - $app->log("Download of the update file failed", LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - - if($temp_dir != '' && $temp_dir != '/') $app->system->exec_safe("rm -rf ?", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - } - - private function create_app_db($db_config) { - global $app, $conf; - - if( $db_config['database_user'] != '' && - $db_config['database_password'] != '' && - $db_config['database_name'] != '' && - $db_config['database_host'] != '') { - - if(!include ISPC_LIB_PATH.'/mysql_clientdb.conf') { - $app->log('Unable to open'.ISPC_LIB_PATH.'/mysql_clientdb.conf', LOGLEVEL_ERROR); - return; - } - - if($db_config['database_user'] == 'root') { - $app->log('User root not allowed for App databases', LOGLEVEL_WARNING); - return; - } - - //* Connect to the database - $link = mysqli_connect($clientdb_host, $clientdb_user, $clientdb_password); - if (!$link) { - $app->log('Unable to connect to the database'.mysqli_connect_error(), LOGLEVEL_ERROR); - return; - } - - $query_charset_table = ''; - - //* Create the new database - if (mysqli_query($link,'CREATE DATABASE '.mysqli_real_escape_string($link, $db_config['database_name']).$query_charset_table, $link)) { - $app->log('Created MySQL database: '.$db_config['database_name'], LOGLEVEL_DEBUG); - } else { - $app->log('Unable to connect to the database'.mysqli_error($link), LOGLEVEL_ERROR); - } - - if(mysqli_query("GRANT ALL ON ".mysqli_real_escape_string($link, $db_config['database_name']).".* TO '".mysqli_real_escape_string($link, $db_config['database_user'])."'@'".$db_config['database_host']."' IDENTIFIED BY '".mysqli_real_escape_string($link, $db_config['database_password'])."';", $link)) { - $app->log('Created MySQL user: '.$db_config['database_user'], LOGLEVEL_DEBUG); - } else { - $app->log('Unable to create database user'.$db_config['database_user'].' '.mysqli_error($link), LOGLEVEL_ERROR); - } - - mysqli_close($link); - - } - - } - - //* Operating system update - public function os_update($action_name, $data) { - global $app; - - //** Debian and compatible Linux distributions - if(file_exists('/etc/debian_version')) { - exec("apt-get update"); - exec("apt-get upgrade -y"); - $app->log('Execeuted Debian / Ubuntu update', LOGLEVEL_DEBUG); - } - - //** Gentoo Linux - if(file_exists('/etc/gentoo-release')) { - exec("glsa-check -f --nocolor affected"); - $app->log('Execeuted Gentoo update', LOGLEVEL_DEBUG); - } - - return 'ok'; - } - -} // end class - -?> -- GitLab From 0856a233cfad6ccbe03bab18bbf06356730749f7 Mon Sep 17 00:00:00 2001 From: thom Date: Wed, 7 Oct 2020 15:30:42 +0200 Subject: [PATCH 006/403] Limit email backup tab through client limits (#5732) --- install/sql/incremental/upd_dev_collection.sql | 4 +++- install/sql/ispconfig3.sql | 2 ++ interface/web/client/form/client.tform.php | 7 +++++++ interface/web/client/form/client_template.tform.php | 7 +++++++ interface/web/client/form/reseller.tform.php | 7 +++++++ interface/web/client/lib/lang/ar_client.lng | 1 + interface/web/client/lib/lang/ar_client_template.lng | 1 + interface/web/client/lib/lang/ar_reseller.lng | 1 + interface/web/client/lib/lang/bg_client.lng | 1 + interface/web/client/lib/lang/bg_client_template.lng | 1 + interface/web/client/lib/lang/bg_reseller.lng | 1 + interface/web/client/lib/lang/br_client.lng | 1 + interface/web/client/lib/lang/br_client_template.lng | 1 + interface/web/client/lib/lang/br_reseller.lng | 1 + interface/web/client/lib/lang/ca_client.lng | 1 + interface/web/client/lib/lang/ca_client_template.lng | 1 + interface/web/client/lib/lang/ca_reseller.lng | 1 + interface/web/client/lib/lang/cz_client.lng | 1 + interface/web/client/lib/lang/cz_client_template.lng | 1 + interface/web/client/lib/lang/cz_reseller.lng | 1 + interface/web/client/lib/lang/de_client.lng | 1 + interface/web/client/lib/lang/de_client_template.lng | 1 + interface/web/client/lib/lang/de_reseller.lng | 1 + interface/web/client/lib/lang/dk_client.lng | 1 + interface/web/client/lib/lang/dk_client_template.lng | 1 + interface/web/client/lib/lang/dk_reseller.lng | 1 + interface/web/client/lib/lang/el_client.lng | 1 + interface/web/client/lib/lang/el_client_template.lng | 1 + interface/web/client/lib/lang/el_reseller.lng | 1 + interface/web/client/lib/lang/en_client.lng | 1 + interface/web/client/lib/lang/en_client_template.lng | 1 + interface/web/client/lib/lang/en_reseller.lng | 1 + interface/web/client/lib/lang/es_client.lng | 1 + interface/web/client/lib/lang/es_client_template.lng | 1 + interface/web/client/lib/lang/es_reseller.lng | 1 + interface/web/client/lib/lang/fi_client.lng | 1 + interface/web/client/lib/lang/fi_client_template.lng | 1 + interface/web/client/lib/lang/fi_reseller.lng | 1 + interface/web/client/lib/lang/fr_client.lng | 1 + interface/web/client/lib/lang/fr_client_template.lng | 1 + interface/web/client/lib/lang/fr_reseller.lng | 1 + interface/web/client/lib/lang/hr_client.lng | 1 + interface/web/client/lib/lang/hr_client_template.lng | 1 + interface/web/client/lib/lang/hr_reseller.lng | 1 + interface/web/client/lib/lang/hu_client.lng | 1 + interface/web/client/lib/lang/hu_client_template.lng | 1 + interface/web/client/lib/lang/hu_reseller.lng | 1 + interface/web/client/lib/lang/id_client.lng | 1 + interface/web/client/lib/lang/id_client_template.lng | 1 + interface/web/client/lib/lang/id_reseller.lng | 1 + interface/web/client/lib/lang/it_client.lng | 1 + interface/web/client/lib/lang/it_client_template.lng | 1 + interface/web/client/lib/lang/it_reseller.lng | 1 + interface/web/client/lib/lang/ja_client.lng | 1 + interface/web/client/lib/lang/ja_client_template.lng | 1 + interface/web/client/lib/lang/ja_reseller.lng | 1 + interface/web/client/lib/lang/nl_client.lng | 1 + interface/web/client/lib/lang/nl_client_template.lng | 1 + interface/web/client/lib/lang/nl_reseller.lng | 1 + interface/web/client/lib/lang/pl_client.lng | 1 + interface/web/client/lib/lang/pl_client_template.lng | 1 + interface/web/client/lib/lang/pl_reseller.lng | 1 + interface/web/client/lib/lang/pt_client.lng | 1 + interface/web/client/lib/lang/pt_client_template.lng | 1 + interface/web/client/lib/lang/pt_reseller.lng | 1 + interface/web/client/lib/lang/ro_client.lng | 1 + interface/web/client/lib/lang/ro_client_template.lng | 1 + interface/web/client/lib/lang/ro_reseller.lng | 1 + interface/web/client/lib/lang/ru_client.lng | 1 + interface/web/client/lib/lang/ru_client_template.lng | 1 + interface/web/client/lib/lang/ru_reseller.lng | 1 + interface/web/client/lib/lang/se_client.lng | 1 + interface/web/client/lib/lang/se_client_template.lng | 1 + interface/web/client/lib/lang/se_reseller.lng | 1 + interface/web/client/lib/lang/sk_client.lng | 1 + interface/web/client/lib/lang/sk_client_template.lng | 1 + interface/web/client/lib/lang/sk_reseller.lng | 1 + interface/web/client/lib/lang/tr_client.lng | 1 + interface/web/client/lib/lang/tr_client_template.lng | 1 + interface/web/client/lib/lang/tr_reseller.lng | 1 + interface/web/client/templates/client_edit_limits.htm | 6 ++++++ .../web/client/templates/client_template_edit_limits.htm | 8 +++++++- interface/web/client/templates/reseller_edit_limits.htm | 8 +++++++- interface/web/mail/form/mail_user.tform.php | 4 ++-- 84 files changed, 123 insertions(+), 5 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 8b13789179..2985a3e8ee 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1 +1,3 @@ - +-- Add column for email backup limit (#5732) +ALTER TABLE `client_template` ADD `limit_mail_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y' AFTER `limit_spamfilter_policy`; +ALTER TABLE `client` ADD `limit_mail_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y' AFTER `limit_spamfilter_policy`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 67f0f3bdcb..3cbe425408 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -184,6 +184,7 @@ CREATE TABLE `client` ( `limit_spamfilter_wblist` int(11) NOT NULL DEFAULT '0', `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0', `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0', + `limit_mail_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', @@ -315,6 +316,7 @@ CREATE TABLE `client_template` ( `limit_spamfilter_wblist` int(11) NOT NULL default '0', `limit_spamfilter_user` int(11) NOT NULL default '0', `limit_spamfilter_policy` int(11) NOT NULL default '0', + `limit_mail_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index 0801ae3515..018e174aac 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -924,6 +924,13 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_backup' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'valuelimit' => 'client:limit_mail_backup', + 'value' => array(0 => 'n', 1 => 'y') + ), 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index 4a3405bbe5..d023e7f881 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -339,6 +339,13 @@ $form["tabs"]['limits'] = array ( 'maxlength' => '10', 'rows' => '', 'cols' => '' + ), + 'limit_mail_backup' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'valuelimit' => 'client:limit_mail_backup', + 'value' => array(0 => 'n', 1 => 'y') ),/* 'default_xmppserver' => array ( 'datatype' => 'INTEGER', diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php index 3c559c78d6..0b2a0dc730 100644 --- a/interface/web/client/form/reseller.tform.php +++ b/interface/web/client/form/reseller.tform.php @@ -922,6 +922,13 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_backup' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'valuelimit' => 'client:limit_mail_backup', + 'value' => array(0 => 'n', 1 => 'y') + ), 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng index 04a7c6d17f..8cd379432c 100644 --- a/interface/web/client/lib/lang/ar_client.lng +++ b/interface/web/client/lib/lang/ar_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/ar_client_template.lng b/interface/web/client/lib/lang/ar_client_template.lng index 0a88594a59..b93ebaa519 100644 --- a/interface/web/client/lib/lang/ar_client_template.lng +++ b/interface/web/client/lib/lang/ar_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng index 512bc5cb23..a8968077ac 100644 --- a/interface/web/client/lib/lang/ar_reseller.lng +++ b/interface/web/client/lib/lang/ar_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng index d6effa66e0..ce61104a7f 100644 --- a/interface/web/client/lib/lang/bg_client.lng +++ b/interface/web/client/lib/lang/bg_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Размер на пощенските кутии' $wb['limit_spamfilter_wblist_txt'] = 'Макс. брой spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Макс. брой spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Макс. брой spamfilter policys'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Пощенски сървър по подразбиране'; $wb['company_name_txt'] = 'Компания'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/bg_client_template.lng b/interface/web/client/lib/lang/bg_client_template.lng index 75f89a0fea..ff4eb0db86 100644 --- a/interface/web/client/lib/lang/bg_client_template.lng +++ b/interface/web/client/lib/lang/bg_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng index f749fa5519..3352f07ae0 100644 --- a/interface/web/client/lib/lang/bg_reseller.lng +++ b/interface/web/client/lib/lang/bg_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Квота на пощенската кутия'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policys'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Мейл сървър по подразбиране'; $wb['company_name_txt'] = 'Име на компанията'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng index 46ad85698b..0fa94829e1 100644 --- a/interface/web/client/lib/lang/br_client.lng +++ b/interface/web/client/lib/lang/br_client.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Cota da conta de e-mail'; $wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"'; $wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por conta de e-mail'; $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de e-mail padrão'; $wb['company_name_txt'] = 'Empresa'; $wb['contact_firstname_txt'] = 'Nome do contato'; diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng index ee96172de8..225684176f 100644 --- a/interface/web/client/lib/lang/br_client_template.lng +++ b/interface/web/client/lib/lang/br_client_template.lng @@ -3,6 +3,7 @@ $wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one $wb['template_type_txt'] = 'Tipo de gabarito'; $wb['template_name_txt'] = 'Nome do gabarito'; $wb['limit_client_error_notint'] = 'Limite de cliente não é um número.'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de e-mail padrão'; $wb['limit_maildomain_txt'] = 'Limite de domínios de e-mail'; $wb['limit_mailbox_txt'] = 'Limite de contas de e-mail'; diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng index 322235d36b..d8393913df 100644 --- a/interface/web/client/lib/lang/br_reseller.lng +++ b/interface/web/client/lib/lang/br_reseller.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Cota de contas de e-mail'; $wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista branca/negra"'; $wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por usuário'; $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de e-mail padrão'; $wb['company_name_txt'] = 'Empresa'; $wb['contact_firstname_txt'] = 'Contato'; diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng index e4cc2f2dbe..58fba376ff 100644 --- a/interface/web/client/lib/lang/ca_client.lng +++ b/interface/web/client/lib/lang/ca_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota des boites courriel'; $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d\'email'; $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d\'utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Serveur mail par défaut'; $wb['company_name_txt'] = 'Nom de l\'entreprise'; $wb['contact_name_txt'] = 'Nom de contact'; diff --git a/interface/web/client/lib/lang/ca_client_template.lng b/interface/web/client/lib/lang/ca_client_template.lng index aa51796744..fb4a8c1cb0 100644 --- a/interface/web/client/lib/lang/ca_client_template.lng +++ b/interface/web/client/lib/lang/ca_client_template.lng @@ -90,6 +90,7 @@ $wb['limit_aps_txt'] = 'Nombre max d\'instances APS'; $wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng index 411096ef54..f55cbd2b76 100644 --- a/interface/web/client/lib/lang/ca_reseller.lng +++ b/interface/web/client/lib/lang/ca_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota des boites courriel'; $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d\'emails'; $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d\'utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Serveur mail par défaut'; $wb['company_name_txt'] = 'Nom de l\'entreprise'; $wb['contact_name_txt'] = 'Nom de contact'; diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng index 5d26a51cda..01efe3372b 100644 --- a/interface/web/client/lib/lang/cz_client.lng +++ b/interface/web/client/lib/lang/cz_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet spamfiltrových bílých / černých listinových filtrů'; $wb['limit_spamfilter_user_txt'] = 'Max. počet spamflitrových uživatelů'; $wb['limit_spamfilter_policy_txt'] = 'Max. počet spamfiltrových politik'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Výchozí e-mailový server'; $wb['company_name_txt'] = 'Název společnosti'; $wb['contact_name_txt'] = 'Název kontaktu'; diff --git a/interface/web/client/lib/lang/cz_client_template.lng b/interface/web/client/lib/lang/cz_client_template.lng index 6b711f44de..697b6a184a 100644 --- a/interface/web/client/lib/lang/cz_client_template.lng +++ b/interface/web/client/lib/lang/cz_client_template.lng @@ -90,6 +90,7 @@ $wb['limit_aps_txt'] = 'Max. počet APS instalací'; $wb['limit_aps_error_notint'] = 'Limit pro APS instalace musí být číslo.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Klientské limity'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Výchozí E-mailový server'; $wb['default_webserver_txt'] = 'Výchozí webový server'; $wb['default_dnsserver_txt'] = 'Výchozí DNS server'; diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng index d9ddb4c5c4..2650592334 100644 --- a/interface/web/client/lib/lang/cz_reseller.lng +++ b/interface/web/client/lib/lang/cz_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet spamfiltrových bílých / černých listinových filtrů'; $wb['limit_spamfilter_user_txt'] = 'Max. počet spamflitrových uživatelů'; $wb['limit_spamfilter_policy_txt'] = 'Max. počet spamfiltrových politik'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Výchozí e-mailový server'; $wb['company_name_txt'] = 'Název společnosti'; $wb['contact_name_txt'] = 'Název kontaktu'; diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng index ca22ce638c..ae58555c17 100644 --- a/interface/web/client/lib/lang/de_client.lng +++ b/interface/web/client/lib/lang/de_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'E-Mail Konto Beschränkung'; $wb['limit_spamfilter_wblist_txt'] = 'Max. Anzahl an Spamfilter (White-/Blacklist)'; $wb['limit_spamfilter_user_txt'] = 'Max. Anzahl an Spamfilter Benutzern'; $wb['limit_spamfilter_policy_txt'] = 'Max. Anzahl an Spamfilter Richtlinien'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standardmailserver'; $wb['company_name_txt'] = 'Firmenname'; $wb['contact_firstname_txt'] = 'Vorname'; diff --git a/interface/web/client/lib/lang/de_client_template.lng b/interface/web/client/lib/lang/de_client_template.lng index a8431a8187..432a5d9c71 100644 --- a/interface/web/client/lib/lang/de_client_template.lng +++ b/interface/web/client/lib/lang/de_client_template.lng @@ -92,6 +92,7 @@ $wb['limit_aps_txt'] = 'Max. Anzahl an APS-Instanzen'; $wb['limit_aps_error_notint'] = 'Das APS Instanzen Limit muss eine Zahl sein.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng index 9f68b18cf5..53429cb0f1 100644 --- a/interface/web/client/lib/lang/de_reseller.lng +++ b/interface/web/client/lib/lang/de_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'E-Mail konten Beschränkung'; $wb['limit_spamfilter_wblist_txt'] = 'Max. Anzahl an White-/Blacklist Filter'; $wb['limit_spamfilter_user_txt'] = 'Max. Anzahl an Spamfilter Benutzern'; $wb['limit_spamfilter_policy_txt'] = 'Max. Anzahl an Spamfilter Richtlinien'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standardmailserver'; $wb['company_name_txt'] = 'Firmenname'; $wb['contact_firstname_txt'] = 'Vorname'; diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng index b1e549dd91..b1aa48c6e5 100644 --- a/interface/web/client/lib/lang/dk_client.lng +++ b/interface/web/client/lib/lang/dk_client.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Postboks kvota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. antal af spamfilter white/blacklist filtere'; $wb['limit_spamfilter_user_txt'] = 'Max. antal af spamfilter brugere'; $wb['limit_spamfilter_policy_txt'] = 'Max. antal af spamfilter politikker'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standard Mailserver'; $wb['company_name_txt'] = 'Firma navn'; $wb['contact_name_txt'] = 'Kontakt navn'; diff --git a/interface/web/client/lib/lang/dk_client_template.lng b/interface/web/client/lib/lang/dk_client_template.lng index 04acf57d64..4e7a609aa9 100644 --- a/interface/web/client/lib/lang/dk_client_template.lng +++ b/interface/web/client/lib/lang/dk_client_template.lng @@ -90,6 +90,7 @@ $wb['limit_aps_txt'] = 'Max. antal af APS instances'; $wb['limit_aps_error_notint'] = 'APS forekomst grænse skal være et tal.'; $wb['limit_domainmodule_txt'] = 'Domænemodul Begrænsning'; $wb['client_limits_txt'] = 'Kunde Begrænsninger'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng index 12004df761..af8c3fc53e 100644 --- a/interface/web/client/lib/lang/dk_reseller.lng +++ b/interface/web/client/lib/lang/dk_reseller.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Postboks kvota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. antal af spamfilter white/blacklist filtere'; $wb['limit_spamfilter_user_txt'] = 'Max. antal af spamfilter brugere'; $wb['limit_spamfilter_policy_txt'] = 'Max. antal af spamfilter politikker'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standard Mailserver'; $wb['company_name_txt'] = 'Firma navn'; $wb['contact_name_txt'] = 'Kontakt navn'; diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng index 144e632ef6..0058743c90 100644 --- a/interface/web/client/lib/lang/el_client.lng +++ b/interface/web/client/lib/lang/el_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Όριο χώρου θυρίδας'; $wb['limit_spamfilter_wblist_txt'] = 'Όριο spamfilter white / blacklist'; $wb['limit_spamfilter_user_txt'] = 'Όριο χρηστών spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Όριο πολιτικών spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Προκαθορισμένος Mailserver'; $wb['company_name_txt'] = 'Όνομα εταιρίας'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/el_client_template.lng b/interface/web/client/lib/lang/el_client_template.lng index 91be0bcffd..9202451f35 100644 --- a/interface/web/client/lib/lang/el_client_template.lng +++ b/interface/web/client/lib/lang/el_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng index 3a5e5159aa..190943bfeb 100644 --- a/interface/web/client/lib/lang/el_reseller.lng +++ b/interface/web/client/lib/lang/el_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Όριο θυρίδας'; $wb['limit_spamfilter_wblist_txt'] = 'Όριο φίλτρων spamfilter white / blacklist'; $wb['limit_spamfilter_user_txt'] = 'Όριο χρηστών spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Όριο πολιτικών spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Προκαθορισμένος Mailserver'; $wb['company_name_txt'] = 'Όνομα Εταιρίας'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng index a5991260c5..28e637929d 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng index aa3dfdcb6e..56878843ff 100644 --- a/interface/web/client/lib/lang/en_client_template.lng +++ b/interface/web/client/lib/lang/en_client_template.lng @@ -3,6 +3,7 @@ $wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one $wb['template_type_txt'] = 'Template type'; $wb['template_name_txt'] = 'Template name'; $wb['limit_client_error_notint'] = 'Client Limit is not a number.'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['limit_maildomain_txt'] = 'Max. number of email domains'; $wb['limit_mailbox_txt'] = 'Max. number of mailboxes'; diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng index ec94cb0178..47bc8d37d2 100644 --- a/interface/web/client/lib/lang/en_reseller.lng +++ b/interface/web/client/lib/lang/en_reseller.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng index eae85315b6..44b68fca33 100644 --- a/interface/web/client/lib/lang/es_client.lng +++ b/interface/web/client/lib/lang/es_client.lng @@ -30,6 +30,7 @@ $wb['db_servers_txt'] = 'Servidores de base de datos'; $wb['db_servers_used'] = 'El servidor que está intentando borrar de este cliente está siendo utilizado como servidor de base de datos. Por favor asegúrese de que este servidor no esté siendo utilizado por este cliente antes de borrarlo.'; $wb['default_dbserver_txt'] = 'Servidor de base de datos por defecto'; $wb['default_dnsserver_txt'] = 'Servidor DNS por defecto'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de correo por defecto'; $wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto'; $wb['default_webserver_txt'] = 'Servidor web por defecto'; diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng index 5c55b23f89..5d968437f6 100644 --- a/interface/web/client/lib/lang/es_client_template.lng +++ b/interface/web/client/lib/lang/es_client_template.lng @@ -6,6 +6,7 @@ $wb['cron_job_limits_txt'] = 'Límites de trabajos programados'; $wb['database_limits_txt'] = 'Límites de base de datos'; $wb['default_dbserver_txt'] = 'Servidor de bases de datos por defecto'; $wb['default_dnsserver_txt'] = 'Servidor DNS por defecto'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de correo por defecto'; $wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto'; $wb['default_webserver_txt'] = 'Servidor web por defecto'; diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng index 6830c56cb8..e3cbe41046 100644 --- a/interface/web/client/lib/lang/es_reseller.lng +++ b/interface/web/client/lib/lang/es_reseller.lng @@ -34,6 +34,7 @@ $wb['db_servers_txt'] = 'Servidor de base de datos'; $wb['db_servers_used'] = 'El servidor que está intentando borrar de este cliente está siendo utilizado como servidor de base de datos. Por favor asegúrese de que este servidor no esté siendo utilizado por este cliente antes de borrarlo.'; $wb['default_dbserver_txt'] = 'Servidor de base de datos por defecto'; $wb['default_dnsserver_txt'] = 'Servidor DNS por defecto'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de correo por defecto'; $wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto'; $wb['default_webserver_txt'] = 'Servidor web por defecto'; diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng index 7769af8b99..81f87ce493 100644 --- a/interface/web/client/lib/lang/fi_client.lng +++ b/interface/web/client/lib/lang/fi_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Postilaatikon enimmäiskoko'; $wb['limit_spamfilter_wblist_txt'] = 'Roskapostisuodattimien määrä'; $wb['limit_spamfilter_user_txt'] = 'Roskapostisuodattimen käyttäjien määrä'; $wb['limit_spamfilter_policy_txt'] = 'Roskapostisuodattimen kohtelutapojen määrä'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Oletuspostipalvelin'; $wb['company_name_txt'] = 'Yrityksen nimi'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/fi_client_template.lng b/interface/web/client/lib/lang/fi_client_template.lng index 70d9069664..142208637f 100644 --- a/interface/web/client/lib/lang/fi_client_template.lng +++ b/interface/web/client/lib/lang/fi_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng index fbd09f4b3e..e32c8f1e13 100644 --- a/interface/web/client/lib/lang/fi_reseller.lng +++ b/interface/web/client/lib/lang/fi_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Sähköpostilaatikoiden levytila'; $wb['limit_spamfilter_wblist_txt'] = 'Roskapostisuodatimen estetty / sallittu-suodattimien enimmäismäärä'; $wb['limit_spamfilter_user_txt'] = 'Roskapostisuodattimen käyttäjien enimmäismäärä'; $wb['limit_spamfilter_policy_txt'] = 'Roskapostin kohtelutapojen enimmäismäärä'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Oletuspostipalvelin'; $wb['company_name_txt'] = 'Yrityksen nimi'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng index c3de724d93..7722a4544a 100644 --- a/interface/web/client/lib/lang/fr_client.lng +++ b/interface/web/client/lib/lang/fr_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota des boîtes aux lettres'; $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d’e-mail'; $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d’utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Serveur mail par défaut'; $wb['company_name_txt'] = 'Nom de l’entreprise'; $wb['contact_name_txt'] = 'Nom de contact'; diff --git a/interface/web/client/lib/lang/fr_client_template.lng b/interface/web/client/lib/lang/fr_client_template.lng index b81788c0d4..8d36e144c6 100644 --- a/interface/web/client/lib/lang/fr_client_template.lng +++ b/interface/web/client/lib/lang/fr_client_template.lng @@ -90,6 +90,7 @@ $wb['limit_aps_txt'] = 'Nombre max d’instances APS'; $wb['limit_aps_error_notint'] = 'La limite d’instances APS doit être un nombre.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng index 76d44cb324..704f9406df 100644 --- a/interface/web/client/lib/lang/fr_reseller.lng +++ b/interface/web/client/lib/lang/fr_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota des boîtes aux lettres'; $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d’e-mails'; $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d’utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Serveur mail par défaut'; $wb['company_name_txt'] = 'Nom de l’entreprise'; $wb['contact_name_txt'] = 'Nom de contact'; diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng index 4d16bac0cb..aa3ffba78f 100644 --- a/interface/web/client/lib/lang/hr_client.lng +++ b/interface/web/client/lib/lang/hr_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; $wb['limit_spamfilter_wblist_txt'] = 'Maksimalan broj spamfilter white / blacklist filtera'; $wb['limit_spamfilter_user_txt'] = 'Maksimalan broj spamfilter korisnika'; $wb['limit_spamfilter_policy_txt'] = 'Maksimalan broj spamfilter pravila'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Izaberi email server'; $wb['company_name_txt'] = 'Poduzeće'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/hr_client_template.lng b/interface/web/client/lib/lang/hr_client_template.lng index 12fabbe723..641e4ab3fa 100644 --- a/interface/web/client/lib/lang/hr_client_template.lng +++ b/interface/web/client/lib/lang/hr_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng index d4b9f58eeb..6b2ee95138 100644 --- a/interface/web/client/lib/lang/hr_reseller.lng +++ b/interface/web/client/lib/lang/hr_reseller.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; $wb['limit_spamfilter_wblist_txt'] = 'Maksimalan broj spamfilter white / blacklist filtera'; $wb['limit_spamfilter_user_txt'] = 'Maksimalan broj spamfilter korisnika'; $wb['limit_spamfilter_policy_txt'] = 'Maksimalan broj spamfilter pravila'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Izaberi email server'; $wb['company_name_txt'] = 'Poduzeće'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng index b11e03273e..85d8e87a88 100644 --- a/interface/web/client/lib/lang/hu_client.lng +++ b/interface/web/client/lib/lang/hu_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox korlát'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Alap levelező szerver'; $wb['company_name_txt'] = 'Cégnév'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/hu_client_template.lng b/interface/web/client/lib/lang/hu_client_template.lng index 3df432a661..e03e1fd983 100644 --- a/interface/web/client/lib/lang/hu_client_template.lng +++ b/interface/web/client/lib/lang/hu_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng index 76755a112b..9c925bf07d 100644 --- a/interface/web/client/lib/lang/hu_reseller.lng +++ b/interface/web/client/lib/lang/hu_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Cégnév'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng index df858ebdfa..56c0fa4b76 100644 --- a/interface/web/client/lib/lang/id_client.lng +++ b/interface/web/client/lib/lang/id_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; $wb['limit_spamfilter_wblist_txt'] = 'Jumlah maks penyaringan whitelist/blacklist spamfilter'; $wb['limit_spamfilter_user_txt'] = 'Jumlah maks pengguna spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Jumlah maks kebijakan spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Server Mail Default'; $wb['company_name_txt'] = 'Nama Perusahaan'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/id_client_template.lng b/interface/web/client/lib/lang/id_client_template.lng index 57c55be576..a99e30763c 100644 --- a/interface/web/client/lib/lang/id_client_template.lng +++ b/interface/web/client/lib/lang/id_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng index e639f4929e..16433cc0e8 100644 --- a/interface/web/client/lib/lang/id_reseller.lng +++ b/interface/web/client/lib/lang/id_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; $wb['limit_spamfilter_wblist_txt'] = 'Jumlah maks penyaringan whitelist/blacklist spamfilter'; $wb['limit_spamfilter_user_txt'] = 'Jumlah maks pengguna spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Jumlah maks kebijakan spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Server Mail Default'; $wb['company_name_txt'] = 'Nama Perusahaan'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng index 8442ace734..754e875c0e 100644 --- a/interface/web/client/lib/lang/it_client.lng +++ b/interface/web/client/lib/lang/it_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Limite quota mailbox'; $wb['limit_spamfilter_wblist_txt'] = 'Numero massimo di filtri spamfilter white / blacklist'; $wb['limit_spamfilter_user_txt'] = 'Numero massimo di utenti spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Numero massimo di policy per spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Server di posta predefinito'; $wb['company_name_txt'] = 'Nome Azienda'; $wb['contact_name_txt'] = 'Nome contatto'; diff --git a/interface/web/client/lib/lang/it_client_template.lng b/interface/web/client/lib/lang/it_client_template.lng index 40ef74de16..36718d4613 100644 --- a/interface/web/client/lib/lang/it_client_template.lng +++ b/interface/web/client/lib/lang/it_client_template.lng @@ -90,6 +90,7 @@ $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; $wb['template_name_txt'] = 'Template name'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng index 8b5d719427..3420507d20 100644 --- a/interface/web/client/lib/lang/it_reseller.lng +++ b/interface/web/client/lib/lang/it_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_name_txt'] = 'Contact name'; diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng index de4642d72d..8894882692 100644 --- a/interface/web/client/lib/lang/ja_client.lng +++ b/interface/web/client/lib/lang/ja_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'メールボックスの容量'; $wb['limit_spamfilter_wblist_txt'] = '迷惑メールのホワイトリスト、ブラックリストフィルターの最大数'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = '迷惑メールフィルタのポリシーの最大数'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'デフォルトのメールサーバー'; $wb['company_name_txt'] = '社名'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/ja_client_template.lng b/interface/web/client/lib/lang/ja_client_template.lng index 7381465d66..3d9780972c 100644 --- a/interface/web/client/lib/lang/ja_client_template.lng +++ b/interface/web/client/lib/lang/ja_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng index a4df95b8b9..a58895149d 100644 --- a/interface/web/client/lib/lang/ja_reseller.lng +++ b/interface/web/client/lib/lang/ja_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'メールボックスの容量'; $wb['limit_spamfilter_wblist_txt'] = 'スパムメールのホワイトリスト、ブラックリストフィルターの最大数'; $wb['limit_spamfilter_user_txt'] = 'スパムフィルターユーザーの最大数'; $wb['limit_spamfilter_policy_txt'] = 'スパムフィルターポリシーの最大数'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'デフォルトのメールサーバー'; $wb['company_name_txt'] = '社名'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng index 586f773bc6..7eaa890496 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -12,6 +12,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. aantal spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. aantal spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. aantal spamfilter policys'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standaard mailserver'; $wb['company_name_txt'] = 'Bedrijfsnaam'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/nl_client_template.lng b/interface/web/client/lib/lang/nl_client_template.lng index da4721757d..8fa9386bea 100644 --- a/interface/web/client/lib/lang/nl_client_template.lng +++ b/interface/web/client/lib/lang/nl_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng index e8df5f7ad8..117e877cc3 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. aantal spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. aantal spamfilter gebruikers'; $wb['limit_spamfilter_policy_txt'] = 'Max. aantal spamfilter policys'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Standaard Mailserver'; $wb['company_name_txt'] = 'Bedrijfsnaam'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng index 89fafa6776..42b20e9ca9 100644 --- a/interface/web/client/lib/lang/pl_client.lng +++ b/interface/web/client/lib/lang/pl_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Pojemność skrzynki'; $wb['limit_spamfilter_wblist_txt'] = 'Maksymalna ilość filtrów spamu białej / czarnej listy'; $wb['limit_spamfilter_user_txt'] = 'Maksymalna ilość filtrów spamu użytkowników'; $wb['limit_spamfilter_policy_txt'] = 'Maksymalna ilość polityk filtrów spamu'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Domyślny serwer e-mail'; $wb['company_name_txt'] = 'Nazwa firmy'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/pl_client_template.lng b/interface/web/client/lib/lang/pl_client_template.lng index 3a878ec974..b3f2bc205d 100644 --- a/interface/web/client/lib/lang/pl_client_template.lng +++ b/interface/web/client/lib/lang/pl_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Maks. liczba instancji APS'; $wb['limit_aps_error_notint'] = 'Limit instancji APS musi być liczbą'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng index 71f5bcfa4b..1c11f77149 100644 --- a/interface/web/client/lib/lang/pl_reseller.lng +++ b/interface/web/client/lib/lang/pl_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Limit skrzynki pocztowej'; $wb['limit_spamfilter_wblist_txt'] = 'Maksymalna ilość filtrów spamu białej / czarnej listy'; $wb['limit_spamfilter_user_txt'] = 'Maksymalna ilość użytkowników z filtrem spamu'; $wb['limit_spamfilter_policy_txt'] = 'Maksymalna ilość polityk filtrów spamu'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Domyślny serwer poczty'; $wb['company_name_txt'] = 'Nazwa firmy'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng index 9ce35235cd..4e99eafc01 100644 --- a/interface/web/client/lib/lang/pt_client.lng +++ b/interface/web/client/lib/lang/pt_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota de Correio'; $wb['limit_spamfilter_wblist_txt'] = 'Número máximo de filtros spam lista branca / negra'; $wb['limit_spamfilter_user_txt'] = 'Número máximo de utilizadors de filtros spam'; $wb['limit_spamfilter_policy_txt'] = 'Número máximo de políticas de filtros spam'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de Correio Padrão'; $wb['company_name_txt'] = 'Empresa'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/pt_client_template.lng b/interface/web/client/lib/lang/pt_client_template.lng index 0c4a949d49..05672e1c36 100644 --- a/interface/web/client/lib/lang/pt_client_template.lng +++ b/interface/web/client/lib/lang/pt_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng index 6bd89a971a..e79807f343 100644 --- a/interface/web/client/lib/lang/pt_reseller.lng +++ b/interface/web/client/lib/lang/pt_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Quota de correio'; $wb['limit_spamfilter_wblist_txt'] = 'Número máximo de filtros do spamfilter lista branca / negra'; $wb['limit_spamfilter_user_txt'] = 'Número máximo de utilizadors de spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Número máximo de políticas de spamfilter'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Servidor de Correio Padrão'; $wb['company_name_txt'] = 'Empresa'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng index 3bc5e59d2a..da0ffa8866 100644 --- a/interface/web/client/lib/lang/ro_client.lng +++ b/interface/web/client/lib/lang/ro_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Numar maxim de filtre spam whitelist /blacklist'; $wb['limit_spamfilter_user_txt'] = 'Numar maxim de filtre spam'; $wb['limit_spamfilter_policy_txt'] = 'Numar maxim de reguli filtre spam '; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Nume companie'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/ro_client_template.lng b/interface/web/client/lib/lang/ro_client_template.lng index 57cbe690dd..e0d6836845 100644 --- a/interface/web/client/lib/lang/ro_client_template.lng +++ b/interface/web/client/lib/lang/ro_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng index 512bc5cb23..a8968077ac 100644 --- a/interface/web/client/lib/lang/ro_reseller.lng +++ b/interface/web/client/lib/lang/ro_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng index 080512f5b0..e36aac3984 100644 --- a/interface/web/client/lib/lang/ru_client.lng +++ b/interface/web/client/lib/lang/ru_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Квота почтового ящика'; $wb['limit_spamfilter_wblist_txt'] = 'Макс. количество фильтров белого/черного списка'; $wb['limit_spamfilter_user_txt'] = 'Макс. количество пользователей спам-фильтра'; $wb['limit_spamfilter_policy_txt'] = 'Макс. количество правил спам-фильтра'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Почтовый сервер по умолчанию'; $wb['company_name_txt'] = 'Название компании'; $wb['contact_firstname_txt'] = 'Имя контакта'; diff --git a/interface/web/client/lib/lang/ru_client_template.lng b/interface/web/client/lib/lang/ru_client_template.lng index 46168e1ad5..1c3690f2ea 100644 --- a/interface/web/client/lib/lang/ru_client_template.lng +++ b/interface/web/client/lib/lang/ru_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Макс. количество экземпляров AP $wb['limit_aps_error_notint'] = 'Лимит экземпляров APS должен быть числом.'; $wb['limit_domainmodule_txt'] = 'Лимит модулей домена'; $wb['client_limits_txt'] = 'Лимиты Клиента'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Почтовый сервер по умолчанию'; $wb['default_webserver_txt'] = 'Web-сервер по умолчанию'; $wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию'; diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng index f5806377c3..e65dab5c07 100644 --- a/interface/web/client/lib/lang/ru_reseller.lng +++ b/interface/web/client/lib/lang/ru_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Квота ящика'; $wb['limit_spamfilter_wblist_txt'] = 'Макс. количество белых/черных списков спам-фильтра'; $wb['limit_spamfilter_user_txt'] = 'Макс. количество пользователей спам-фильтра'; $wb['limit_spamfilter_policy_txt'] = 'Макс. количество правил спам-фильтра'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Почтовый сервер по умолчанию'; $wb['company_name_txt'] = 'Компания'; $wb['contact_firstname_txt'] = 'Имя контакта'; diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng index feaee0e9c1..6a30fe18eb 100644 --- a/interface/web/client/lib/lang/se_client.lng +++ b/interface/web/client/lib/lang/se_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Kvot för epostkonton'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max antal spamfilteranvändare'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Förvald epostserver'; $wb['company_name_txt'] = 'Företagsnamn'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng index 46932c9e50..a0b190dfd0 100644 --- a/interface/web/client/lib/lang/se_client_template.lng +++ b/interface/web/client/lib/lang/se_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng index 512bc5cb23..a8968077ac 100644 --- a/interface/web/client/lib/lang/se_reseller.lng +++ b/interface/web/client/lib/lang/se_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['company_name_txt'] = 'Company name'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng index 542b4121d9..9287121210 100644 --- a/interface/web/client/lib/lang/sk_client.lng +++ b/interface/web/client/lib/lang/sk_client.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet Spamfilter biele / čierne listiny filtre'; $wb['limit_spamfilter_user_txt'] = 'Max. počet poUžívateľov Spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Max. počet Spamfilter politík'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Predvolený Mailserver'; $wb['company_name_txt'] = 'Názov firmy'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/sk_client_template.lng b/interface/web/client/lib/lang/sk_client_template.lng index e3cb788bdd..984958421e 100644 --- a/interface/web/client/lib/lang/sk_client_template.lng +++ b/interface/web/client/lib/lang/sk_client_template.lng @@ -91,6 +91,7 @@ $wb['limit_aps_txt'] = 'Max. number of APS instances'; $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.'; $wb['limit_domainmodule_txt'] = 'Domainmodule Limit'; $wb['client_limits_txt'] = 'Client Limits'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Default Mailserver'; $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng index 82b289df2b..78e4484a57 100644 --- a/interface/web/client/lib/lang/sk_reseller.lng +++ b/interface/web/client/lib/lang/sk_reseller.lng @@ -11,6 +11,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet Spamfilter biele / čierne filtre'; $wb['limit_spamfilter_user_txt'] = 'Max. počet poUžívateľov Spamfiltrov'; $wb['limit_spamfilter_policy_txt'] = 'Max. počet Spamfilter politík'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Predvolený Mailserver'; $wb['company_name_txt'] = 'Názov firmy'; $wb['contact_firstname_txt'] = 'Contact firstname'; diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng index d87fe26da9..5d86b052fe 100644 --- a/interface/web/client/lib/lang/tr_client.lng +++ b/interface/web/client/lib/lang/tr_client.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; $wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı'; $wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcısı Sayısı'; $wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu'; $wb['company_name_txt'] = 'Kuruluş Adı'; $wb['contact_firstname_txt'] = 'İlgili Adı'; diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng index 8ae0954db5..5133fbc382 100644 --- a/interface/web/client/lib/lang/tr_client_template.lng +++ b/interface/web/client/lib/lang/tr_client_template.lng @@ -3,6 +3,7 @@ $wb['ssh_chroot_notempty'] = 'No SSH chroot option selected. Select at least one $wb['template_type_txt'] = 'Kalıp Türü'; $wb['template_name_txt'] = 'Kalıp Adı'; $wb['limit_client_error_notint'] = 'Müşteri sınırı bir sayı olmalıdır.'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu'; $wb['limit_maildomain_txt'] = 'En Fazla E-posta Etki Alanı Sayısı'; $wb['limit_mailbox_txt'] = 'En Fazla E-posta Kutusu Sayısı'; diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng index d7bc06429e..bf5482ec58 100644 --- a/interface/web/client/lib/lang/tr_reseller.lng +++ b/interface/web/client/lib/lang/tr_reseller.lng @@ -13,6 +13,7 @@ $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; $wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı'; $wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Kullanıcısı Sayısı'; $wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Kuralı Sayısı'; +$wb['limit_mail_backup_txt'] = 'E-mail backup function available'; $wb['default_mailserver_txt'] = 'Varsayılan E-posta Sunucusu'; $wb['company_name_txt'] = 'Kuruluş Adı'; $wb['contact_firstname_txt'] = 'İlgili Adı'; diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index db0b370804..489bec3f89 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -232,6 +232,12 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm index a3e4b63e9a..345249ef9b 100644 --- a/interface/web/client/templates/client_template_edit_limits.htm +++ b/interface/web/client/templates/client_template_edit_limits.htm @@ -189,6 +189,12 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
@@ -318,7 +324,7 @@
- + diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm index c0a25939df..88080abf3b 100644 --- a/interface/web/client/templates/reseller_edit_limits.htm +++ b/interface/web/client/templates/reseller_edit_limits.htm @@ -233,6 +233,12 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
@@ -362,7 +368,7 @@
- + diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php index 85e310648b..cc082588e1 100644 --- a/interface/web/mail/form/mail_user.tform.php +++ b/interface/web/mail/form/mail_user.tform.php @@ -44,8 +44,8 @@ $global_config = $app->getconf->get_global_config(); $backup_available = true; if(!$app->auth->is_admin()) { $client_group_id = $_SESSION['s']['user']['default_group']; - $client = $app->db->queryOneRecord("SELECT limit_backup FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); - if($client['limit_backup'] != 'y') $backup_available = false; + $client = $app->db->queryOneRecord("SELECT limit_mail_backup FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + if($client['limit_mail_backup'] != 'y') $backup_available = false; } $form["title"] = "Mailbox"; -- GitLab From 57c1e8591237dbb452f2c152d8ae1254ffda8ace Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 20 Dec 2019 17:05:20 +0100 Subject: [PATCH 007/403] Dutch for parent_client_id_txt --- interface/web/client/lib/lang/nl_client.lng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng index 586f773bc6..cd9f6e1742 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -154,7 +154,7 @@ $wb['gender_m_txt'] = 'Mr.'; $wb['gender_f_txt'] = 'Ms.'; $wb['added_by_txt'] = 'Added by'; $wb['added_date_txt'] = 'Added date'; -$wb['parent_client_id_txt'] = 'Client of reseller'; +$wb['parent_client_id_txt'] = 'Client van reseller'; $wb['none_txt'] = 'none'; $wb['email_error_empty'] = 'Email is empty'; $wb['xmpp_limits_txt'] = 'XMPP Limits'; -- GitLab From d58f5b64bfa648910b764b9112528b9fe9459025 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 16 Jul 2020 14:44:10 +0200 Subject: [PATCH 008/403] Add noscript message to main page --- interface/web/themes/default/templates/main.tpl.htm | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm index 39622548aa..a6da294582 100644 --- a/interface/web/themes/default/templates/main.tpl.htm +++ b/interface/web/themes/default/templates/main.tpl.htm @@ -102,6 +102,7 @@
+
-- GitLab From dd965fcdd135ac1e66d2497ac89d3e115827e46b Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 17 Jul 2020 08:49:47 +0200 Subject: [PATCH 009/403] Remove stale HTML from tools index page Was only cousing a white box to be visible, no content. --- interface/web/tools/templates/index.htm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/interface/web/tools/templates/index.htm b/interface/web/tools/templates/index.htm index 951c43b564..9b184791ef 100644 --- a/interface/web/tools/templates/index.htm +++ b/interface/web/tools/templates/index.htm @@ -3,19 +3,3 @@

-
- -
- -

 

- - - - - -
-   -
-
- -
\ No newline at end of file -- GitLab From b28e2cfb8fe1ad5d5c95f611ceac3428f011b91c Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 26 Aug 2020 11:26:44 +0200 Subject: [PATCH 010/403] Match layout of CHECKBOXARRAY for new and edit. On the new form it was a mess with all checkboxed in a row, on edit it was a nice list. Especially visible on the Remote user form. --- interface/lib/classes/tform_base.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 91a855872c..a26722a804 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -697,7 +697,7 @@ class tform_base { if(trim($tvl) == trim($k)) $checked = ' CHECKED'; } // $out .= "\r\n"; - $out .= "  \r\n"; + $out .= "
\r\n"; $elementNo++; } } -- GitLab From 6c2c59e5d37d1a77a5406af40fec5141f21cf389 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Mon, 28 Sep 2020 14:25:02 +0200 Subject: [PATCH 011/403] Monitor MySQL on the configured port, not always on 3306 --- server/lib/classes/monitor_tools.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 31e36836d5..6e91cb42ce 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -460,7 +460,7 @@ class monitor_tools { /* Monitor MySQL Server */ $data['mysqlserver'] = -1; // unknown - not needed if ($services['db_server'] == 1) { - if ($this->_checkTcp('localhost', 3306)) { + if ($this->_checkTcp($conf['db_host'], $conf['db_port'])) { $data['mysqlserver'] = 1; } else { $data['mysqlserver'] = 0; -- GitLab From dd22c2e5f893dac1fbb0afb04cd3ca808dfb07c4 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 7 Oct 2020 22:11:21 +0200 Subject: [PATCH 012/403] Fix DNS record list sorting, fixes #4431 --- interface/web/dns/templates/dns_a_list.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm index e3e5486763..3c877ead26 100644 --- a/interface/web/dns/templates/dns_a_list.htm +++ b/interface/web/dns/templates/dns_a_list.htm @@ -62,7 +62,7 @@ - + -- GitLab From 4f8639b5934286acf8ba4724b3ac0f1afd00e934 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 8 Oct 2020 14:57:27 +0200 Subject: [PATCH 013/403] Apply autofocus to ajax loaded pages --- interface/web/dns/templates/dns_a_edit.htm | 2 +- interface/web/mail/templates/mail_aliasdomain_edit.htm | 2 +- interface/web/mail/templates/mail_user_mailbox_edit.htm | 2 +- interface/web/themes/default/assets/javascripts/ispconfig.js | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm index 0754bf9395..592999de7e 100644 --- a/interface/web/dns/templates/dns_a_edit.htm +++ b/interface/web/dns/templates/dns_a_edit.htm @@ -1,6 +1,6 @@
-

{tmpl_var name='name_hint_txt'}

+

{tmpl_var name='name_hint_txt'}

diff --git a/interface/web/mail/templates/mail_aliasdomain_edit.htm b/interface/web/mail/templates/mail_aliasdomain_edit.htm index a18ff0e3db..8413ff3f8f 100644 --- a/interface/web/mail/templates/mail_aliasdomain_edit.htm +++ b/interface/web/mail/templates/mail_aliasdomain_edit.htm @@ -1,6 +1,6 @@
-
{tmpl_var name='source_domain'}
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm index cd7ffcf0b6..170ab15db0 100644 --- a/interface/web/mail/templates/mail_user_mailbox_edit.htm +++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm @@ -1,6 +1,6 @@
-
  {tmpl_var name='name_optional_txt'} +
  {tmpl_var name='name_optional_txt'}
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js index 26cfb0a9e4..c634ff7fb2 100644 --- a/interface/web/themes/default/assets/javascripts/ispconfig.js +++ b/interface/web/themes/default/assets/javascripts/ispconfig.js @@ -137,6 +137,9 @@ var ISPConfig = { }); $('[data-toggle="tooltip"]').tooltip({ }); + + $('input[autofocus]').focus(); + // grab all password fields and set the readonly prop to prevent password managers to fill in new password $('input[type="password"]').each(function() { $(this).prop('readonly', true) -- GitLab From 39fb8b09d76a9cf52a782b9692a49f69284898cf Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 9 Oct 2020 14:38:05 +0200 Subject: [PATCH 014/403] Optional configure CHECKBOXARRAY to be inline or one per line, default inline --- interface/lib/classes/tform_base.inc.php | 16 ++++++++++++++-- interface/web/admin/form/remote_user.tform.php | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index a26722a804..0a35a67b22 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -560,7 +560,13 @@ class tform_base { if(trim($tvl) == trim($k)) $checked = ' CHECKED'; } // $out .= "\r\n"; - $out .= "
\r\n"; + $out .= ""; + if (isset($field['render_inline']) && $field['render_inline'] == 'n') { + $out .= "
\r\n"; + } + else { + $out .= " \r\n"; + } $elementNo++; } } @@ -697,7 +703,13 @@ class tform_base { if(trim($tvl) == trim($k)) $checked = ' CHECKED'; } // $out .= "\r\n"; - $out .= "
\r\n"; + $out .= ""; + if (isset($field['render_inline']) && $field['render_inline'] == 'n') { + $out .= "
\r\n"; + } + else { + $out .= " \r\n"; + } $elementNo++; } } diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php index 9263266a27..6e351730c2 100644 --- a/interface/web/admin/form/remote_user.tform.php +++ b/interface/web/admin/form/remote_user.tform.php @@ -146,6 +146,7 @@ $form["tabs"]['remote_user'] = array ( 'separator' => ';', 'width' => '', 'maxlength' => '', + 'render_inline' => 'n', 'rows' => '5', 'cols' => '30' ) -- GitLab From 5ccd7f22da3caf105909ee8ce729e313be1a2b6b Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 13 Oct 2020 10:08:30 +0200 Subject: [PATCH 015/403] Backport !744 Dashboard enhancements / quota view enhancements using bootstrap progressbars --- interface/web/dashboard/dashboard.php | 12 +- interface/web/dashboard/dashlets/limits.php | 432 +++++++++--------- interface/web/dashboard/dashlets/quota.php | 1 + .../dashlets/templates/databasequota.htm | 52 +-- .../dashboard/dashlets/templates/limits.htm | 50 +- .../dashlets/templates/mailquota.htm | 56 +-- .../dashboard/dashlets/templates/quota.htm | 54 ++- .../dashboard/lib/lang/en_dashlet_limits.lng | 1 + .../dashboard/lib/lang/nl_dashlet_limits.lng | 1 + .../web/mail/list/user_quota_stats.list.php | 2 +- .../mail/templates/user_quota_stats_list.htm | 129 ++++-- .../web/sites/aps_meta_packages/empty.dir | 1 - interface/web/sites/database_quota_stats.php | 1 + .../lib/lang/en_user_quota_stats_list.lng | 1 + .../lib/lang/en_web_sites_stats_list.lng | 3 +- .../lib/lang/nl_user_quota_stats_list.lng | 1 + .../lib/lang/nl_web_sites_stats_list.lng | 2 + .../web/sites/list/user_quota_stats.list.php | 2 +- .../web/sites/list/web_sites_stats.list.php | 2 +- .../templates/database_quota_stats_list.htm | 7 +- .../sites/templates/user_quota_stats_list.htm | 13 +- interface/web/sites/user_quota_stats.php | 13 + interface/web/sites/web_sites_stats.php | 5 + .../default/assets/stylesheets/ispconfig.css | 20 +- 24 files changed, 482 insertions(+), 379 deletions(-) delete mode 100644 interface/web/sites/aps_meta_packages/empty.dir diff --git a/interface/web/dashboard/dashboard.php b/interface/web/dashboard/dashboard.php index 005c364aa5..d8adccd15e 100644 --- a/interface/web/dashboard/dashboard.php +++ b/interface/web/dashboard/dashboard.php @@ -160,10 +160,14 @@ $dashlet_list = array(); $handle = @opendir(ISPC_WEB_PATH.'/dashboard/dashlets'); while ($file = @readdir($handle)) { if ($file != '.' && $file != '..' && !is_dir(ISPC_WEB_PATH.'/dashboard/dashlets/'.$file)) { - $dashlet_name = substr($file, 0, -4); - $dashlet_class = 'dashlet_'.$dashlet_name; - include_once ISPC_WEB_PATH.'/dashboard/dashlets/'.$file; - $dashlet_list[$dashlet_name] = new $dashlet_class; + $splitfilename = explode('.', $file); + $file_extension = pathinfo($file)['extension']; + if ($file_extension === 'php') { // only allow .php files + $dashlet_name = substr($file, 0, -4); + $dashlet_class = 'dashlet_'.$dashlet_name; + include_once ISPC_WEB_PATH.'/dashboard/dashlets/'.$file; + $dashlet_list[$dashlet_name] = new $dashlet_class; + } } } diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php index 62cd2db358..a299bbcaf3 100644 --- a/interface/web/dashboard/dashlets/limits.php +++ b/interface/web/dashboard/dashlets/limits.php @@ -1,217 +1,221 @@ 'limit_mailquota', - 'db_table' => 'mail_user', - 'db_where' => 'quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ - 'q_type' => 'quota'); - - $limits[] = array('field' => 'limit_maildomain', - 'db_table' => 'mail_domain', - 'db_where' => ''); - - $limits[] = array('field' => 'limit_mailmailinglist', - 'db_table' => 'mail_mailinglist', - 'db_where' => ''); - - $limits[] = array('field' => 'limit_mailbox', - 'db_table' => 'mail_user', - 'db_where' => ''); - - $limits[] = array('field' => 'limit_mailalias', - 'db_table' => 'mail_forwarding', - 'db_where' => "type = 'alias'"); - - $limits[] = array('field' => 'limit_mailaliasdomain', - 'db_table' => 'mail_forwarding', - 'db_where' => "type = 'aliasdomain'"); - - $limits[] = array('field' => 'limit_mailforward', - 'db_table' => 'mail_forwarding', - 'db_where' => "type = 'forward'"); - - $limits[] = array('field' => 'limit_mailcatchall', - 'db_table' => 'mail_forwarding', - 'db_where' => "type = 'catchall'"); - - $limits[] = array('field' => 'limit_mailrouting', - 'db_table' => 'mail_transport', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_mailfilter', - 'db_table' => 'mail_user_filter', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_fetchmail', - 'db_table' => 'mail_get', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_spamfilter_wblist', - 'db_table' => 'spamfilter_wblist', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_spamfilter_user', - 'db_table' => 'spamfilter_users', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_spamfilter_policy', - 'db_table' => 'spamfilter_policy', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_web_quota', - 'db_table' => 'web_domain', - 'db_where' => 'hd_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ - 'q_type' => 'hd_quota'); - - $limits[] = array('field' => 'limit_web_domain', - 'db_table' => 'web_domain', - 'db_where' => "type = 'vhost'"); - - $limits[] = array('field' => 'limit_web_subdomain', - 'db_table' => 'web_domain', - 'db_where' => "(type = 'subdomain' OR type = 'vhostsubdomain')"); - - $limits[] = array('field' => 'limit_web_aliasdomain', - 'db_table' => 'web_domain', - 'db_where' => "(type = 'alias' OR type = 'vhostalias')"); - - $limits[] = array('field' => 'limit_ftp_user', - 'db_table' => 'ftp_user', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_shell_user', - 'db_table' => 'shell_user', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_dns_zone', - 'db_table' => 'dns_soa', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_dns_slave_zone', - 'db_table' => 'dns_slave', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_dns_record', - 'db_table' => 'dns_rr', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_database_quota', - 'db_table' => 'web_database', - 'db_where' => 'database_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ - 'q_type' => 'database_quota'); - - $limits[] = array('field' => 'limit_database', - 'db_table' => 'web_database', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_cron', - 'db_table' => 'cron', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_client', - 'db_table' => 'client', - 'db_where' => ""); - - $limits[] = array('field' => 'limit_domain', - 'db_table' => 'domain', - 'db_where' => ""); - - - //* Loading Template - $app->uses('tpl,tform'); - - $tpl = new tpl; - $tpl->newTemplate("dashlets/templates/limits.htm"); - - $wb = array(); - $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng'; - if(is_file($lng_file)) include $lng_file; - $tpl->setVar($wb); - - if($app->auth->is_admin()) { - $user_is_admin = true; - } else { - $user_is_admin = false; - } - $tpl->setVar('is_admin', $user_is_admin); - - if($user_is_admin == false) { - $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); - $client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); - } - - $rows = array(); - foreach($limits as $limit) { - $field = $limit['field']; - if($user_is_admin) { - $value = $wb['unlimited_txt']; - } else { - $value = $client[$field]; - } - if($value != 0 || $value == $wb['unlimited_txt']) { - $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value; - if($limit['q_type']!=''){ - $usage = $this->_get_assigned_quota($limit) . " MB"; - $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value . " MB"; - } - else $usage = $this->_get_limit_usage($limit); - $percentage = ($value == '-1' || $value == 0 ? 0 : round(100 * $usage / $value)); - $rows[] = array('field' => $field, - 'field_txt' => $wb[$field.'_txt'], - 'value' => $value_formatted, - 'value_raw' => $value, - 'usage' => $usage, - 'usage_raw' => $usage, - 'percentage' => $percentage); - } - } - $rows = $app->functions->htmlentities($rows); - $tpl->setLoop('rows', $rows); - - - return $tpl->grab(); - - } - - function _get_limit_usage($limit) { - global $app; - - $sql = "SELECT count(sys_userid) as number FROM ?? WHERE "; - if($limit['db_where'] != '') $sql .= $limit['db_where']." AND "; - $sql .= $app->tform->getAuthSQL('r'); - $rec = $app->db->queryOneRecord($sql, $limit['db_table']); - return $rec['number']; - - } - - function _get_assigned_quota($limit) { - global $app; - - $sql = "SELECT sum(??) as number FROM ?? WHERE "; - if($limit['db_where'] != '') $sql .= $limit['db_where']." AND "; - $sql .= $app->tform->getAuthSQL('r'); - $rec = $app->db->queryOneRecord($sql, $limit['q_type'], $limit['db_table']); - if($limit['db_table']=='mail_user') $quotaMB = $rec['number'] / 1048576; // Mail quota is in bytes, must be converted to MB - else $quotaMB = $rec['number']; - return $quotaMB; - - } - +class dashlet_limits +{ + public function show() + { + global $app, $conf; + + $limits = array(); + + /* Limits to be shown*/ + + $limits[] = array('field' => 'limit_mailquota', + 'db_table' => 'mail_user', + 'db_where' => 'quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'quota'); + + $limits[] = array('field' => 'limit_maildomain', + 'db_table' => 'mail_domain', + 'db_where' => ''); + + $limits[] = array('field' => 'limit_mailmailinglist', + 'db_table' => 'mail_mailinglist', + 'db_where' => ''); + + $limits[] = array('field' => 'limit_mailbox', + 'db_table' => 'mail_user', + 'db_where' => ''); + + $limits[] = array('field' => 'limit_mailalias', + 'db_table' => 'mail_forwarding', + 'db_where' => "type = 'alias'"); + + $limits[] = array('field' => 'limit_mailaliasdomain', + 'db_table' => 'mail_forwarding', + 'db_where' => "type = 'aliasdomain'"); + + $limits[] = array('field' => 'limit_mailforward', + 'db_table' => 'mail_forwarding', + 'db_where' => "type = 'forward'"); + + $limits[] = array('field' => 'limit_mailcatchall', + 'db_table' => 'mail_forwarding', + 'db_where' => "type = 'catchall'"); + + $limits[] = array('field' => 'limit_mailrouting', + 'db_table' => 'mail_transport', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_mailfilter', + 'db_table' => 'mail_user_filter', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_fetchmail', + 'db_table' => 'mail_get', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_spamfilter_wblist', + 'db_table' => 'spamfilter_wblist', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_spamfilter_user', + 'db_table' => 'spamfilter_users', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_spamfilter_policy', + 'db_table' => 'spamfilter_policy', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_web_quota', + 'db_table' => 'web_domain', + 'db_where' => 'hd_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'hd_quota'); + + $limits[] = array('field' => 'limit_web_domain', + 'db_table' => 'web_domain', + 'db_where' => "type = 'vhost'"); + + $limits[] = array('field' => 'limit_web_subdomain', + 'db_table' => 'web_domain', + 'db_where' => "(type = 'subdomain' OR type = 'vhostsubdomain')"); + + $limits[] = array('field' => 'limit_web_aliasdomain', + 'db_table' => 'web_domain', + 'db_where' => "(type = 'alias' OR type = 'vhostalias')"); + + $limits[] = array('field' => 'limit_ftp_user', + 'db_table' => 'ftp_user', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_shell_user', + 'db_table' => 'shell_user', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_dns_zone', + 'db_table' => 'dns_soa', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_dns_slave_zone', + 'db_table' => 'dns_slave', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_dns_record', + 'db_table' => 'dns_rr', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_database_quota', + 'db_table' => 'web_database', + 'db_where' => 'database_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'database_quota'); + + $limits[] = array('field' => 'limit_database', + 'db_table' => 'web_database', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_cron', + 'db_table' => 'cron', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_client', + 'db_table' => 'client', + 'db_where' => ""); + + $limits[] = array('field' => 'limit_domain', + 'db_table' => 'domain', + 'db_where' => ""); + + + //* Loading Template + $app->uses('tpl,tform'); + + $tpl = new tpl; + $tpl->newTemplate("dashlets/templates/limits.htm"); + + $wb = array(); + $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dashlet_limits.lng'; + if (is_file($lng_file)) { + include $lng_file; + } + $tpl->setVar($wb); + + if ($app->auth->is_admin()) { + $user_is_admin = true; + } else { + $user_is_admin = false; + } + $tpl->setVar('is_admin', $user_is_admin); + + if ($user_is_admin == false) { + $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); + $client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + } + + $rows = array(); + foreach ($limits as $limit) { + $field = $limit['field']; + if ($user_is_admin) { + $value = $wb['unlimited_txt']; + } else { + $value = $client[$field]; + } + if ($value != 0 || $value == $wb['unlimited_txt']) { + $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value; + if ($limit['q_type']!='') { + $usage = $this->_get_assigned_quota($limit) . " MB"; + $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value . " MB"; + } else { + $usage = $this->_get_limit_usage($limit); + } + $percentage = ($value == '-1' || $value == 0 ? -1 : round(100 * $usage / $value)); + $progressbar = $percentage > 100 ? 100 : $percentage; + $rows[] = array('field' => $field, + 'field_txt' => $wb[$field.'_txt'], + 'value' => $value_formatted, + 'value_raw' => $value, + 'usage' => $usage, + 'usage_raw' => $usage, + 'percentage' => $percentage, + 'progressbar' => $progressbar + ); + } + } + $rows = $app->functions->htmlentities($rows); + $tpl->setLoop('rows', $rows); + + + return $tpl->grab(); + } + + public function _get_limit_usage($limit) + { + global $app; + + $sql = "SELECT count(sys_userid) as number FROM ?? WHERE "; + if ($limit['db_where'] != '') { + $sql .= $limit['db_where']." AND "; + } + $sql .= $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord($sql, $limit['db_table']); + return $rec['number']; + } + + public function _get_assigned_quota($limit) + { + global $app; + + $sql = "SELECT sum(??) as number FROM ?? WHERE "; + if ($limit['db_where'] != '') { + $sql .= $limit['db_where']." AND "; + } + $sql .= $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord($sql, $limit['q_type'], $limit['db_table']); + if ($limit['db_table']=='mail_user') { + $quotaMB = $rec['number'] / 1048576; + } // Mail quota is in bytes, must be converted to MB + else { + $quotaMB = $rec['number']; + } + return $quotaMB; + } } - - - - - - - - -?> diff --git a/interface/web/dashboard/dashlets/quota.php b/interface/web/dashboard/dashlets/quota.php index f1c46051d1..d0b1be998f 100644 --- a/interface/web/dashboard/dashlets/quota.php +++ b/interface/web/dashboard/dashlets/quota.php @@ -31,6 +31,7 @@ class dashlet_quota { if(is_array($sites) && !empty($sites)){ foreach($sites as &$site) { $site['domain'] = $app->functions->idn_decode($site['domain']); + $site['progressbar'] = $site['hd_quota']; } unset($site); diff --git a/interface/web/dashboard/dashlets/templates/databasequota.htm b/interface/web/dashboard/dashlets/templates/databasequota.htm index 46db3cc6b8..7cfd10b095 100644 --- a/interface/web/dashboard/dashlets/templates/databasequota.htm +++ b/interface/web/dashboard/dashlets/templates/databasequota.htm @@ -1,28 +1,28 @@ -
- - - +
+
{tmpl_var name='databasequota_txt'}
+ + + + + + + + + + - - - + + + + {tmpl_if name="database_quota" op="!=" value="unlimited"}{/tmpl_if} - - - - - - - - - - - -
{tmpl_var name='databasequota_txt'}
{tmpl_var name='database_txt'}{tmpl_var name='used_txt'}{tmpl_var name='quota_txt'}
{tmpl_var name='database_txt'}{tmpl_var name='used_txt'}{tmpl_var name='quota_txt'}{tmpl_var name='database_name'}{tmpl_var name='used'}{tmpl_var name='database_quota'} +
+
{tmpl_var name="used_percentage"}% + {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'} +
+
+
{tmpl_var name='database_name'}{tmpl_var name='used'}{tmpl_var name='database_quota'} -
-
- {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'} -
-
-
-
\ No newline at end of file + + + +
diff --git a/interface/web/dashboard/dashlets/templates/limits.htm b/interface/web/dashboard/dashlets/templates/limits.htm index cc98f78e8c..d4144ee562 100644 --- a/interface/web/dashboard/dashlets/templates/limits.htm +++ b/interface/web/dashboard/dashlets/templates/limits.htm @@ -1,26 +1,34 @@ -
- +
+
- - - - - - - - - - + + + - + + + + + + + {tmpl_if name="progressbar" op="!=" value="-1"} + + {/tmpl_if} + + -
{tmpl_var name='limits_txt'}
  
{tmpl_var name='field_txt'}{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'} -
-
-
   
{tmpl_var name='field_txt'}{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'} +
+
+ {tmpl_var name="percentage"}% + {tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var + name='value'} +
+
+
-
+ +
\ No newline at end of file diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm index 3573ef1ab9..91349d2af4 100644 --- a/interface/web/dashboard/dashlets/templates/mailquota.htm +++ b/interface/web/dashboard/dashlets/templates/mailquota.htm @@ -1,30 +1,30 @@ -
- - - +
+
{tmpl_var name='mailquota_txt'}
+ + + + + + + + + + + - - - - + + + + + {tmpl_if name="quota" op="!=" value="unlimited"}{tmpl_else}{/tmpl_if} - - - - - - - - - - - - -
{tmpl_var name='mailquota_txt'}
{tmpl_var name='email_txt'}{tmpl_var name='name_txt'}{tmpl_var name='used_txt'}{tmpl_var name='quota_txt'}
{tmpl_var name='email_txt'}{tmpl_var name='name_txt'}{tmpl_var name='used_txt'}{tmpl_var name='quota_txt'}{tmpl_var name='email'}{tmpl_var name='name'}{tmpl_var name='used'}{tmpl_var name='quota'} +
+
{tmpl_var name="used_percentage"}% + {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'} +
+
+
{tmpl_var name='email'}{tmpl_var name='name'}{tmpl_var name='used'}{tmpl_var name='quota'} -
-
- {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'} -
-
-
-
\ No newline at end of file + + + +
\ No newline at end of file diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm index 4152ee074d..48435149b4 100644 --- a/interface/web/dashboard/dashlets/templates/quota.htm +++ b/interface/web/dashboard/dashlets/templates/quota.htm @@ -1,30 +1,34 @@ -
- +
+
- - - - - - - - - - - - - - + + + + - + + + + + + + + + {tmpl_if name="progressbar" op="!=" value="-1"}{tmpl_else}{/tmpl_if} + + -
{tmpl_var name='quota_txt'}
{tmpl_var name='domain_txt'}{tmpl_var name='used_txt'}{tmpl_var name='soft_txt'}{tmpl_var name='hard_txt'}
{tmpl_var name='domain'}{tmpl_var name='used'}{tmpl_var name='soft'}{tmpl_var name='hard'} -
-
- {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'} -
-
-
{tmpl_var name='domain_txt'}{tmpl_var name='used_txt'}{tmpl_var name='soft_txt'}{tmpl_var name='hard_txt'}
{tmpl_var name='domain'}{tmpl_var name='used'}{tmpl_var name='soft'}{tmpl_var name='hard'} +
+
{tmpl_var name="used_percentage"}% + {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var + name='soft'} +
+
+
-
+ +
\ No newline at end of file diff --git a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng index 337228a497..2e3bb8c086 100644 --- a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng +++ b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng @@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Number of Domains'; $wb['limit_mailquota_txt'] = 'Assigned mailbox quota'; $wb['limit_web_quota_txt'] = 'Assigned web quota'; $wb['limit_database_quota_txt'] = 'Assigned database quota'; +$wb['unlimited_txt'] = 'Unlimited'; ?> diff --git a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng index 35a2b9e0be..10bb89a3ea 100644 --- a/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng +++ b/interface/web/dashboard/lib/lang/nl_dashlet_limits.lng @@ -30,4 +30,5 @@ $wb['limit_domain_txt'] = 'Aantal domeinen'; $wb['limit_mailquota_txt'] = 'Assigned mailbox quota'; $wb['limit_web_quota_txt'] = 'Assigned web quota'; $wb['limit_database_quota_txt'] = 'Assigned database quota'; +$wb['unlimited_txt'] = 'Ongelimiteerd'; ?> diff --git a/interface/web/mail/list/user_quota_stats.list.php b/interface/web/mail/list/user_quota_stats.list.php index 1ba9fc6702..b6a380ede2 100644 --- a/interface/web/mail/list/user_quota_stats.list.php +++ b/interface/web/mail/list/user_quota_stats.list.php @@ -41,7 +41,7 @@ $liste["paging_tpl"] = "templates/paging.tpl.htm"; $liste["auth"] = "yes"; // mark columns for php sorting (no real mySQL columns) -$liste["phpsort"] = array('used', 'percentage'); +$liste["phpsort"] = array('used_sort', 'soft_sort', 'hard_sort', 'files', 'percentage_sort'); /***************************************************** * Suchfelder diff --git a/interface/web/mail/templates/user_quota_stats_list.htm b/interface/web/mail/templates/user_quota_stats_list.htm index 99690d6a33..58a374eabd 100644 --- a/interface/web/mail/templates/user_quota_stats_list.htm +++ b/interface/web/mail/templates/user_quota_stats_list.htm @@ -1,54 +1,87 @@ -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{tmpl_var name='search_limit'}
    - -
{tmpl_var name="email"}{tmpl_var name="name"}{tmpl_var name="used"}{tmpl_var name="quota"}{tmpl_var name="percentage"}
{tmpl_var name='globalsearch_noresults_text_txt'}
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + {tmpl_var name='search_limit'}
+     + +
{tmpl_var + name="email"}{tmpl_var + name="name"}{tmpl_var + name="used"}{tmpl_var + name="quota"} + {tmpl_if name="progressbar" op="!=" value="-1"}
+
+ {tmpl_var name="percentage"}
+
{/tmpl_if} +
{tmpl_var name='globalsearch_noresults_text_txt'}
+ +
-
+ \ No newline at end of file diff --git a/interface/web/sites/aps_meta_packages/empty.dir b/interface/web/sites/aps_meta_packages/empty.dir deleted file mode 100644 index 95ba9ef37c..0000000000 --- a/interface/web/sites/aps_meta_packages/empty.dir +++ /dev/null @@ -1 +0,0 @@ -This empty directory is needed by ISPConfig. diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php index 03431a6ded..df17928e36 100644 --- a/interface/web/sites/database_quota_stats.php +++ b/interface/web/sites/database_quota_stats.php @@ -74,6 +74,7 @@ class list_action extends listform_actions { if($rec['quota'] <= 0){ $rec['quota'] = $app->lng('unlimited_txt'); $rec['percentage'] = ''; + $rec['progressbar'] = -1; } else { if ($rec['used'] > 0 ) $rec['percentage'] = round(100 * intval($rec['used']) / ( intval($rec['quota'])*1024*1024) ).'%'; $rec['quota'] .= ' MB'; diff --git a/interface/web/sites/lib/lang/en_user_quota_stats_list.lng b/interface/web/sites/lib/lang/en_user_quota_stats_list.lng index f30409f600..bb0fd47b7d 100644 --- a/interface/web/sites/lib/lang/en_user_quota_stats_list.lng +++ b/interface/web/sites/lib/lang/en_user_quota_stats_list.lng @@ -6,4 +6,5 @@ $wb['used_txt'] = 'Used space'; $wb['hard_txt'] = 'Hard limit'; $wb['soft_txt'] = 'Soft limit'; $wb['files_txt'] = 'Single files'; +$wb['percentage_txt'] = 'Used %'; ?> \ No newline at end of file diff --git a/interface/web/sites/lib/lang/en_web_sites_stats_list.lng b/interface/web/sites/lib/lang/en_web_sites_stats_list.lng index 04eaf1f752..4c66bc29ea 100644 --- a/interface/web/sites/lib/lang/en_web_sites_stats_list.lng +++ b/interface/web/sites/lib/lang/en_web_sites_stats_list.lng @@ -6,4 +6,5 @@ $wb['last_month_txt'] = 'Last month'; $wb['this_year_txt'] = 'This year'; $wb['last_year_txt'] = 'Last year'; $wb['sum_txt'] = 'Sum'; -?> \ No newline at end of file +$wb['percentage_txt'] = 'In use %'; +$wb['quota_txt'] = 'Quota'; 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 64a5a0753e..03045ce872 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 @@ -6,4 +6,5 @@ $wb['used_txt'] = 'Gebruikte ruimte'; $wb['hard_txt'] = 'Harde limiet'; $wb['soft_txt'] = 'Zachte limiet'; $wb['files_txt'] = 'Aantal bestanden'; +$wb['percentage_txt'] = 'Percentage'; ?> 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 c25d743da6..fa5568418c 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 @@ -6,4 +6,6 @@ $wb['last_month_txt'] = 'Vorige maand'; $wb['this_year_txt'] = 'Dit jaar'; $wb['last_year_txt'] = 'Vorig jaar'; $wb['sum_txt'] = 'Som'; +$wb['percentage_txt'] = 'In gebruik %'; +$wb['quota_txt'] = 'Quota'; ?> diff --git a/interface/web/sites/list/user_quota_stats.list.php b/interface/web/sites/list/user_quota_stats.list.php index 52f54cf953..8d7f356fac 100644 --- a/interface/web/sites/list/user_quota_stats.list.php +++ b/interface/web/sites/list/user_quota_stats.list.php @@ -43,7 +43,7 @@ $liste["paging_tpl"] = "templates/paging.tpl.htm"; $liste["auth"] = "yes"; // mark columns for php sorting (no real mySQL columns) -$liste["phpsort"] = array('used', 'soft', 'hard', 'files'); +$liste["phpsort"] = array('system_user_sort', 'used', 'soft', 'hard', 'files', 'percentage'); /***************************************************** diff --git a/interface/web/sites/list/web_sites_stats.list.php b/interface/web/sites/list/web_sites_stats.list.php index af7ce9effb..37cb4e59a3 100644 --- a/interface/web/sites/list/web_sites_stats.list.php +++ b/interface/web/sites/list/web_sites_stats.list.php @@ -43,7 +43,7 @@ $liste["paging_tpl"] = "templates/paging.tpl.htm"; $liste["auth"] = "yes"; // mark columns for php sorting (no real mySQL columns) -$liste["phpsort"] = array('this_month', 'last_month', 'this_year', 'last_year'); +$liste["phpsort"] = array('this_month', 'last_month', 'this_year', 'last_year', 'percentage', 'quota_sort'); /***************************************************** * Suchfelder diff --git a/interface/web/sites/templates/database_quota_stats_list.htm b/interface/web/sites/templates/database_quota_stats_list.htm index 81a76762be..9982e6e601 100644 --- a/interface/web/sites/templates/database_quota_stats_list.htm +++ b/interface/web/sites/templates/database_quota_stats_list.htm @@ -36,8 +36,11 @@ {tmpl_var name="client"} {tmpl_var name="used"} {tmpl_var name="quota"} - {tmpl_var name="percentage"} - + {tmpl_if name="progressbar" op="!=" value="-1"}
+
{tmpl_var name="percentage"}
+
{/tmpl_if} + + diff --git a/interface/web/sites/templates/user_quota_stats_list.htm b/interface/web/sites/templates/user_quota_stats_list.htm index 704edafd87..f5a6c0fd77 100644 --- a/interface/web/sites/templates/user_quota_stats_list.htm +++ b/interface/web/sites/templates/user_quota_stats_list.htm @@ -8,12 +8,13 @@ - - + + + @@ -23,6 +24,7 @@ + @@ -31,13 +33,16 @@ - + - + + diff --git a/interface/web/sites/user_quota_stats.php b/interface/web/sites/user_quota_stats.php index 8c641eede9..d54732e62e 100644 --- a/interface/web/sites/user_quota_stats.php +++ b/interface/web/sites/user_quota_stats.php @@ -56,7 +56,20 @@ class list_action extends listform_actions { $rec['used'] = $rec['used'][1]; } } + /** + * progres bar variables + * soft value consists of null / array and raw value bug ? + */ + $soft = is_array($rec['soft']) || $rec['soft'] === null ? 0 : $rec['soft']; + $rec['percentage'] = $soft != 0 ? round(($rec['used']/$soft)*100) : '-1'; + $rec['progressbar'] = $rec['percentage'] > 100 ? 100 : $rec['percentage']; $rec['used_sort'] = $rec['used']; + /** + * Get digits from system_user for numeric sort + */ + preg_match('/(?P\d+)/',$rec['system_user'],$system_user_digits); + $rec['system_user_sort'] = $system_user_digits['digits']; + if (!is_numeric($rec['soft'])) $rec['soft']=$rec['soft'][1]; if (!is_numeric($rec['hard'])) $rec['hard']=$rec['hard'][1]; if (!is_numeric($rec['files'])) $rec['files']=$rec['files'][1]; diff --git a/interface/web/sites/web_sites_stats.php b/interface/web/sites/web_sites_stats.php index 488bf0363d..cabdf08bec 100644 --- a/interface/web/sites/web_sites_stats.php +++ b/interface/web/sites/web_sites_stats.php @@ -64,6 +64,11 @@ class list_action extends listform_actions { $rec['last_year'] = $app->functions->formatBytes($tmp_rec['t']); $this->sum_last_year += $tmp_rec['t']; + $rec['percentage'] = $rec['traffic_quota'] == '-1' ? -1 : round((($rec['this_month_sort']/($rec['traffic_quota']*1024*1024))*100)); + $rec['progressbar'] = $rec['percentage'] > 100 ? 100 : $rec['percentage']; + $rec['quota_sort'] = $rec['traffic_quota']; + $rec['quota'] = $rec['traffic_quota'] == '-1' ? 'unlimited' : $app->functions->formatBytes($rec['traffic_quota']*1024*1024); + //* The variable "id" contains always the index variable $rec['id'] = $rec[$this->idx_key]; diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index 2c04ee849a..d3b3506642 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -280,8 +280,16 @@ body { .progress { display: inline-block; margin-bottom: 0; - width: 150px; - height: 10px; } + width: 100%; + height: 20px; + background-color: #ababab; + font-weight: bold; +} + +.progress-bar-danger, .progress-bar-warning, .progress-bar-success { + text-align: center; + color: white; +} p.fieldset-legend { display: none; } @@ -793,6 +801,14 @@ span.notification_text { font-family: inherit; color: white; } +span.company_name { + font-weight: bold; +} + +span.tmp_account_name { + font-size: 0.9em; +} + .finediff { font-family: monospace; } -- GitLab From 15bdfc52c4f27cc33e790028ed39de17c839ed4b Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Tue, 13 Oct 2020 10:13:15 +0200 Subject: [PATCH 016/403] inadvertently removed file, rollback --- interface/web/sites/aps_meta_packages/empty.dir | 1 + 1 file changed, 1 insertion(+) create mode 100644 interface/web/sites/aps_meta_packages/empty.dir diff --git a/interface/web/sites/aps_meta_packages/empty.dir b/interface/web/sites/aps_meta_packages/empty.dir new file mode 100644 index 0000000000..95ba9ef37c --- /dev/null +++ b/interface/web/sites/aps_meta_packages/empty.dir @@ -0,0 +1 @@ +This empty directory is needed by ISPConfig. -- GitLab From 6c47c69c55b2e5f5b6037ca9f4aebb3ce1fb147b Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Thu, 22 Oct 2020 14:44:27 +0200 Subject: [PATCH 017/403] show more lines for mail and lets encrypt log --- server/lib/classes/cron.d/100-monitor_letsencrypt_log.inc.php | 2 +- server/lib/classes/cron.d/100-monitor_mail_log.inc.php | 2 +- server/lib/classes/monitor_tools.inc.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/lib/classes/cron.d/100-monitor_letsencrypt_log.inc.php b/server/lib/classes/cron.d/100-monitor_letsencrypt_log.inc.php index 401dcd1e55..166628114c 100644 --- a/server/lib/classes/cron.d/100-monitor_letsencrypt_log.inc.php +++ b/server/lib/classes/cron.d/100-monitor_letsencrypt_log.inc.php @@ -65,7 +65,7 @@ class cronjob_monitor_letsencrypt_log extends cronjob { $type = 'log_letsencrypt'; /* Get the data of the log */ - $data = $this->_tools->_getLogData($type); + $data = $this->_tools->_getLogData($type, 500); /* * actually this info has no state. diff --git a/server/lib/classes/cron.d/100-monitor_mail_log.inc.php b/server/lib/classes/cron.d/100-monitor_mail_log.inc.php index 5c41105d3c..e7562f6bf1 100644 --- a/server/lib/classes/cron.d/100-monitor_mail_log.inc.php +++ b/server/lib/classes/cron.d/100-monitor_mail_log.inc.php @@ -67,7 +67,7 @@ class cronjob_monitor_mail_log extends cronjob { $type = 'log_mail'; /* Get the data of the log */ - $data = $this->_tools->_getLogData($type); + $data = $this->_tools->_getLogData($type, 500); /* * actually this info has no state. diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 31e36836d5..8f7f9652c7 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -488,7 +488,7 @@ class monitor_tools { return $res; } - public function _getLogData($log) { + public function _getLogData($log, $max_lines = 100) { global $conf; $dist = ''; @@ -645,7 +645,7 @@ class monitor_tools { } else { $log = ''; if (is_readable($logfile)) { - $fd = popen('tail -n 100 ' . escapeshellarg($logfile), 'r'); + $fd = popen('tail -n '.intval($max_lines).' ' . escapeshellarg($logfile), 'r'); if ($fd) { while (!feof($fd)) { $log .= fgets($fd, 4096); -- GitLab From b3e8b00928a92fdc41349328922a8cb3fa84c864 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Fri, 23 Oct 2020 06:40:23 +0200 Subject: [PATCH 018/403] re-add server/lib/classes/letsencrypt.inc.php --- server/lib/classes/letsencrypt.inc.php | 545 +++++++++++++++++++++++++ 1 file changed, 545 insertions(+) create mode 100644 server/lib/classes/letsencrypt.inc.php diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php new file mode 100644 index 0000000000..3923954e10 --- /dev/null +++ b/server/lib/classes/letsencrypt.inc.php @@ -0,0 +1,545 @@ +get_acme_script(); + + $cmd = ''; + // generate cli format + foreach($domains as $domain) { + $cmd .= (string) " -d " . $domain; + } + + if($cmd == '') { + return false; + } + + if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) { + $cert_arg = '--fullchain-file ' . escapeshellarg($cert_file); + } else { + $cert_arg = '--fullchain-file ' . escapeshellarg($bundle_file) . ' --cert-file ' . escapeshellarg($cert_file); + } + + $cmd = 'R=0 ; C=0 ; ' . $letsencrypt . ' --issue ' . $cmd . ' -w /usr/local/ispconfig/interface/acme --always-force-new-domain-key --keylength 4096; R=$? ; if [[ $R -eq 0 || $R -eq 2 ]] ; then ' . $letsencrypt . ' --install-cert ' . $cmd . ' --key-file ' . escapeshellarg($key_file) . ' ' . $cert_arg . ' --reloadcmd ' . escapeshellarg($this->get_reload_command()) . ' --log ' . escapeshellarg($conf['ispconfig_log_dir'].'/acme.log') . '; C=$? ; fi ; if [[ $C -eq 0 ]] ; then exit $R ; else exit $C ; fi'; + + return $cmd; + } + + public function get_certbot_script() { + $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot')); + $letsencrypt = reset($letsencrypt); + if(is_executable($letsencrypt)) { + return $letsencrypt; + } else { + return false; + } + } + + private function install_acme() { + $install_cmd = 'wget -O - https://get.acme.sh | sh'; + $ret = null; + $val = 0; + exec($install_cmd . ' 2>&1', $ret, $val); + + return ($val == 0 ? true : false); + } + + private function get_reload_command() { + global $app, $conf; + + $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); + + $daemon = ''; + switch ($web_config['server_type']) { + case 'nginx': + $daemon = $web_config['server_type']; + break; + default: + if(is_file($conf['init_scripts'] . '/' . 'httpd24-httpd') || is_dir('/opt/rh/httpd24/root/etc/httpd')) { + $daemon = 'httpd24-httpd'; + } elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) { + $daemon = 'httpd'; + } else { + $daemon = 'apache2'; + } + } + + $cmd = $app->system->getinitcommand($daemon, 'force-reload'); + return $cmd; + } + + public function get_certbot_command($domains) { + global $app; + + $letsencrypt = $this->get_certbot_script(); + + $cmd = ''; + // generate cli format + foreach($domains as $domain) { + $cmd .= (string) " --domains " . $domain; + } + + if($cmd == '') { + return false; + } + + $matches = array(); + $ret = null; + $val = 0; + + $letsencrypt_version = exec($letsencrypt . ' --version 2>&1', $ret, $val); + if(preg_match('/^(\S+|\w+)\s+(\d+(\.\d+)+)$/', $letsencrypt_version, $matches)) { + $letsencrypt_version = $matches[2]; + } + if (version_compare($letsencrypt_version, '0.22', '>=')) { + $acme_version = 'https://acme-v02.api.letsencrypt.org/directory'; + } else { + $acme_version = 'https://acme-v01.api.letsencrypt.org/directory'; + } + if (version_compare($letsencrypt_version, '0.30', '>=')) { + $app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG); + $this->certbot_use_certcommand = true; + $webroot_map = array(); + for($i = 0; $i < count($domains); $i++) { + $webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme'; + } + $webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map))); + } else { + $webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme"; + } + + $cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme"; + + return $cmd; + } + + public function get_letsencrypt_certificate_paths($domains = array()) { + global $app; + + if($this->get_acme_script()) { + return false; + } + + if(empty($domains)) return false; + if(!is_dir($this->renew_config_path)) return false; + + $dir = opendir($this->renew_config_path); + if(!$dir) return false; + + $path_scores = array(); + + $main_domain = reset($domains); + sort($domains); + $min_diff = false; + + while($file = readdir($dir)) { + if($file === '.' || $file === '..' || substr($file, -5) !== '.conf') continue; + $file_path = $this->renew_config_path . '/' . $file; + if(!is_file($file_path) || !is_readable($file_path)) continue; + + $fp = fopen($file_path, 'r'); + if(!$fp) continue; + + $path_scores[$file_path] = array( + 'domains' => array(), + 'diff' => 0, + 'has_main_domain' => false, + 'cert_paths' => array( + 'cert' => '', + 'privkey' => '', + 'chain' => '', + 'fullchain' => '' + ) + ); + $in_list = false; + while(!feof($fp) && $line = fgets($fp)) { + $line = trim($line); + if($line === '') continue; + elseif(!$in_list) { + if($line == '[[webroot_map]]') $in_list = true; + + $tmp = explode('=', $line, 2); + if(count($tmp) != 2) continue; + $key = trim($tmp[0]); + if($key == 'cert' || $key == 'privkey' || $key == 'chain' || $key == 'fullchain') { + $path_scores[$file_path]['cert_paths'][$key] = trim($tmp[1]); + } + + continue; + } + + $tmp = explode('=', $line, 2); + if(count($tmp) != 2) continue; + + $domain = trim($tmp[0]); + if($domain == $main_domain) $path_scores[$file_path]['has_main_domain'] = true; + $path_scores[$file_path]['domains'][] = $domain; + } + fclose($fp); + + sort($path_scores[$file_path]['domains']); + if(count(array_intersect($domains, $path_scores[$file_path]['domains'])) < 1) { + $path_scores[$file_path]['diff'] = false; + } else { + // give higher diff value to missing domains than to those that are too much in there + $path_scores[$file_path]['diff'] = (count(array_diff($domains, $path_scores[$file_path]['domains'])) * 1.5) + count(array_diff($path_scores[$file_path]['domains'], $domains)); + } + + if($min_diff === false || $path_scores[$file_path]['diff'] < $min_diff) $min_diff = $path_scores[$file_path]['diff']; + } + closedir($dir); + + if($min_diff === false) return false; + + $cert_paths = false; + $used_path = false; + foreach($path_scores as $path => $data) { + if($data['diff'] === $min_diff) { + $used_path = $path; + $cert_paths = $data['cert_paths']; + if($data['has_main_domain'] == true) break; + } + } + + $app->log("Let's Encrypt Cert config path is: " . ($used_path ? $used_path : "not found") . ".", LOGLEVEL_DEBUG); + + return $cert_paths; + } + + private function get_ssl_domain($data) { + global $app; + + $domain = $data['new']['ssl_domain']; + if(!$domain) { + $domain = $data['new']['domain']; + } + + if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') { + $domain = $data['new']['domain']; + if(substr($domain, 0, 2) === '*.') { + // wildcard domain not yet supported by letsencrypt! + $app->log('Wildcard domains not yet supported by letsencrypt, so changing ' . $domain . ' to ' . substr($domain, 2), LOGLEVEL_WARN); + $domain = substr($domain, 2); + } + } + + return $domain; + } + + public function get_website_certificate_paths($data) { + $ssl_dir = $data['new']['document_root'].'/ssl'; + $domain = $this->get_ssl_domain($data); + + $cert_paths = array( + 'domain' => $domain, + 'key' => $ssl_dir.'/'.$domain.'.key', + 'key2' => $ssl_dir.'/'.$domain.'.key.org', + 'csr' => $ssl_dir.'/'.$domain.'.csr', + 'crt' => $ssl_dir.'/'.$domain.'.crt', + 'bundle' => $ssl_dir.'/'.$domain.'.bundle' + ); + + if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') { + $cert_paths = array( + 'domain' => $domain, + 'key' => $ssl_dir.'/'.$domain.'-le.key', + 'key2' => $ssl_dir.'/'.$domain.'-le.key.org', + 'crt' => $ssl_dir.'/'.$domain.'-le.crt', + 'bundle' => $ssl_dir.'/'.$domain.'-le.bundle' + ); + } + + return $cert_paths; + } + + public function request_certificates($data, $server_type = 'apache') { + global $app, $conf; + + $app->uses('getconf'); + $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); + $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); + + $use_acme = false; + if($this->get_acme_script()) { + $use_acme = true; + } elseif(!$this->get_certbot_script()) { + // acme and le missing + $this->install_acme(); + } + + $tmp = $app->letsencrypt->get_website_certificate_paths($data); + $domain = $tmp['domain']; + $key_file = $tmp['key']; + $crt_file = $tmp['crt']; + $bundle_file = $tmp['bundle']; + + // default values + $temp_domains = array($domain); + $cli_domain_arg = ''; + $subdomains = null; + $aliasdomains = null; + + //* be sure to have good domain + if(substr($domain,0,4) != 'www.' && ($data['new']['subdomain'] == "www" || $data['new']['subdomain'] == "*")) { + $temp_domains[] = "www." . $domain; + } + + //* then, add subdomain if we have + $subdomains = $app->db->queryAllRecords('SELECT domain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'subdomain' AND ssl_letsencrypt_exclude != 'y'"); + if(is_array($subdomains)) { + foreach($subdomains as $subdomain) { + $temp_domains[] = $subdomain['domain']; + } + } + + //* then, add alias domain if we have + $aliasdomains = $app->db->queryAllRecords('SELECT domain,subdomain FROM web_domain WHERE parent_domain_id = '.intval($data['new']['domain_id'])." AND active = 'y' AND type = 'alias' AND ssl_letsencrypt_exclude != 'y'"); + if(is_array($aliasdomains)) { + foreach($aliasdomains as $aliasdomain) { + $temp_domains[] = $aliasdomain['domain']; + if(isset($aliasdomain['subdomain']) && substr($aliasdomain['domain'],0,4) != 'www.' && ($aliasdomain['subdomain'] == "www" OR $aliasdomain['subdomain'] == "*")) { + $temp_domains[] = "www." . $aliasdomain['domain']; + } + } + } + + // prevent duplicate + $temp_domains = array_unique($temp_domains); + + // check if domains are reachable to avoid letsencrypt verification errors + $le_rnd_file = uniqid('le-') . '.txt'; + $le_rnd_hash = md5(uniqid('le-', true)); + if(!is_dir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/')) { + $app->system->mkdir('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/', false, 0755, true); + } + file_put_contents('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/' . $le_rnd_file, $le_rnd_hash); + + $le_domains = array(); + foreach($temp_domains as $temp_domain) { + if((isset($web_config['skip_le_check']) && $web_config['skip_le_check'] == 'y') || (isset($server_config['migration_mode']) && $server_config['migration_mode'] == 'y')) { + $le_domains[] = $temp_domain; + } else { + $le_hash_check = trim(@file_get_contents('http://' . $temp_domain . '/.well-known/acme-challenge/' . $le_rnd_file)); + if($le_hash_check == $le_rnd_hash) { + $le_domains[] = $temp_domain; + $app->log("Verified domain " . $temp_domain . " should be reachable for letsencrypt.", LOGLEVEL_DEBUG); + } else { + $app->log("Could not verify domain " . $temp_domain . ", so excluding it from letsencrypt request.", LOGLEVEL_WARN); + } + } + } + $temp_domains = $le_domains; + unset($le_domains); + @unlink('/usr/local/ispconfig/interface/acme/.well-known/acme-challenge/' . $le_rnd_file); + + $le_domain_count = count($temp_domains); + if($le_domain_count > 100) { + $temp_domains = array_slice($temp_domains, 0, 100); + $app->log("There were " . $le_domain_count . " domains in the domain list. LE only supports 100, so we strip the rest.", LOGLEVEL_WARN); + } + + // unset useless data + unset($subdomains); + unset($aliasdomains); + + $this->certbot_use_certcommand = false; + $letsencrypt_cmd = ''; + $allow_return_codes = null; + if($use_acme) { + $letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type); + $allow_return_codes = array(2); + } else { + $letsencrypt_cmd = $this->get_certbot_command($temp_domains); + } + + $success = false; + if($letsencrypt_cmd) { + if(!isset($server_config['migration_mode']) || $server_config['migration_mode'] != 'y') { + $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); + $app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG); + + $success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes); + } else { + $app->log("Migration mode active, skipping Let's Encrypt SSL Cert creation for: $domain", LOGLEVEL_DEBUG); + $success = true; + } + } + + if($use_acme === true) { + if(!$success) { + $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN); + $app->log($letsencrypt_cmd, LOGLEVEL_WARN); + return false; + } else { + return true; + } + } + + $le_files = array(); + if($this->certbot_use_certcommand === true && $letsencrypt_cmd) { + $cli_domain_arg = ''; + // generate cli format + foreach($temp_domains as $temp_domain) { + $cli_domain_arg .= (string) " --domains " . $temp_domain; + } + + + $letsencrypt_cmd = $this->get_certbot_script() . " certificates " . $cli_domain_arg; + $output = explode("\n", shell_exec($letsencrypt_cmd . " 2>/dev/null | grep -v '^\$'")); + $le_path = ''; + $skip_to_next = true; + $matches = null; + foreach($output as $outline) { + $outline = trim($outline); + $app->log("LE CERT OUTPUT: " . $outline, LOGLEVEL_DEBUG); + + if($skip_to_next === true && !preg_match('/^\s*Certificate Name/', $outline)) { + continue; + } + $skip_to_next = false; + + if(preg_match('/^\s*Expiry.*?VALID:\s+\D/', $outline)) { + $app->log("Found LE path is expired or invalid: " . $matches[1], LOGLEVEL_DEBUG); + $skip_to_next = true; + continue; + } + + if(preg_match('/^\s*Certificate Path:\s*(\/.*?)\s*$/', $outline, $matches)) { + $app->log("Found LE path: " . $matches[1], LOGLEVEL_DEBUG); + $le_path = dirname($matches[1]); + if(is_dir($le_path)) { + break; + } else { + $le_path = false; + } + } + } + + if($le_path) { + $le_files = array( + 'privkey' => $le_path . '/privkey.pem', + 'chain' => $le_path . '/chain.pem', + 'cert' => $le_path . '/cert.pem', + 'fullchain' => $le_path . '/fullchain.pem' + ); + } + } + if(empty($le_files)) { + $le_files = $this->get_letsencrypt_certificate_paths($temp_domains); + } + unset($temp_domains); + + if($server_type != 'apache' || version_compare($app->system->getapacheversion(true), '2.4.8', '>=')) { + $crt_tmp_file = $le_files['fullchain']; + } else { + $crt_tmp_file = $le_files['cert']; + } + + $key_tmp_file = $le_files['privkey']; + $bundle_tmp_file = $le_files['chain']; + + if(!$success) { + // error issuing cert + $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN); + $app->log($letsencrypt_cmd, LOGLEVEL_WARN); + + // if cert already exists, dont remove it. Ex. expired/misstyped/noDnsYet alias domain, api down... + if(!file_exists($crt_tmp_file)) { + return false; + } + } + + //* check is been correctly created + if(file_exists($crt_tmp_file)) { + $app->log("Let's Encrypt Cert file: $crt_tmp_file exists.", LOGLEVEL_DEBUG); + $date = date("YmdHis"); + + //* TODO: check if is a symlink, if target same keep it, either remove it + if(is_file($key_file)) { + $app->system->copy($key_file, $key_file.'.old.'.$date); + $app->system->chmod($key_file.'.old.'.$date, 0400); + $app->system->unlink($key_file); + } + + if(@is_link($key_file)) $app->system->unlink($key_file); + if(@file_exists($key_tmp_file)) $app->system->exec_safe("ln -s ? ?", $key_tmp_file, $key_file); + + if(is_file($crt_file)) { + $app->system->copy($crt_file, $crt_file.'.old.'.$date); + $app->system->chmod($crt_file.'.old.'.$date, 0400); + $app->system->unlink($crt_file); + } + + if(@is_link($crt_file)) $app->system->unlink($crt_file); + if(@file_exists($crt_tmp_file))$app->system->exec_safe("ln -s ? ?", $crt_tmp_file, $crt_file); + + if(is_file($bundle_file)) { + $app->system->copy($bundle_file, $bundle_file.'.old.'.$date); + $app->system->chmod($bundle_file.'.old.'.$date, 0400); + $app->system->unlink($bundle_file); + } + + if(@is_link($bundle_file)) $app->system->unlink($bundle_file); + if(@file_exists($bundle_tmp_file)) $app->system->exec_safe("ln -s ? ?", $bundle_tmp_file, $bundle_file); + + return true; + } else { + $app->log("Let's Encrypt Cert file: $crt_tmp_file does not exist.", LOGLEVEL_DEBUG); + return false; + } + } +} -- GitLab From a1be781f5dcd11e23456fd9c3a35157c37ae6478 Mon Sep 17 00:00:00 2001 From: Daniel Jagszent Date: Tue, 27 Oct 2020 01:16:48 +0100 Subject: [PATCH 019/403] nginx vhost conf: disable authentication for error pages --- server/conf/nginx_vhost.conf.master | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 57dffe1369..51ca7dfb69 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -102,34 +102,42 @@ server { location = /error/400.html { internal; + auth_basic off; } location = /error/401.html { internal; + auth_basic off; } location = /error/403.html { internal; + auth_basic off; } location = /error/404.html { internal; + auth_basic off; } location = /error/405.html { internal; + auth_basic off; } location = /error/500.html { internal; + auth_basic off; } location = /error/502.html { internal; + auth_basic off; } location = /error/503.html { internal; + auth_basic off; } -- GitLab From 610af7e289abb19aa66554c65351e417b9d4248c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 27 Oct 2020 19:26:46 +0100 Subject: [PATCH 020/403] jailkit: include /usr/share/npm in [node] jail --- install/tpl/jk_init.ini.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 0f62aac9ef..b84aab95b6 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -173,7 +173,7 @@ includesections = php, uidbasics, netbasics [node] comment = NodeJS -paths = npm, node, nodejs, /usr/lib/nodejs, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, elmi-to-json, /usr/local/bin/elmi-to-json +paths = npm, node, nodejs, /usr/lib/nodejs, /usr/share/npm, /usr/share/node-mime, /usr/lib/node_modules, /usr/local/lib/nodejs, /usr/local/lib/node_modules, elmi-to-json, /usr/local/bin/elmi-to-json [env] comment = /usr/bin/env for environment variables -- GitLab From 7df25000a373399d7b6cc4d0d0830cc57a906b46 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 30 Oct 2020 20:47:50 +0100 Subject: [PATCH 021/403] Disable install_ispconfig_interface when no webserver is present --- install/update.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/install/update.php b/install/update.php index c15678486f..4043647d8e 100644 --- a/install/update.php +++ b/install/update.php @@ -361,9 +361,13 @@ if($conf['mysql']['master_slave_setup'] == 'y') { if($conf['apache']['installed'] == true){ if(!is_file($conf['apache']['vhost_conf_dir'].'/ispconfig.vhost')) $inst->install_ispconfig_interface = false; } -if($conf['nginx']['installed'] == true){ +elseif($conf['nginx']['installed'] == true){ if(!is_file($conf['nginx']['vhost_conf_dir'].'/ispconfig.vhost')) $inst->install_ispconfig_interface = false; } +else { + // If neither webserver is installed then this can't be the server that hosts the ispconfig interface. + $inst->install_ispconfig_interface = false; +} //** Shall the services be reconfigured during update $reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no', 'selected'), 'yes','reconfigure_services'); -- GitLab From fa5ed54a59accce2167ecebcef7d34dcd777de9c Mon Sep 17 00:00:00 2001 From: Jon Reese Date: Fri, 30 Oct 2020 22:34:00 +0100 Subject: [PATCH 022/403] test for crontab instead of cron ref: ispconfig/ispconfig3#5885 --- 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 e3821b5c14..bcef5577f4 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -192,7 +192,7 @@ class installer_base { // 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(is_installed('crontab')) $conf['cron']['installed'] = true; if (($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; } -- GitLab From cfd412ee1e1aa949205d8899533f94761eabb6c2 Mon Sep 17 00:00:00 2001 From: Jon Reese Date: Fri, 30 Oct 2020 22:38:34 +0100 Subject: [PATCH 023/403] detect crontab early with friendly fail ref: ispconfig/ispconfig3#5885 --- install/install.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/install/install.php b/install/install.php index 121e3a13cc..0df226ee10 100644 --- a/install/install.php +++ b/install/install.php @@ -172,6 +172,11 @@ if(is_dir('/usr/local/ispconfig')) { //** Detect the installed applications $inst->find_installed_apps(); +//* crontab required by ISPConfig +if(!$conf['cron']['installed']) { + die("crontab not found; please install a compatible cron daemon before ISPConfig\n\n"); +} + //** Select the language and set default timezone $conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language'); $conf['timezone'] = get_system_timezone(); @@ -607,10 +612,7 @@ $inst->configure_dbserver(); //* Configure ISPConfig swriteln('Installing ISPConfig crontab'); -if($conf['cron']['installed']) { - swriteln('Installing ISPConfig crontab'); - $inst->install_crontab(); -} else swriteln('[ERROR] Cron not found'); +$inst->install_crontab(); swriteln('Detect IP addresses'); $inst->detect_ips(); -- GitLab From 89a49bdd5f88adb2cd48443f8c6658abb7807060 Mon Sep 17 00:00:00 2001 From: Max Well <7444-MaxWell@users.noreply.git.ispconfig.org> Date: Sun, 1 Nov 2020 22:50:59 +0100 Subject: [PATCH 024/403] Improve jk_init.ini * Add arm64 support to uidbasics and netbasics * Add armhf and arm64 support to MySQL * Include all supported PHP versions in jail * Add /etc/localtime to PHP jail to fix a critical PHP error * Introduce ImageMagick support --- install/tpl/jk_init.ini.master | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 0f62aac9ef..5f3f6f899c 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -6,11 +6,11 @@ [uidbasics] comment = common files for all jails that need user/group information -paths = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2, /lib/i386-linux-gnu/libnsl.so.1, /lib/i386-linux-gnu/libnss*.so.2, /lib/x86_64-linux-gnu/libnsl.so.1, /lib/x86_64-linux-gnu/libnss*.so.2, /lib/arm-linux-gnueabihf/libnss*.so.2, /lib/arm-linux-gnueabihf/libnsl*.so.1, /etc/nsswitch.conf, /etc/ld.so.conf +paths = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2, /lib/i386-linux-gnu/libnsl.so.1, /lib/i386-linux-gnu/libnss*.so.2, /lib/x86_64-linux-gnu/libnsl.so.1, /lib/x86_64-linux-gnu/libnss*.so.2, /lib/arm-linux-gnueabihf/libnsl*.so.1, /lib/arm-linux-gnueabihf/libnss*.so.2, /lib/aarch64-linux-gnu/libnsl.so.1, /lib/aarch64-linux-gnu/libnss*.so.2, /etc/nsswitch.conf, /etc/ld.so.conf [netbasics] comment = common files for all jails that need any internet connectivity -paths = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/libnss_mdns*.so.2, /lib/i386-linux-gnu/libnss_dns.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs +paths = /lib/libnss_dns.so.2, /lib64/libnss_dns.so.2, /lib/libnss_mdns*.so.2, /lib/i386-linux-gnu/libnss_dns.so.2, /lib/x86_64-linux-gnu/libnss_dns.so.2, /lib/arm-linux-gnueabihf/libnss_dns.so.2, /lib/aarch64-linux-gnu/libnss_dns.so.2, /etc/resolv.conf, /etc/host.conf, /etc/hosts, /etc/protocols, /etc/services, /etc/ssl/certs/, /usr/lib/ssl/certs [logbasics] comment = timezone information and log sockets @@ -163,7 +163,7 @@ includesections = php, mysql-client [mysql-client] comment = mysql client -paths = mysql, mysqldump, mysqlshow, /usr/lib/libmysqlclient.so, /usr/lib/i386-linux-gnu/libmariadb.so.3, /usr/lib/i386-linux-gnu/mariadb19, /usr/lib/x86_64-linux-gnu/libmariadb.so.3, /usr/lib/x86_64-linux-gnu/mariadb19 +paths = mysql, mysqldump, mysqlshow, /usr/lib/libmysqlclient.so, /usr/lib/i386-linux-gnu/libmariadb.so.3, /usr/lib/i386-linux-gnu/mariadb19, /usr/lib/x86_64-linux-gnu/libmariadb.so.3, /usr/lib/x86_64-linux-gnu/mariadb19, /usr/lib/arm-linux-gnueabihf/libmariadb.so.3, /usr/lib/arm-linux-gnueabihf/mariadb19, /usr/lib/aarch64-linux-gnu/libmariadb.so.3, /usr/lib/aarch64-linux-gnu/mariadb19 includesections = netbasics [composer] @@ -185,7 +185,7 @@ paths = env [php] comment = default php version and libraries paths = /usr/bin/php -includesections = php_common, php7_3 +includesections = php_common, php5_6, php7_0, php7_1, php7_2, php7_3, php7_4 [php_common] comment = common php directories and libraries @@ -193,7 +193,7 @@ comment = common php directories and libraries # do not add all of /etc/php/ or any of the fpm directories # or the php config (which includes custom php snippets) from *all* # sites which use fpm will be copied to *every* jailkit -paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/ +paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/, /etc/localtime includesections = env [php5_6] @@ -225,3 +225,7 @@ includesections = php_common comment = php version 7.4 paths = /usr/bin/php7.4, /usr/lib/php/7.4/, /usr/lib/php/20190902/, /usr/share/php/7.4/, /etc/php/7.4/cli/, /etc/php/7.4/mods-available/ includesections = php_common + +[imagemagick] +comment = ImageMagick needed for php-imagemagick extension +paths = /usr/share/ImageMagick-*, /etc/ImageMagick-*, /usr/lib/i386-linux-gnu/ImageMagick-*, /usr/lib/x86_64-linux-gnu/ImageMagick-*, /usr/lib/arm-linux-gnueabihf/ImageMagick-*, /usr/lib/aarch64-linux-gnu/ImageMagick-* -- GitLab From 5dc80302b77bdfed8bed5a426f9c015a8dde2976 Mon Sep 17 00:00:00 2001 From: Michael Seevogel Date: Tue, 3 Nov 2020 13:06:59 +0100 Subject: [PATCH 025/403] use mod_brotli if available --- install/patches/upd_dev.php | 19 +++++++++++++++++++ server/conf/vhost.conf.master | 4 ++++ 2 files changed, 23 insertions(+) create mode 100644 install/patches/upd_dev.php diff --git a/install/patches/upd_dev.php b/install/patches/upd_dev.php new file mode 100644 index 0000000000..3e6dc6f864 --- /dev/null +++ b/install/patches/upd_dev.php @@ -0,0 +1,19 @@ + + diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 023b726291..f70198935a 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -53,6 +53,10 @@ Protocols h2 http/1.1 + + + AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon + -- GitLab From 90f2ba301c0698c9d185f828f894b7b7ee26b149 Mon Sep 17 00:00:00 2001 From: Michael Seevogel Date: Tue, 3 Nov 2020 13:08:57 +0100 Subject: [PATCH 026/403] clean up --- install/patches/upd_dev.php | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 install/patches/upd_dev.php diff --git a/install/patches/upd_dev.php b/install/patches/upd_dev.php deleted file mode 100644 index 3e6dc6f864..0000000000 --- a/install/patches/upd_dev.php +++ /dev/null @@ -1,19 +0,0 @@ - - -- GitLab From 977fccd816868779046bace9a0a0f4a7fe922472 Mon Sep 17 00:00:00 2001 From: Michael Seevogel Date: Fri, 6 Nov 2020 13:48:03 +0100 Subject: [PATCH 027/403] added atom to Brotli outputfilter list --- server/conf/vhost.conf.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index f70198935a..5b5e1f059e 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -55,7 +55,7 @@ - AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon + AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/xml application/xml+rss application/atom+xml application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon -- GitLab From b3d65d150e5429d77345b976a5497bab75f01c4a Mon Sep 17 00:00:00 2001 From: Max Well <7444-MaxWell@users.noreply.git.ispconfig.org> Date: Sun, 8 Nov 2020 23:11:38 +0100 Subject: [PATCH 028/403] Update jk_init.ini.master --- install/tpl/jk_init.ini.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 5f3f6f899c..9d42968151 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -185,7 +185,7 @@ paths = env [php] comment = default php version and libraries paths = /usr/bin/php -includesections = php_common, php5_6, php7_0, php7_1, php7_2, php7_3, php7_4 +includesections = php_common [php_common] comment = common php directories and libraries @@ -194,7 +194,7 @@ comment = common php directories and libraries # or the php config (which includes custom php snippets) from *all* # sites which use fpm will be copied to *every* jailkit paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/, /etc/localtime -includesections = env +includesections = env, logbasics, netbasics [php5_6] comment = php version 5.6 -- GitLab From 1f27c515366ca810104d58f9fc89c517f4de011e Mon Sep 17 00:00:00 2001 From: Max Well <7444-MaxWell@users.noreply.git.ispconfig.org> Date: Sun, 8 Nov 2020 23:12:46 +0100 Subject: [PATCH 029/403] Update jk_init.ini.master --- install/tpl/jk_init.ini.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 9d42968151..274c0388df 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -193,7 +193,7 @@ comment = common php directories and libraries # do not add all of /etc/php/ or any of the fpm directories # or the php config (which includes custom php snippets) from *all* # sites which use fpm will be copied to *every* jailkit -paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/, /etc/localtime +paths = /usr/bin/php, /usr/lib/php/, /usr/share/php/, /usr/share/zoneinfo/ includesections = env, logbasics, netbasics [php5_6] -- GitLab From cec0ac150049ddb29bc5273cd3849c223e32088d Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 9 Nov 2020 10:49:39 -0700 Subject: [PATCH 030/403] fix regex in server config jailkit fields --- interface/web/admin/form/server_config.tform.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index b25785c283..7d1e1526f5 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -1790,7 +1790,7 @@ $form["tabs"]['jailkit'] = array( 'validators' => array( 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'jailkit_chroot_home_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/', + 'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,}$/', 'errmsg'=> 'jailkit_chroot_home_error_regex'), ), 'value' => '', @@ -1804,7 +1804,7 @@ $form["tabs"]['jailkit'] = array( 'validators' => array( 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'jailkit_chroot_app_sections_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\-\_\ ]{1,128}$/', + 'regex' => '/^[a-zA-Z0-9\.\-\_\ ]{1,}$/', 'errmsg'=> 'jailkit_chroot_app_sections_error_regex'), ), 'value' => '', -- GitLab From 747265f6943d796845af9eefa1748f73f92f15f9 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 11 Nov 2020 14:01:52 -0700 Subject: [PATCH 031/403] admin_mail placeholder in mail user welcome email --- server/conf/mail/welcome_email_de.txt | 4 ++-- server/conf/mail/welcome_email_en.txt | 4 ++-- server/conf/mail/welcome_email_es.txt | 2 +- server/conf/mail/welcome_email_fr.txt | 2 +- server/conf/mail/welcome_email_hr.txt | 4 ++-- server/conf/mail/welcome_email_nl.txt | 2 +- server/plugins-available/mail_plugin.inc.php | 21 ++++++++++++++++++-- 7 files changed, 28 insertions(+), 11 deletions(-) diff --git a/server/conf/mail/welcome_email_de.txt b/server/conf/mail/welcome_email_de.txt index 2327209ace..d28e9ac243 100644 --- a/server/conf/mail/welcome_email_de.txt +++ b/server/conf/mail/welcome_email_de.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Ihr Mailaccount ist aktiv. -Ihr Mailaccount ist jetzt aktiv. Viel Vergnügen. \ No newline at end of file +Ihr Mailaccount ist jetzt aktiv. Viel Vergnügen. diff --git a/server/conf/mail/welcome_email_en.txt b/server/conf/mail/welcome_email_en.txt index 9689485606..485227c0f3 100644 --- a/server/conf/mail/welcome_email_en.txt +++ b/server/conf/mail/welcome_email_en.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Welcome to your new email account. -Welcome to your new email account. Your webmaster. \ No newline at end of file +Welcome to your new email account. Your webmaster. diff --git a/server/conf/mail/welcome_email_es.txt b/server/conf/mail/welcome_email_es.txt index ede0ea5120..9ead0568f3 100644 --- a/server/conf/mail/welcome_email_es.txt +++ b/server/conf/mail/welcome_email_es.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Bienvenido a su nueva cuenta de correo Bienvenido a su nueva cuenta de correo. Su administrador. diff --git a/server/conf/mail/welcome_email_fr.txt b/server/conf/mail/welcome_email_fr.txt index beb2b30080..d175006869 100644 --- a/server/conf/mail/welcome_email_fr.txt +++ b/server/conf/mail/welcome_email_fr.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Bienvenue dans votre nouvelle boîte aux lettres Votre nouveau compte email est désormais activé. Votre webmaster. diff --git a/server/conf/mail/welcome_email_hr.txt b/server/conf/mail/welcome_email_hr.txt index 3c45f5ac0b..f288c480f0 100644 --- a/server/conf/mail/welcome_email_hr.txt +++ b/server/conf/mail/welcome_email_hr.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Dobrodošli u vaš novi email račun. -Dobrodošli u vaš novi email račun. Vaš webmajstor. \ No newline at end of file +Dobrodošli u vaš novi email račun. Vaš webmajstor. diff --git a/server/conf/mail/welcome_email_nl.txt b/server/conf/mail/welcome_email_nl.txt index cd4baf4815..2fce985968 100644 --- a/server/conf/mail/welcome_email_nl.txt +++ b/server/conf/mail/welcome_email_nl.txt @@ -1,4 +1,4 @@ -From: ISPConfig +From: {admin_name} <{admin_mail}> Subject: Welkom in uw nieuwe account. Welkom in uw nieuwe email account. Uw webmaster. diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index 4d5ac826d3..fb00166021 100644 --- a/server/plugins-available/mail_plugin.inc.php +++ b/server/plugins-available/mail_plugin.inc.php @@ -82,6 +82,7 @@ class mail_plugin { //* get the config $app->uses('getconf,system'); $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); + $global_mail_config = $app->getconf->get_global_config('mail'); // convert to lower case - it could cause problems if some directory above has upper case name // $data['new']['maildir'] = strtolower($data['new']['maildir']); @@ -218,20 +219,30 @@ class mail_plugin { $lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt'); } + $placeholders = array( + '{domain}' => "$domain", + '{email}' => $data["new"]["email"], + '{admin_mail}' => ($global_mail_config['admin_mail'] != '' ? $global_mail_config['admin_mail'] : 'root'), + '{admin_name}' => ($global_mail_config['admin_name'] != '' ? $global_mail_config['admin_name'] : ''), + ); + //* Get from address $parts = explode(':', trim($lines[0])); unset($parts[0]); $welcome_mail_from = implode(':', $parts); unset($lines[0]); + $welcome_mail_from = strtr($welcome_mail_from, $placeholders); //* Get subject $parts = explode(':', trim($lines[1])); unset($parts[0]); $welcome_mail_subject = implode(':', $parts); unset($lines[1]); + $welcome_mail_subject = strtr($welcome_mail_subject, $placeholders); //* Get message $welcome_mail_message = trim(implode($lines)); + $welcome_mail_message = strtr($welcome_mail_message, $placeholders); unset($tmp); $mailHeaders = "MIME-Version: 1.0" . "\n"; @@ -247,8 +258,14 @@ class mail_plugin { $mailTarget = $data["new"]["email"]; $mailSubject = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?="; - //* Send the welcome email only on the "master" mail server to avoid duplicate emails - if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders); + $additionalParameters = ''; + if (preg_match('/\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63})\b/i', $welcome_mail_from, $matches)) { + $additionalParameters = '-f '.$matches[1]; + } + + // Send the welcome email only on a "master" mail server to avoid duplicate emails + // (bypass the normal ispcmail class when creating mail accounts) + if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders, $additionalParameters); } -- GitLab From d376b4e5cef449a8342481ca79fe9ba373bac71c Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Sat, 14 Nov 2020 07:41:48 +0100 Subject: [PATCH 032/403] AA records wrong with issuewild and TYPE257 (Bind < 9.9.6) (Fixes #5916) --- server/plugins-available/bind_plugin.inc.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index b152a8758d..a32a1931cd 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -286,6 +286,7 @@ class bind_plugin { $records = $app->db->queryAllRecords("SELECT * FROM dns_rr WHERE zone = ? AND active = 'Y'", $zone['id']); if(is_array($records) && !empty($records)){ + $caa_add_rec = -1; for($i=0;$i 0) { + // remove previously added issue ";" + array_pop($records); + } + $caa_add_rec = -2; + } $length = strlen($hex[1])/2; $data_new = "\# $length $hex[1]"; $records[$i]['data'] = $data_new; -- GitLab From 29c8d7e90ec2d49c77efb298a9d8e2964bb34d1c Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 17 Nov 2020 12:26:27 +0100 Subject: [PATCH 033/403] - fixed potential shell user vulnerability --- interface/lib/classes/functions.inc.php | 78 +++++++++++++------ interface/lib/classes/tform_base.inc.php | 5 +- interface/web/sites/form/shell_user.tform.php | 6 ++ server/lib/classes/functions.inc.php | 32 +++++++- server/lib/classes/system.inc.php | 30 +++++++ .../shelluser_base_plugin.inc.php | 16 ++++ 6 files changed, 139 insertions(+), 28 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 03e331f0f1..4d4c011fb5 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -61,7 +61,7 @@ class functions { if(is_string($to) && strpos($to, ',') !== false) { $to = preg_split('/\s*,\s*/', $to); } - + $app->ispcmail->send($to); $app->ispcmail->finish(); @@ -234,7 +234,7 @@ class functions { if(preg_match($regex, $result['ip'])) $ips[] = $result['ip']; } } - + $results = $app->db->queryAllRecords("SELECT remote_ips FROM web_database WHERE remote_ips != ''"); if(!empty($results) && is_array($results)){ foreach($results as $result){ @@ -290,6 +290,34 @@ class functions { return round(pow(1024, $base-floor($base)), $precision).$suffixes[floor($base)]; } + + /** + * Normalize a path and strip duplicate slashes from it + * + * This will also remove all /../ from the path, reducing the preceding path elements + * + * @param string $path + * @return string + */ + public function normalize_path($path) { + $path = preg_replace('~[/]{2,}~', '/', $path); + $parts = explode('/', $path); + $return_parts = array(); + + foreach($parts as $current_part) { + if($current_part === '..') { + if(!empty($return_parts) && end($return_parts) !== '') { + array_pop($return_parts); + } + } else { + $return_parts[] = $current_part; + } + } + + return implode('/', $return_parts); + } + + /** IDN converter wrapper. * all converter classes should be placed in ISPC_CLASS_PATH.'/idn/' */ @@ -370,42 +398,42 @@ class functions { public function is_allowed_user($username, $restrict_names = false) { global $app; - + $name_blacklist = array('root','ispconfig','vmail','getmail'); if(in_array($username,$name_blacklist)) return false; - + if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false; - + if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false; - + return true; } - + public function is_allowed_group($groupname, $restrict_names = false) { global $app; - + $name_blacklist = array('root','ispconfig','vmail','getmail'); if(in_array($groupname,$name_blacklist)) return false; - + if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false; - + if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false; - + return true; } - + public function getimagesizefromstring($string){ if (!function_exists('getimagesizefromstring')) { $uri = 'data://application/octet-stream;base64,' . base64_encode($string); return getimagesize($uri); } else { return getimagesizefromstring($string); - } + } } - + public function password($minLength = 10, $special = false){ global $app; - + $iteration = 0; $password = ""; $maxLength = $minLength + 5; @@ -430,7 +458,7 @@ class functions { public function getRandomInt($min, $max){ return floor((mt_rand() / mt_getrandmax()) * ($max - $min + 1)) + $min; } - + public function generate_customer_no(){ global $app; // generate customer no. @@ -438,13 +466,13 @@ class functions { while($app->db->queryOneRecord("SELECT client_id FROM client WHERE customer_no = ?", $customer_no)) { $customer_no = mt_rand(100000, 999999); } - + return $customer_no; } - + public function generate_ssh_key($client_id, $username = ''){ global $app; - + // generate the SSH key pair for the client $id_rsa_file = '/tmp/'.uniqid('',true); $id_rsa_pub_file = $id_rsa_file.'.pub'; @@ -458,7 +486,7 @@ class functions { $app->log("Failed to create SSH keypair for ".$username, LOGLEVEL_WARN); } } - + public function htmlentities($value) { global $conf; @@ -474,10 +502,10 @@ class functions { } else { $out = htmlentities($value, ENT_QUOTES, $conf["html_content_encoding"]); } - + return $out; } - + // Function to check paths before we use it as include. Use with absolute paths only. public function check_include_path($path) { if(strpos($path,'//') !== false) die('Include path seems to be an URL: '.$this->htmlentities($path)); @@ -488,7 +516,7 @@ class functions { if(substr($path,0,strlen(ISPC_ROOT_PATH)) != ISPC_ROOT_PATH) die('Path '.$this->htmlentities($path).' is outside of ISPConfig installation directory.'); return $path; } - + // Function to check language strings public function check_language($language) { global $app; @@ -496,10 +524,10 @@ class functions { return $language; } else { $app->log('Wrong language string: '.$this->htmlentities($language),1); - return 'en'; + return 'en'; } } - + } ?> diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 91a855872c..72ddb4b6ae 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -399,7 +399,7 @@ class tform_base { $tmp_key = $limit_parts[2]; $allowed = $allowed = explode(',',$tmp_conf[$tmp_key]); } - + if($formtype == 'CHECKBOX') { if(strstr($limit,'force_')) { // Force the checkbox field to be ticked and enabled @@ -958,6 +958,9 @@ class tform_base { case 'STRIPNL': $returnval = str_replace(array("\n","\r"),'', $returnval); break; + case 'NORMALIZEPATH': + $returnval = $app->functions->normalize_path($returnval); + break; default: $this->errorMessage .= "Unknown Filter: ".$filter['type']; break; diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php index f4e83a1b57..523a03687a 100644 --- a/interface/web/sites/form/shell_user.tform.php +++ b/interface/web/sites/form/shell_user.tform.php @@ -232,6 +232,12 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') { 'dir' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', + 'filters' => array( + 0 => array ( + 'event' => 'SAVE', + 'type' => 'NORMALIZEPATH' + ) + ), 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'directory_error_empty'), 1 => array ( 'type' => 'REGEX', diff --git a/server/lib/classes/functions.inc.php b/server/lib/classes/functions.inc.php index 5da1f3d713..5296c3012b 100644 --- a/server/lib/classes/functions.inc.php +++ b/server/lib/classes/functions.inc.php @@ -356,6 +356,34 @@ class functions { } } + + /** + * Normalize a path and strip duplicate slashes from it + * + * This will also remove all /../ from the path, reducing the preceding path elements + * + * @param string $path + * @return string + */ + public function normalize_path($path) { + $path = preg_replace('~[/]{2,}~', '/', $path); + $parts = explode('/', $path); + $return_parts = array(); + + foreach($parts as $current_part) { + if($current_part === '..') { + if(!empty($return_parts) && end($return_parts) !== '') { + array_pop($return_parts); + } + } else { + $return_parts[] = $current_part; + } + } + + return implode('/', $return_parts); + } + + /** IDN converter wrapper. * all converter classes should be placed in ISPC_CLASS_PATH.'/idn/' */ @@ -435,10 +463,10 @@ class functions { } return implode("\n", $domains); } - + public function generate_ssh_key($client_id, $username = ''){ global $app; - + // generate the SSH key pair for the client $id_rsa_file = '/tmp/'.uniqid('',true); $id_rsa_pub_file = $id_rsa_file.'.pub'; diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 131d10f244..8a8a2f4fb0 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -2300,6 +2300,36 @@ class system{ return true; } + public function is_allowed_path($path) { + global $app; + + $path = $app->functions->normalize_path($path); + if(file_exists($path)) { + $path = realpath($path); + } + + $blacklisted_paths_regex = array( + '@^/$@', + '@^/proc(/.*)?$@', + '@^/sys(/.*)?$@', + '@^/etc(/.*)$@', + '@^/dev(/.*)$@', + '@^/tmp(/.*)$@', + '@^/run(/.*)$@', + '@^/boot(/.*)$@', + '@^/root(/.*)$@', + '@^/var(/?|/backups?(/.*)?)?$@', + ); + + foreach($blacklisted_paths_regex as $regex) { + if(preg_match($regex, $path)) { + return false; + } + } + + return true; + } + public function last_exec_out() { return $this->_last_exec_out; } diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index 71653cf5c2..39ab2298ad 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -96,6 +96,14 @@ class shelluser_base_plugin { return false; } + if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOVLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOVLEVEL_WARN); + return false; + } + if($data['new']['active'] != 'y' || $data['new']['chroot'] == "jailkit") $data['new']['shell'] = '/bin/false'; if($app->system->is_user($data['new']['puser'])) { @@ -207,6 +215,14 @@ class shelluser_base_plugin { return false; } + if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOVLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOVLEVEL_WARN); + return false; + } + if($data['new']['active'] != 'y') $data['new']['shell'] = '/bin/false'; if($app->system->is_user($data['new']['puser'])) { -- GitLab From f45e5fae5ac5672b7d51ea6bb6c096093458928b Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 17 Nov 2020 13:51:52 +0100 Subject: [PATCH 034/403] - fixed problems from implementation of vulnerability fix --- server/lib/classes/system.inc.php | 18 ++++++++---- .../shelluser_base_plugin.inc.php | 16 ++++++++--- .../shelluser_jailkit_plugin.inc.php | 28 +++++++++++++++++++ 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 8a8a2f4fb0..a26707b0ae 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -2312,12 +2312,12 @@ class system{ '@^/$@', '@^/proc(/.*)?$@', '@^/sys(/.*)?$@', - '@^/etc(/.*)$@', - '@^/dev(/.*)$@', - '@^/tmp(/.*)$@', - '@^/run(/.*)$@', - '@^/boot(/.*)$@', - '@^/root(/.*)$@', + '@^/etc(/.*)?$@', + '@^/dev(/.*)?$@', + '@^/tmp(/.*)?$@', + '@^/run(/.*)?$@', + '@^/boot(/.*)?$@', + '@^/root(/.*)?$@', '@^/var(/?|/backups?(/.*)?)?$@', ); @@ -2380,6 +2380,8 @@ class system{ } public function create_jailkit_user($username, $home_dir, $user_home_dir, $shell = '/bin/bash', $p_user = null, $p_user_home_dir = null) { + global $app; + // Disallow operating on root directory if(realpath($home_dir) == '/') { $app->log("create_jailkit_user: invalid home_dir: $home_dir", LOGLEVEL_WARN); @@ -2409,6 +2411,8 @@ class system{ } public function create_jailkit_chroot($home_dir, $app_sections = array(), $options = array()) { + global $app; + // Disallow operating on root directory if(realpath($home_dir) == '/') { $app->log("create_jailkit_chroot: invalid home_dir: $home_dir", LOGLEVEL_WARN); @@ -2480,6 +2484,8 @@ class system{ } public function create_jailkit_programs($home_dir, $programs = array(), $options = array()) { + global $app; + // Disallow operating on root directory if(realpath($home_dir) == '/') { $app->log("create_jailkit_programs: invalid home_dir: $home_dir", LOGLEVEL_WARN); diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index 39ab2298ad..f9a316d90e 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -97,10 +97,10 @@ class shelluser_base_plugin { } if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { - $app->log('Shell user dir must not be existing file or symlink.', LOVLEVEL_WARN); + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); return false; } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { - $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOVLEVEL_WARN); + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOGLEVEL_WARN); return false; } @@ -216,10 +216,10 @@ class shelluser_base_plugin { } if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { - $app->log('Shell user dir must not be existing file or symlink.', LOVLEVEL_WARN); + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); return false; } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { - $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOVLEVEL_WARN); + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOGLEVEL_WARN); return false; } @@ -320,6 +320,14 @@ class shelluser_base_plugin { return false; } + if(is_file($data['old']['dir']) || is_link($data['old']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['old']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['old']['dir'], LOGLEVEL_WARN); + return false; + } + if($app->system->is_user($data['old']['username'])) { // Get the UID of the user $userid = intval($app->system->getuid($data['old']['username'])); diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php index 3f8d94d2a7..dbc3d8041b 100755 --- a/server/plugins-available/shelluser_jailkit_plugin.inc.php +++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php @@ -89,6 +89,15 @@ class shelluser_jailkit_plugin { return false; } + if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOGLEVEL_WARN); + return false; + } + + if($app->system->is_user($data['new']['puser'])) { // Get the UID of the parent user $uid = intval($app->system->getuid($data['new']['puser'])); @@ -170,6 +179,14 @@ class shelluser_jailkit_plugin { return false; } + if(is_file($data['new']['dir']) || is_link($data['new']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['new']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['new']['dir'], LOGLEVEL_WARN); + return false; + } + if($app->system->is_user($data['new']['puser'])) { $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['new']['parent_domain_id']); @@ -241,6 +258,14 @@ class shelluser_jailkit_plugin { return false; } + if(is_file($data['old']['dir']) || is_link($data['old']['dir'])) { + $app->log('Shell user dir must not be existing file or symlink.', LOGLEVEL_WARN); + return false; + } elseif(!$app->system->is_allowed_path($data['old']['dir'])) { + $app->log('Shell user dir is not an allowed path: ' . $data['old']['dir'], LOGLEVEL_WARN); + return false; + } + if ($data['old']['chroot'] == "jailkit") { $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $data['old']['parent_domain_id']); @@ -518,6 +543,9 @@ class shelluser_jailkit_plugin { } //* Get the keys $existing_keys = file($sshkeys, FILE_IGNORE_NEW_LINES); + if(!$existing_keys) { + $existing_keys = array(); + } $new_keys = explode("\n", $sshrsa); $old_keys = explode("\n", $this->data['old']['ssh_rsa']); -- GitLab From fd1704a76c5851452ee9b8531f053df706e1ef0a Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 23 Nov 2020 17:25:06 -0700 Subject: [PATCH 035/403] jailkit: update jail if /bin/bash does not function --- .../classes/cron.d/600-jailkit_maintenance.inc.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php index 771bf0e71b..547b7caa1a 100644 --- a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php +++ b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php @@ -69,7 +69,7 @@ class cronjob_jailkit_maintenance extends cronjob { // limit the number of jails we update at one time according to time of day $num_jails_to_update = (date('H') < 6) ? 25 : 3; - $sql = "SELECT domain_id, domain, document_root, php_fpm_chroot, jailkit_chroot_app_sections, jailkit_chroot_app_programs, delete_unused_jailkit, last_jailkit_hash FROM web_domain WHERE type = 'vhost' AND (last_jailkit_update IS NULL OR last_jailkit_update < (NOW() - INTERVAL 24 HOUR)) AND server_id = ? ORDER by last_jailkit_update LIMIT ?"; + $sql = "SELECT domain_id, domain, document_root, system_user, system_group, php_fpm_chroot, jailkit_chroot_app_sections, jailkit_chroot_app_programs, delete_unused_jailkit, last_jailkit_hash FROM web_domain WHERE type = 'vhost' AND (last_jailkit_update IS NULL OR last_jailkit_update < (NOW() - INTERVAL 24 HOUR)) AND server_id = ? ORDER by last_jailkit_update LIMIT ?"; $records = $app->db->queryAllRecords($sql, $conf['server_id'], $num_jails_to_update); foreach($records as $rec) { @@ -111,6 +111,17 @@ class cronjob_jailkit_maintenance extends cronjob { sort($last_updated, SORT_STRING); $update_hash = hash('md5', implode(' ', $last_updated)); + if (is_file( $rec['document_root']."/bin/bash" )) { + # test that /bin/bash functions in the jail +print "chroot --userspec ".$rec['system_user'].":".$rec['system_group']." ".$rec['document_root']." /bin/bash -c true 2>/dev/null\n"; + if (! $app->system->exec_safe("chroot --userspec ?:? ? /bin/bash -c true 2>/dev/null", $rec['system_user'], $rec['system_group'], $rec['document_root'])) { +print "/bin/bash test failed, forcing update\n"; + $options[] = 'force'; + # bogus hash will not match, triggering an update + $update_hash = 'force_update'.time(); + } + } + if ($update_hash != $rec['last_jailkit_hash']) { $app->system->web_folder_protection($rec['document_root'], false); $app->system->update_jailkit_chroot($rec['document_root'], $sections, $programs, $options); -- GitLab From acfb1ace2b5ab9cd0e614e01651380d66bc68837 Mon Sep 17 00:00:00 2001 From: Daniel Jagszent Date: Tue, 24 Nov 2020 16:41:18 +0100 Subject: [PATCH 036/403] nginx vhost: exclude let's encrypt from rewrites --- server/conf/nginx_vhost.conf.master | 12 ++++++------ server/plugins-available/nginx_plugin.inc.php | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 57dffe1369..7011bfc3ea 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -46,29 +46,29 @@ server { if ($scheme != "https") { - rewrite ^ https://$http_host$request_uri? permanent; + rewrite ^(?!/\.well-known/acme-challenge)/ https://$http_host$request_uri? permanent; } if ($http_host "") { - rewrite ^ $scheme://$request_uri? permanent; + rewrite ^(?!/\.well-known/acme-challenge)/ $scheme://$request_uri? permanent; } if ($http_host "") { - rewrite ^ $scheme://$request_uri? permanent; + rewrite ^(?!/\.well-known/acme-challenge)/ $scheme://$request_uri? permanent; } if ($http_host "") { - rewrite ^(.*)$ $2 ; + rewrite ^(.*)$ $1 ; } - if ($http_host != "") { rewrite ^(.*)$ $2 ; } + if ($http_host != "") { rewrite ^(.*)$ $1 ; } location / { @@ -364,7 +364,7 @@ server { if ($http_host "") { - rewrite ^ $scheme://$request_uri? permanent; + rewrite ^(?!/\.well-known/acme-challenge)/ $scheme://$request_uri? permanent; } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 59cc56bf08..1fd2e536da 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1484,7 +1484,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(.?)/'; + $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; @@ -1536,7 +1536,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(.?)/'; + $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; @@ -1586,7 +1586,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(.?)/'; + $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; -- GitLab From 971427f312beae9e102b444c89b760f22f96518c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 24 Nov 2020 15:52:11 -0700 Subject: [PATCH 037/403] account for alternate login names in active domain checks --- install/tpl/debian6_dovecot-sql.conf.master | 2 +- install/tpl/debian_dovecot-sql.conf.master | 2 +- install/tpl/fedora_dovecot-sql.conf.master | 2 +- install/tpl/mysql-virtual_forwardings.cf.master | 2 +- install/tpl/mysql-virtual_sender_login_maps.cf.master | 3 +++ install/tpl/opensuse_dovecot-sql.conf.master | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master index 72f286eace..32a25c995d 100644 --- a/install/tpl/debian6_dovecot-sql.conf.master +++ b/install/tpl/debian6_dovecot-sql.conf.master @@ -14,7 +14,7 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_se default_pass_scheme = CRYPT # password-query with prefetch -password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'y' AND server_id = {server_id}) +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND NOT EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'n' AND server_id = {server_id}) user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master index 4cbe22f1b9..f067d6ba10 100644 --- a/install/tpl/debian_dovecot-sql.conf.master +++ b/install/tpl/debian_dovecot-sql.conf.master @@ -121,7 +121,7 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_se default_pass_scheme = CRYPT # password-query with prefetch -password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'y' AND server_id = {server_id}) +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND NOT EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'n' AND server_id = {server_id}) user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master index 00ef4faf25..bac4c9d13d 100644 --- a/install/tpl/fedora_dovecot-sql.conf.master +++ b/install/tpl/fedora_dovecot-sql.conf.master @@ -134,7 +134,7 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_se default_pass_scheme = CRYPT # password-query with prefetch -password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'y' AND server_id = {server_id}) +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND NOT EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'n' AND server_id = {server_id}) user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master index 468691b16d..8607735c93 100644 --- a/install/tpl/mysql-virtual_forwardings.cf.master +++ b/install/tpl/mysql-virtual_forwardings.cf.master @@ -7,5 +7,5 @@ query = SELECT s.destination AS target FROM mail_forwarding AS s UNION SELECT s.destination AS target FROM mail_forwarding AS s WHERE s.source = '@%d' AND s.type = 'catchall' AND s.active = 'y' AND s.server_id = {server_id} - AND NOT EXISTS (SELECT email FROM mail_user WHERE (email = '%s' OR email = {address_without_extension}) AND server_id = {server_id}) + AND NOT EXISTS (SELECT email FROM mail_user WHERE (email = '%s' OR email = {address_without_extension}) AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id}) AND server_id = {server_id}) AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE (source = '%s' OR source = {address_without_extension}) AND active = 'y' AND server_id = {server_id}) diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master index 165bee1231..d2a70015f5 100644 --- a/install/tpl/mysql-virtual_sender_login_maps.cf.master +++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master @@ -6,3 +6,6 @@ query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id} AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id}) + UNION + SELECT login FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id} + AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX(email, '@', -1) AND active = 'y' AND server_id = {server_id}) diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master index 00ef4faf25..bac4c9d13d 100644 --- a/install/tpl/opensuse_dovecot-sql.conf.master +++ b/install/tpl/opensuse_dovecot-sql.conf.master @@ -134,7 +134,7 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_se default_pass_scheme = CRYPT # password-query with prefetch -password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'y' AND server_id = {server_id}) +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' AND NOT EXISTS (SELECT domain_id FROM mail_domain WHERE domain = '%d' AND active = 'n' AND server_id = {server_id}) user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' -- GitLab From 2bc1d845cc2032c6349cd4b4153baee4fea7fd20 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 27 Nov 2020 10:17:02 +0100 Subject: [PATCH 038/403] Preserve indentation from mailq output using
.

---
 interface/lib/classes/tools_monitor.inc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/interface/lib/classes/tools_monitor.inc.php b/interface/lib/classes/tools_monitor.inc.php
index d57b9b7a3f..9104017468 100644
--- a/interface/lib/classes/tools_monitor.inc.php
+++ b/interface/lib/classes/tools_monitor.inc.php
@@ -568,7 +568,7 @@ class tools_monitor {
 
 		if(isset($record['data'])) {
 			$data = unserialize($record['data']);
-			$html = nl2br($data['output']);
+                       $html = '
' . htmlspecialchars($data['output']) . '
'; } else { $html = '

'.$app->lng("no_data_mailq_txt").'

'; } -- GitLab From 39ecfdac7c6fcd0b5b7ac5b1fe8acd38640cb644 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Fri, 27 Nov 2020 12:57:28 +0100 Subject: [PATCH 039/403] Fixes backup path #5936 --- server/plugins-available/backup_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php index ffbc5a6b79..a92165ba6d 100644 --- a/server/plugins-available/backup_plugin.inc.php +++ b/server/plugins-available/backup_plugin.inc.php @@ -73,7 +73,7 @@ class backup_plugin { $app->uses('ini_parser,file,getconf,system'); $app->load("backup"); - $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $backup['parent_domain_id']); + $web = $app->dbmaster->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ?", $backup['parent_domain_id']); $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); $backup_dir = trim($server_config['backup_dir']); if($backup_dir == '') return; -- GitLab From 99690800bd3ded0549f7868ea7b223989f853c59 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 27 Nov 2020 11:36:57 -0700 Subject: [PATCH 040/403] header names should be lowercase for comparison --- server/lib/classes/monitor_tools.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index dbe702d0dd..95f68db2bf 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -845,11 +845,11 @@ class monitor_tools { $mailSubject = trim($parts[1]); continue; } - if(strtolower($parts[0]) == 'From') { + if(strtolower($parts[0]) == 'from') { $mailFrom = trim($parts[1]); continue; } - if(strtolower($parts[0]) == 'Cc') { + if(strtolower($parts[0]) == 'cc') { if (! in_array(trim($parts[1]), $recipients)) { $recipients[] = trim($parts[1]); } -- GitLab From 583392eff9d2e0293f16f3eccf7dd91b6f4e1b0e Mon Sep 17 00:00:00 2001 From: Sroka Date: Fri, 27 Nov 2020 22:39:10 +0100 Subject: [PATCH 041/403] Base support for Fedora 33 --- .gitignore | 1 + install/dist/conf/fedora33.conf.php | 229 ++++++++++++++++++ install/dist/lib/fedora33.lib.php | 40 +++ install/lib/install.lib.php | 6 + server/lib/classes/monitor_tools.inc.php | 5 + .../remoteaction_core_module.inc.php | 2 + 6 files changed, 283 insertions(+) create mode 100644 install/dist/conf/fedora33.conf.php create mode 100644 install/dist/lib/fedora33.lib.php diff --git a/.gitignore b/.gitignore index 32f43c2430..81d5108cae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +.idea /nbproject/private/ .phplint-cache *.swp diff --git a/install/dist/conf/fedora33.conf.php b/install/dist/conf/fedora33.conf.php new file mode 100644 index 0000000000..54013ed6de --- /dev/null +++ b/install/dist/conf/fedora33.conf.php @@ -0,0 +1,229 @@ + diff --git a/install/dist/lib/fedora33.lib.php b/install/dist/lib/fedora33.lib.php new file mode 100644 index 0000000000..3dcd7494d3 --- /dev/null +++ b/install/dist/lib/fedora33.lib.php @@ -0,0 +1,40 @@ + diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index 2ed873d9ba..b59c8ede6b 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -308,6 +308,12 @@ function get_distname() { $distid = 'fedora9'; $distbaseid = 'fedora'; swriteln("Operating System: Fedora 11 or compatible\n"); + } elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) { + $distname = 'Fedora'; + $distver = '33'; + $distid = 'fedora33'; + $distbaseid = 'fedora'; + swriteln("Operating System: Fedora 33 or compatible\n"); } elseif(stristr($content, 'CentOS release 5.2 (Final)')) { $distname = 'CentOS'; $distver = '5.2'; diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index dbe702d0dd..ed5a2fe040 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -290,6 +290,11 @@ class monitor_tools { $distver = '11'; $distid = 'fedora9'; $distbaseid = 'fedora'; + } elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) { + $distname = 'Fedora'; + $distver = '33'; + $distid = 'fedora33'; + $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS release 5.2 (Final)')) { $distname = 'CentOS'; $distver = '5.2'; diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index ef6e07e95e..bdaba5cb06 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -179,6 +179,8 @@ class remoteaction_core_module { //TODO : change this when distribution information has been integrated into server record if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); + }elseif(file_exists('/etc/redhat-release')) { + exec("dnf -y update"); } else { exec("apt-get update"); -- GitLab From 804a0a33501c62cca7330b31b30c8b7144fcd9a6 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sat, 28 Nov 2020 21:49:15 +0100 Subject: [PATCH 042/403] Base support for Fedora 32 --- install/dist/conf/fedora32.conf.php | 229 +++++++++++++++++++++++ install/dist/conf/fedora33.conf.php | 2 +- install/dist/lib/fedora32.lib.php | 40 ++++ install/lib/install.lib.php | 8 +- server/lib/classes/monitor_tools.inc.php | 5 + 5 files changed, 282 insertions(+), 2 deletions(-) create mode 100644 install/dist/conf/fedora32.conf.php create mode 100644 install/dist/lib/fedora32.lib.php diff --git a/install/dist/conf/fedora32.conf.php b/install/dist/conf/fedora32.conf.php new file mode 100644 index 0000000000..76c45e5352 --- /dev/null +++ b/install/dist/conf/fedora32.conf.php @@ -0,0 +1,229 @@ + diff --git a/install/dist/conf/fedora33.conf.php b/install/dist/conf/fedora33.conf.php index 54013ed6de..5fe00b92fe 100644 --- a/install/dist/conf/fedora33.conf.php +++ b/install/dist/conf/fedora33.conf.php @@ -28,7 +28,7 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -//*** Fedora 9 default settings +//*** Fedora 33 default settings //* Main $conf['language'] = 'en'; diff --git a/install/dist/lib/fedora32.lib.php b/install/dist/lib/fedora32.lib.php new file mode 100644 index 0000000000..3dcd7494d3 --- /dev/null +++ b/install/dist/lib/fedora32.lib.php @@ -0,0 +1,40 @@ + diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index b59c8ede6b..3d77443372 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -308,7 +308,13 @@ function get_distname() { $distid = 'fedora9'; $distbaseid = 'fedora'; swriteln("Operating System: Fedora 11 or compatible\n"); - } elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) { + } elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) { + $distname = 'Fedora'; + $distver = '32'; + $distid = 'fedora32'; + $distbaseid = 'fedora'; + swriteln("Operating System: Fedora 32 or compatible\n"); + } elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) { $distname = 'Fedora'; $distver = '33'; $distid = 'fedora33'; diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index ed5a2fe040..b50fd5afb8 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -290,6 +290,11 @@ class monitor_tools { $distver = '11'; $distid = 'fedora9'; $distbaseid = 'fedora'; + } elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) { + $distname = 'Fedora'; + $distver = '32'; + $distid = 'fedora32'; + $distbaseid = 'fedora'; } elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) { $distname = 'Fedora'; $distver = '33'; -- GitLab From 26893d7077a99eb91ccaaf1f56b3a5d88765e463 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 3 Jan 2020 12:40:55 +0100 Subject: [PATCH 043/403] Allow searching on the mailbox login field --- interface/web/mail/form/mail_user.tform.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php index 85e310648b..982d79474d 100644 --- a/interface/web/mail/form/mail_user.tform.php +++ b/interface/web/mail/form/mail_user.tform.php @@ -122,7 +122,8 @@ $form["tabs"]['mailuser'] = array( 'default' => '', 'value' => '', 'width' => '30', - 'maxlength' => '255' + 'maxlength' => '255', + 'searchable' => 2 ), 'password' => array ( 'datatype' => 'VARCHAR', -- GitLab From 874733d530c7472f286bd1c69c0462f7bc7bf71b Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sun, 5 Jan 2020 21:05:07 +0100 Subject: [PATCH 044/403] In search show the full result count instead of capped at 10. --- interface/web/dashboard/ajax_get_json.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/interface/web/dashboard/ajax_get_json.php b/interface/web/dashboard/ajax_get_json.php index 32fc8912e0..ddedf0c39c 100644 --- a/interface/web/dashboard/ajax_get_json.php +++ b/interface/web/dashboard/ajax_get_json.php @@ -194,8 +194,13 @@ function _search($module, $section, $additional_sql = '', $params = ''){ if(is_array($results) && !empty($results)){ $lng_file = '../'.$module.'/lib/lang/'.$_SESSION['s']['language'].'_'.$section.'.lng'; if(is_file($lng_file)) include $lng_file; + + // Get the real result count, without LIMIT. + $sql_real_rows = preg_replace(array('/\*/', "/ LIMIT.*$/"), array('COUNT(*) as c', ''), $sql); + $result_count = $app->db->queryOneRecord($sql_real_rows, $db_table); + $result_array['cheader'] = array('title' => $category_title, - 'total' => count($results), + 'total' => $result_count['c'], 'limit' => count($results) ); foreach($results as $result){ -- GitLab From 548933382cd5941c09b932514e35b8c75b59669b Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 29 Nov 2020 00:02:42 +0100 Subject: [PATCH 045/403] Add journalctl support for log_messages --- server/lib/classes/monitor_tools.inc.php | 39 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index dbe702d0dd..c3d01c919b 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -493,6 +493,7 @@ class monitor_tools { $dist = ''; $logfile = ''; + $journalmatch = ''; if (@is_file('/etc/debian_version')) { $dist = 'debian'; @@ -542,7 +543,7 @@ class monitor_tools { if ($dist == 'debian') { $logfile = '/var/log/syslog'; } elseif ($dist == 'redhat') { - $logfile = '/var/log/messages'; + $journalmatch = ' '; } elseif ($dist == 'suse') { $logfile = '/var/log/messages'; } elseif ($dist == 'gentoo') { @@ -643,27 +644,41 @@ class monitor_tools { if (stristr($logfile, ';') or substr($logfile, 0, 9) != '/var/log/' or stristr($logfile, '..')) { $log = 'Logfile path error.'; } else { - $log = ''; if (is_readable($logfile)) { - $fd = popen('tail -n 100 ' . escapeshellarg($logfile), 'r'); - if ($fd) { - while (!feof($fd)) { - $log .= fgets($fd, 4096); - $n++; - if ($n > 1000) - break; - } - fclose($fd); - } + $log = $this->_getOutputFromExecCommand('tail -n 100 ' . escapeshellarg($logfile)); } else { $log = 'Unable to read ' . $logfile; } } + }else{ + if($journalmatch != ''){ + $log = $this->_getOutputFromExecCommand('journalctl -n 100 --no-pager ' . escapeshellcmd($journalmatch)); + }else{ + $log = 'Unable to read ' . $logfile; + } + } return $log; } + private function _getOutputFromExecCommand ($command) { + $log = ''; + echo $command; + $fd = popen($command, 'r'); + if ($fd) { + $n = 0; + while (!feof($fd)) { + $log .= fgets($fd, 4096); + $n++; + if ($n > 1000) + break; + } + fclose($fd); + } + return $log; + } + private function _checkTcp($host, $port) { /* Try to open a connection */ $fp = @fsockopen($host, $port, $errno, $errstr, 2); -- GitLab From 59dfac20a0f6f2353e73875cc84905055e334151 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 29 Nov 2020 00:10:47 +0100 Subject: [PATCH 046/403] Add journalctl support for log_messages --- server/lib/classes/monitor_tools.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index c3d01c919b..d74b35ab79 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -654,7 +654,7 @@ class monitor_tools { if($journalmatch != ''){ $log = $this->_getOutputFromExecCommand('journalctl -n 100 --no-pager ' . escapeshellcmd($journalmatch)); }else{ - $log = 'Unable to read ' . $logfile; + $log = 'Unable to read logfile'; } } -- GitLab From aed098cd45b575936d95bc2a0dda351a367bf589 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 29 Nov 2020 00:11:34 +0100 Subject: [PATCH 047/403] Add journalctl support for log_messages --- server/lib/classes/monitor_tools.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index d74b35ab79..3783452aac 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -664,7 +664,6 @@ class monitor_tools { private function _getOutputFromExecCommand ($command) { $log = ''; - echo $command; $fd = popen($command, 'r'); if ($fd) { $n = 0; -- GitLab From fa53b6070f47fc539362101af134d38ec95cf665 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 29 Nov 2020 21:59:43 +0100 Subject: [PATCH 048/403] Fix php_fpm_socket_dir and cgi_socket --- install/dist/conf/fedora32.conf.php | 4 ++-- install/dist/conf/fedora33.conf.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install/dist/conf/fedora32.conf.php b/install/dist/conf/fedora32.conf.php index 76c45e5352..6701bb8729 100644 --- a/install/dist/conf/fedora32.conf.php +++ b/install/dist/conf/fedora32.conf.php @@ -208,12 +208,12 @@ $conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available'; $conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled'; $conf['nginx']['init_script'] = 'nginx'; $conf['nginx']['vhost_port'] = '8080'; -$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket'; +$conf['nginx']['cgi_socket'] = '/run/fcgiwrap.sock'; $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; $conf['nginx']['php_fpm_start_port'] = 9010; -$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php-fpm'; +$conf['nginx']['php_fpm_socket_dir'] = '/run/php-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/dist/conf/fedora33.conf.php b/install/dist/conf/fedora33.conf.php index 5fe00b92fe..873376fa2c 100644 --- a/install/dist/conf/fedora33.conf.php +++ b/install/dist/conf/fedora33.conf.php @@ -208,12 +208,12 @@ $conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available'; $conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled'; $conf['nginx']['init_script'] = 'nginx'; $conf['nginx']['vhost_port'] = '8080'; -$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket'; +$conf['nginx']['cgi_socket'] = '/run/fcgiwrap.sock'; $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; $conf['nginx']['php_fpm_start_port'] = 9010; -$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php-fpm'; +$conf['nginx']['php_fpm_socket_dir'] = '/run/php-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; -- GitLab From 3aaf95636725a0b946ff27f6c344135e104660d5 Mon Sep 17 00:00:00 2001 From: Sroka Date: Mon, 30 Nov 2020 21:00:23 +0100 Subject: [PATCH 049/403] Server php adding custom fpm_socket_dir --- .../sql/incremental/upd_dev_collection.sql | 3 ++ install/sql/ispconfig3.sql | 1 + interface/web/admin/form/server_php.tform.php | 14 ++++++++ .../admin/templates/server_php_fpm_edit.htm | 3 ++ .../plugins-available/apache2_plugin.inc.php | 34 +++++++++--------- server/plugins-available/nginx_plugin.inc.php | 35 ++++++++++--------- 6 files changed, 58 insertions(+), 32 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index beea2623b3..f72e1eb05f 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,2 +1,5 @@ -- drop old php column because new installations don't have them (fails in multi-server) ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; + +-- add php_fpm_pool_dir column to server_php +ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 7753071f71..b4267f0d74 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -1426,6 +1426,7 @@ CREATE TABLE `server_php` ( `php_fpm_init_script` varchar(255) DEFAULT NULL, `php_fpm_ini_dir` varchar(255) DEFAULT NULL, `php_fpm_pool_dir` varchar(255) DEFAULT NULL, + `php_fpm_socket_dir` varchar(255) DEFAULT NULL, `active` enum('n','y') NOT NULL DEFAULT 'y', PRIMARY KEY (`server_php_id`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php index 6d443e8d50..59eb7b4a6f 100644 --- a/interface/web/admin/form/server_php.tform.php +++ b/interface/web/admin/form/server_php.tform.php @@ -229,6 +229,20 @@ $form["tabs"]['php_fpm'] = array( 'width' => '40', 'maxlength' => '255' ), + 'php_fpm_socket_dir' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'STRIPTAGS'), + 1 => array( 'event' => 'SAVE', + 'type' => 'STRIPNL') + ), + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), //################################# // END Datatable fields //################################# diff --git a/interface/web/admin/templates/server_php_fpm_edit.htm b/interface/web/admin/templates/server_php_fpm_edit.htm index 372b3702fc..5e4cae9ac5 100644 --- a/interface/web/admin/templates/server_php_fpm_edit.htm +++ b/interface/web/admin/templates/server_php_fpm_edit.htm @@ -7,6 +7,9 @@
+
+ +
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index cc4bea9f60..26cd14fd36 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -1667,31 +1667,30 @@ class apache2_plugin { * PHP-FPM */ // Support for multiple PHP versions + $default_php_fpm = true; if($data['new']['php'] == 'php-fpm'){ if($data['new']['server_php_id'] != 0){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; + $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } else { if($data['old']['server_php_id'] != 0 && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; + $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -1704,7 +1703,12 @@ class apache2_plugin { if(substr($pool_dir, -1) != '/') $pool_dir .= '/'; $pool_name = 'web'.$data['new']['domain_id']; - $socket_dir = $web_config['php_fpm_socket_dir']; + + if (!$default_php_fpm && !empty($custom_php_fpm_socket_dir)) { + $socket_dir = $custom_php_fpm_socket_dir; + } else { + $socket_dir = $web_config['php_fpm_socket_dir']; + } if(substr($socket_dir, -1) != '/') $socket_dir .= '/'; if($data['new']['php_fpm_use_socket'] == 'y'){ @@ -3303,31 +3307,29 @@ class apache2_plugin { $pool_dir = trim($pool_dir); //$reload = false; + $default_php_fpm = true; + if($data['new']['php'] == 'php-fpm'){ if($data['new']['server_php_id'] != 0){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } else { if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -3525,17 +3527,17 @@ class apache2_plugin { $php_fpm_reload_mode = ($web_config['php_fpm_reload_mode'] == 'reload')?'reload':'restart'; + $default_php_fpm = true; + if($data['old']['server_php_id'] != 0 && $data['old']['php'] == 'php-fpm'){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } if($default_php_fpm){ diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 59cc56bf08..c62022f122 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1084,31 +1084,31 @@ class nginx_plugin { } if($data['new']['ip_address'] == '*' && $data['new']['ipv6_address'] == '') $tpl->setVar('ipv6_wildcard', 1); + $default_php_fpm = true; + if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){ if($data['new']['server_php_id'] != 0){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; + $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } else { if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; + $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -1120,7 +1120,12 @@ class nginx_plugin { $pool_dir = trim($pool_dir); if(substr($pool_dir, -1) != '/') $pool_dir .= '/'; $pool_name = 'web'.$data['new']['domain_id']; - $socket_dir = $web_config['php_fpm_socket_dir']; + + if (!$default_php_fpm && !empty($custom_php_fpm_socket_dir)) { + $socket_dir = $custom_php_fpm_socket_dir; + } else { + $socket_dir = $web_config['php_fpm_socket_dir']; + } if(substr($socket_dir, -1) != '/') $socket_dir .= '/'; if($data['new']['php_fpm_use_socket'] == 'y'){ @@ -2876,31 +2881,29 @@ class nginx_plugin { $rh_releasefiles = array('/etc/centos-release', '/etc/redhat-release'); // HHVM => PHP-FPM-Fallback + $default_php_fpm = true; + if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){ if($data['new']['server_php_id'] != 0){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['new']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } else { if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -3102,17 +3105,17 @@ class nginx_plugin { private function php_fpm_pool_delete ($data, $web_config) { global $app, $conf; + $default_php_fpm = true; + if($data['old']['server_php_id'] != 0 && $data['old']['php'] != 'no'){ - $default_php_fpm = false; $tmp_php = $app->db->queryOneRecord('SELECT * FROM server_php WHERE server_php_id = ?', $data['old']['server_php_id']); if($tmp_php) { + $default_php_fpm = false; $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } if($default_php_fpm){ -- GitLab From 32aeff8727b65d7e0d1e42fcfb6715b406f8f834 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 30 Nov 2020 13:58:18 -0700 Subject: [PATCH 050/403] set warn*recip in spamfilter_policy defaults --- install/sql/ispconfig3.sql | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 7753071f71..07ca7b8642 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -2541,12 +2541,12 @@ INSERT INTO `software_repo` (`software_repo_id`, `sys_userid`, `sys_groupid`, `s -- INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(1, 1, 0, 'riud', 'riud', 'r', 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', '', '', '', '', '', '', 3, 7, 10, 0, 0, '', '', '', '', 'N', 'N', 'N', '', '', '', '', '', '', '', 0, '', 'n', 6.00, 8.00, 'rewrite_subject', 12.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00); -INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(2, 1, 0, 'riud', 'riud', 'r', 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(3, 1, 0, 'riud', 'riud', 'r', 'Wants all spam', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 999, 999, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 999.00, 999.00, 'rewrite_subject', 999.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(4, 1, 0, 'riud', 'riud', 'r', 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(5, 1, 0, 'riud', 'riud', 'r', 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', '', '', '', '', '', '', 1, 4.5, 50, 0, 0, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, '', '***SPAM***', NULL, NULL, 'y', 4.00, 6.00, 'rewrite_subject', 10.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(6, 1, 0, 'riud', 'riud', 'r', 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'y', 2.00, 4.00, 'rewrite_subject', 8.00); +INSERT INTO `spamfilter_policy` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`, `rspamd_greylisting`, `rspamd_spam_greylisting_level`, `rspamd_spam_tag_level`, `rspamd_spam_tag_method`, `rspamd_spam_kill_level`) VALUES(7, 1, 0, 'riud', 'riud', 'r', 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'n', 7.00, 10.00, 'rewrite_subject', 20.00); -- -------------------------------------------------------- -- GitLab From 8dc9804c2b2ad47745aea60c39c5ba328549265b Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 6 Dec 2020 11:29:21 +0100 Subject: [PATCH 051/403] Missed commit on dashboard enhancements / progressbars --- interface/web/mail/user_quota_stats.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/interface/web/mail/user_quota_stats.php b/interface/web/mail/user_quota_stats.php index 9699acafda..e907bdfb74 100644 --- a/interface/web/mail/user_quota_stats.php +++ b/interface/web/mail/user_quota_stats.php @@ -60,16 +60,10 @@ class list_action extends listform_actions { $rec['percentage_sort'] = round(100 * $rec['used'] / $rec['quota']); $rec['quota'] = round($rec['quota'] / 1048576, 4).' MB'; } - - + $rec['progressbar'] = $rec['percentage_sort'] > 100 ? 100 : $rec['percentage_sort']; + $rec['used_sort'] = $rec['used']; -/* - if($rec['used'] < 1544000) { - $rec['used'] = round($rec['used'] / 1024, 4).' KB'; - } else { - $rec['used'] = round($rec['used'] / 1048576, 4).' MB'; - } -*/ + $rec['used']=$app->functions->formatBytes($rec['used']); if ($rec['used'] == 'NAN') $rec['used']='0 KB'; -- GitLab From 3d008eeeeade5d2755cbe01386129fc4635fe807 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 6 Dec 2020 15:58:04 +0100 Subject: [PATCH 052/403] fixes #5954, fixes type, cleanup, fixes no progressbar when unlimited quota --- .../web/mail/templates/user_quota_stats_list.htm | 6 +++--- .../themes/default/assets/stylesheets/ispconfig.css | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/interface/web/mail/templates/user_quota_stats_list.htm b/interface/web/mail/templates/user_quota_stats_list.htm index 58a374eabd..9341c3ef03 100644 --- a/interface/web/mail/templates/user_quota_stats_list.htm +++ b/interface/web/mail/templates/user_quota_stats_list.htm @@ -58,11 +58,11 @@
diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index d3b3506642..9c72186885 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -284,11 +284,22 @@ body { height: 20px; background-color: #ababab; font-weight: bold; + position: relative; } .progress-bar-danger, .progress-bar-warning, .progress-bar-success { text-align: center; color: white; + display: list-item; +} + +.progress span { + position: absolute; + left: 0; + width: 100%; + text-align: center; + z-index: 2; + color: white; } p.fieldset-legend { -- GitLab From f0d34f9e4f702e3f125c83864100cc08aba08375 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 6 Dec 2020 21:24:44 +0100 Subject: [PATCH 053/403] other progressbars center values --- interface/web/dashboard/dashlets/templates/mailquota.htm | 4 ++-- interface/web/dashboard/dashlets/templates/quota.htm | 2 +- interface/web/sites/templates/database_quota_stats_list.htm | 2 +- interface/web/sites/templates/user_quota_stats_list.htm | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm index 91349d2af4..d80c619fee 100644 --- a/interface/web/dashboard/dashlets/templates/mailquota.htm +++ b/interface/web/dashboard/dashlets/templates/mailquota.htm @@ -18,7 +18,7 @@ {tmpl_if name="quota" op="!=" value="unlimited"}
{tmpl_var name='search_limit'}
      
{tmpl_var name="domain"}{tmpl_var name="domain"} {tmpl_var name="system_user"} {tmpl_var name="used"} {tmpl_var name="soft"} {tmpl_var name="hard"} {tmpl_var name="files"}{tmpl_if name="progressbar" op="!=" value="-1"}
+
{tmpl_var name="percentage"}%
+
{/tmpl_if}
{tmpl_var name="quota"} - {tmpl_if name="progressbar" op="!=" value="-1"}
+ {tmpl_if name="quota" op="!=" value="0"}
- {tmpl_var name="percentage"}
+ {tmpl_var name="percentage"}
{/tmpl_if}
{tmpl_var name='quota'}
-
{tmpl_var name="used_percentage"}% +
{tmpl_var name="used_percentage"}% {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'}
@@ -27,4 +27,4 @@
- \ No newline at end of file + diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm index 48435149b4..fe006c2087 100644 --- a/interface/web/dashboard/dashlets/templates/quota.htm +++ b/interface/web/dashboard/dashlets/templates/quota.htm @@ -21,7 +21,7 @@
{tmpl_var name="used_percentage"}% + style='width:{tmpl_var name="used_percentage"}%'>{tmpl_var name="used_percentage"}% {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'}
diff --git a/interface/web/sites/templates/database_quota_stats_list.htm b/interface/web/sites/templates/database_quota_stats_list.htm index 9982e6e601..28f4bbd11d 100644 --- a/interface/web/sites/templates/database_quota_stats_list.htm +++ b/interface/web/sites/templates/database_quota_stats_list.htm @@ -37,7 +37,7 @@ {tmpl_var name="used"} {tmpl_var name="quota"} {tmpl_if name="progressbar" op="!=" value="-1"}
-
{tmpl_var name="percentage"}
+
{tmpl_var name="percentage"}
{/tmpl_if} diff --git a/interface/web/sites/templates/user_quota_stats_list.htm b/interface/web/sites/templates/user_quota_stats_list.htm index f5a6c0fd77..c7265c0111 100644 --- a/interface/web/sites/templates/user_quota_stats_list.htm +++ b/interface/web/sites/templates/user_quota_stats_list.htm @@ -40,7 +40,7 @@ {tmpl_var name="hard"} {tmpl_var name="files"} {tmpl_if name="progressbar" op="!=" value="-1"}
-
{tmpl_var name="percentage"}%
+
{tmpl_var name="percentage"}%
{/tmpl_if} -- GitLab From f6fbe2a8abfdaacfd5b9750e7050fee1b23f77f3 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 9 Dec 2020 09:10:09 +0100 Subject: [PATCH 054/403] Apply 1 suggestion(s) to 1 file(s) --- server/lib/classes/monitor_tools.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 3783452aac..9fd9d3f8f3 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -650,7 +650,7 @@ class monitor_tools { $log = 'Unable to read ' . $logfile; } } - }else{ + } else { if($journalmatch != ''){ $log = $this->_getOutputFromExecCommand('journalctl -n 100 --no-pager ' . escapeshellcmd($journalmatch)); }else{ -- GitLab From 6f29d682ca8fab6bd3a53d486c63b74121854296 Mon Sep 17 00:00:00 2001 From: Helmo Date: Wed, 9 Dec 2020 09:16:26 +0100 Subject: [PATCH 055/403] Apply 1 suggestion(s) to 1 file(s) --- interface/web/dashboard/ajax_get_json.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/web/dashboard/ajax_get_json.php b/interface/web/dashboard/ajax_get_json.php index ddedf0c39c..76f284352b 100644 --- a/interface/web/dashboard/ajax_get_json.php +++ b/interface/web/dashboard/ajax_get_json.php @@ -196,7 +196,8 @@ function _search($module, $section, $additional_sql = '', $params = ''){ if(is_file($lng_file)) include $lng_file; // Get the real result count, without LIMIT. - $sql_real_rows = preg_replace(array('/\*/', "/ LIMIT.*$/"), array('COUNT(*) as c', ''), $sql); + $sql_real_rows = "SELECT COUNT(*) as `c` FROM ?? WHERE ".$where_clause.$authsql.$order_clause; + $result_count = $app->db->queryOneRecord($sql_real_rows, $db_table); $result_array['cheader'] = array('title' => $category_title, -- GitLab From f17a975d39192630bdfc14744965fb23f91eceee Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 9 Dec 2020 09:41:45 +0100 Subject: [PATCH 056/403] Apply 1 suggestion(s) to 1 file(s) --- server/mods-available/remoteaction_core_module.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index bdaba5cb06..eea8fd6941 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -179,7 +179,7 @@ class remoteaction_core_module { //TODO : change this when distribution information has been integrated into server record if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); - }elseif(file_exists('/etc/redhat-release')) { + } elseif(file_exists('/etc/redhat-release')) { exec("dnf -y update"); } else { -- GitLab From acfe7552fa6401142636e25d376fd8b0964929ef Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Wed, 9 Dec 2020 12:17:43 +0100 Subject: [PATCH 057/403] Add values for xfer, also_notify, and dnssec_wanted (#5934) --- install/sql/ispconfig3.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 67f0f3bdcb..1059a11059 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -2507,7 +2507,7 @@ INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`) -- Dumping data for table `dns_template` -- -INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\ndnssec_algo=ECDSAP256SHA256\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y'); +INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL,DKIM,DNSSEC', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=7200\nretry=540\nexpire=604800\nminimum=3600\nttl=3600\nxfer=\nalso_notify=\ndnssec_wanted=N\ndnssec_algo=ECDSAP256SHA256\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|3600\nA|www|{IP}|0|3600\nA|mail|{IP}|0|3600\nNS|{DOMAIN}.|{NS1}.|0|3600\nNS|{DOMAIN}.|{NS2}.|0|3600\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|3600\nTXT|{DOMAIN}.|v=spf1 mx a ~all|0|3600', 'y'); -- -------------------------------------------------------- -- GitLab From 3bf6572db555d96d8424a6aae81fa5927bd5a5f0 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Wed, 9 Dec 2020 12:30:48 +0100 Subject: [PATCH 058/403] Set default for dnssec_wanted (#5960) --- interface/web/dns/dns_wizard.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php index 4aa0644020..bef4422ef3 100644 --- a/interface/web/dns/dns_wizard.php +++ b/interface/web/dns/dns_wizard.php @@ -341,7 +341,7 @@ if($_POST['create'] == 1) { $section = ''; $vars = array(); $vars['xfer']=''; - $vars['dnssec_wanted']=''; + $vars['dnssec_wanted']='N'; $vars['dnssec_algo']='ECDSAP256SHA256'; $dns_rr = array(); foreach($tpl_rows as $row) { -- GitLab From 59df9256a0eac577349ee33b3843bac9714c190a Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Wed, 9 Dec 2020 12:41:47 +0100 Subject: [PATCH 059/403] Replace @ to example.com. in data field (#5943) --- interface/web/dns/dns_edit_base.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/web/dns/dns_edit_base.php b/interface/web/dns/dns_edit_base.php index a94bd54946..843f377db5 100644 --- a/interface/web/dns/dns_edit_base.php +++ b/interface/web/dns/dns_edit_base.php @@ -117,6 +117,9 @@ class dns_page_action extends tform_actions { if($this->dataRecord["name"] === '@') { $this->dataRecord["name"] = $soa['origin']; } + if($this->dataRecord["data"] === '@') { + $this->dataRecord["data"] = $soa['origin']; + } // Replace * to *.example.com. if($this->dataRecord["name"] === '*') { -- GitLab From 9692086b47ce2db97db05a344c13528ce37c000b Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Wed, 9 Dec 2020 13:39:05 +0100 Subject: [PATCH 060/403] Show backup stats to admin (#5962) --- interface/web/sites/lib/module.conf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php index 775a704873..5f1a25a449 100644 --- a/interface/web/sites/lib/module.conf.php +++ b/interface/web/sites/lib/module.conf.php @@ -213,7 +213,7 @@ $items[] = array( 'title' => 'Database quota', 'link' => 'sites/database_quota_stats.php', 'html_id' => 'databse_quota_stats'); -if($app->auth->get_client_limit($userid, 'backup') == 'y') { +if($app->auth->get_client_limit($userid, 'backup') != 'n') { $items[] = array ( 'title' => 'Backup Stats', 'target' => 'content', -- GitLab From d0a303be9095202297080f625ab4048767507106 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Wed, 9 Dec 2020 13:55:21 +0100 Subject: [PATCH 061/403] Fix for database quota view, updates ispconfig.css version Closes #5961 --- interface/web/sites/database_quota_stats.php | 4 ++-- interface/web/sites/templates/database_quota_stats_list.htm | 4 ++-- interface/web/themes/default/templates/main.tpl.htm | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/interface/web/sites/database_quota_stats.php b/interface/web/sites/database_quota_stats.php index df17928e36..c256549ff4 100644 --- a/interface/web/sites/database_quota_stats.php +++ b/interface/web/sites/database_quota_stats.php @@ -76,7 +76,7 @@ class list_action extends listform_actions { $rec['percentage'] = ''; $rec['progressbar'] = -1; } else { - if ($rec['used'] > 0 ) $rec['percentage'] = round(100 * intval($rec['used']) / ( intval($rec['quota'])*1024*1024) ).'%'; + if ($rec['used'] > 0 ) $rec['percentage'] = round(100 * intval($rec['used']) / ( intval($rec['quota'])*1024*1024) ); $rec['quota'] .= ' MB'; } @@ -94,7 +94,7 @@ class list_action extends listform_actions { $rec['quota'] = $rec['database_quota']; } $rec['id'] = $rec[$this->idx_key]; - + $rec['progressbar_value'] = $rec['percentage'] >= 100 ? 100 : $rec['percentage']; return $rec; } diff --git a/interface/web/sites/templates/database_quota_stats_list.htm b/interface/web/sites/templates/database_quota_stats_list.htm index 28f4bbd11d..1c30e14609 100644 --- a/interface/web/sites/templates/database_quota_stats_list.htm +++ b/interface/web/sites/templates/database_quota_stats_list.htm @@ -36,8 +36,8 @@ {tmpl_var name="client"} {tmpl_var name="used"} {tmpl_var name="quota"} - {tmpl_if name="progressbar" op="!=" value="-1"}
-
{tmpl_var name="percentage"}
+ {tmpl_if name="progressbar" op="!=" value="-1"}
+
{tmpl_var name="percentage"}%
{/tmpl_if} diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm index e04bf29081..b3630f6ecf 100644 --- a/interface/web/themes/default/templates/main.tpl.htm +++ b/interface/web/themes/default/templates/main.tpl.htm @@ -22,7 +22,7 @@ /assets/stylesheets/bootstrap.min.css' /> /assets/stylesheets/fonts.min.css' /> - /assets/stylesheets/ispconfig.css?ver=3.2' /> + /assets/stylesheets/ispconfig.css?ver=3.2.2' /> /assets/stylesheets/pushy.min.css' /> /assets/stylesheets/bootstrap-datetimepicker.min.css' /> /assets/stylesheets/responsive.min.css' /> -- GitLab From 0b137df268ae6c5f6bc97c3b18fbea29b2ae8009 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Wed, 9 Dec 2020 15:43:31 +0100 Subject: [PATCH 062/403] Firefox list style issue --- interface/web/themes/default/assets/stylesheets/ispconfig.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index 9c72186885..9d44048e82 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -290,7 +290,7 @@ body { .progress-bar-danger, .progress-bar-warning, .progress-bar-success { text-align: center; color: white; - display: list-item; + height: 100%; } .progress span { -- GitLab From 335113ab93b56ce239ad375a2eb97ba93040fd6a Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 25 Nov 2020 14:24:53 -0700 Subject: [PATCH 063/403] fix cleanup of untracked backup files --- server/lib/classes/backup.inc.php | 84 +++++++++++++++++++------------ 1 file changed, 53 insertions(+), 31 deletions(-) diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index e7333356b4..128a3993c0 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -721,7 +721,7 @@ class backup } /** - * Garbage collection: deletes records from database about files that do not exist and deletes untracked files. + * Garbage collection: deletes records from database about files that do not exist and deletes untracked files and cleans up backup download directories. * The backup directory must be mounted before calling this method. * @param int $server_id * @param string|null $backup_type if defined then process only backups of this type @@ -740,25 +740,32 @@ class backup $backup_dir = trim($server_config['backup_dir']); $sql = "SELECT * FROM web_backup WHERE server_id = ?"; $sql_domains = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; + $sql_domains_with_backups = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE domain_id in (SELECT * FROM web_backup WHERE server_id = ?" . ((!empty($backup_type)) ? " AND backup_type = ?" : "") . ") AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; array_push($args, $server_id); array_push($args_domains, $server_id); + array_push($args_domains_with_backups, $server_id); if (!empty($backup_type)) { $sql .= " AND backup_type = ?"; array_push($args, $backup_type); + array_push($args_domains_with_backups, $backup_type); } if (!empty($domain_id)) { $sql .= " AND parent_domain_id = ?"; $sql_domains .= " AND domain_id = ?"; + $sql_domains_with_backups .= " AND domain_id = ?"; array_push($args, $domain_id); array_push($args_domains, $domain_id); + array_push($args_domains_with_backups, $domain_id); } array_unshift($args, $sql); array_unshift($args_domains, $sql_domains); + array_unshift($args_domains_with_backups, $sql_domains); $db_list = array($app->db); if ($app->db->dbHost != $app->dbmaster->dbHost) array_push($db_list, $app->dbmaster); + // Cleanup web_backup entries for non-existent backup files foreach ($db_list as $db) { $backups = call_user_func_array(array($db, "queryAllRecords"), $args); foreach ($backups as $backup) { @@ -771,27 +778,42 @@ class backup } } - foreach ($db_list as $db) { - $domains = call_user_func_array(array($db, "queryAllRecords"), $args_domains); - foreach ($domains as $rec) { - $domain_id = $rec['domain_id']; - $domain_backup_dir = $backup_dir . '/web' . $domain_id; - $files = self::get_files($domain_backup_dir); - - //Delete files that are in backup directory, but do not exist in database - if (!empty($files)) { - $sql = "SELECT backup_id,filename FROM web_backup WHERE server_id = ? AND parent_domain_id = ?"; + // Cleanup backup files with missing web_backup entries (runs on all servers) + $domains = $app->dbmaster->queryAllRecords($args_domains_with_backups); + foreach ($domains as $rec) { + $domain_id = $rec['domain_id']; + $domain_backup_dir = $backup_dir . '/web' . $domain_id; + $files = self::get_files($domain_backup_dir); + + if (!empty($files)) { + // leave out server_id here, in case backup storage is shared between servers + $sql = "SELECT backup_id, filename FROM web_backup WHERE parent_domain_id = ?"; + foreach ($db_list as $db) { + $backup_record_exists = false; $backups = $db->queryAllRecords($sql, $server_id, $domain_id); foreach ($backups as $backup) { - if (!in_array($backup['filename'],$files)) { - $backup_file = $backup_dir . '/web' . $domain_id . '/' . $backup['filename']; - $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG); - @unlink($backup_file); + if (in_array($backup['filename'],$files)) { + $backup_record_exists = true; } } + if (!$backup_record_exists) { + $backup_file = $backup_dir . '/web' . $domain_id . '/' . $backup['filename']; + $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG); + @unlink($backup_file); + } } + } + } - //Remove backupdir symlink and create as directory instead + // This cleanup only runs on web servers + $domains = $app->db->queryAllRecords($args_domains); + foreach ($domains as $rec) { + $domain_id = $rec['domain_id']; + $domain_backup_dir = $backup_dir . '/web' . $domain_id; + $files = self::get_files($domain_backup_dir); + + // Remove backupdir symlink and create as directory instead + if (is_link($backup_download_dir) || !is_dir($backup_download_dir)) { $web_path = $rec['document_root']; $app->system->web_folder_protection($web_path, false); @@ -806,23 +828,23 @@ class backup } $app->system->web_folder_protection($web_path, true); + } - // delete old files from backup download dir (/var/www/example.com/backup) - if (is_dir($backup_download_dir)) { - $dir_handle = dir($backup_download_dir); - $now = time(); - while (false !== ($entry = $dir_handle->read())) { - $full_filename = $backup_download_dir . '/' . $entry; - if ($entry != '.' && $entry != '..' && is_file($full_filename)) { - // delete files older than 3 days - if ($now - filemtime($full_filename) >= 60 * 60 * 24 * 3) { - $app->log('Backup file ' . $full_filename . ' is too old, deleting this file from disk', LOGLEVEL_DEBUG); - @unlink($full_filename); - } + // delete old files from backup download dir (/var/www/example.com/backup) + if (is_dir($backup_download_dir)) { + $dir_handle = dir($backup_download_dir); + $now = time(); + while (false !== ($entry = $dir_handle->read())) { + $full_filename = $backup_download_dir . '/' . $entry; + if ($entry != '.' && $entry != '..' && is_file($full_filename)) { + // delete files older than 3 days + if ($now - filemtime($full_filename) >= 60 * 60 * 24 * 3) { + $app->log('Backup file ' . $full_filename . ' is too old, deleting this file from disk', LOGLEVEL_DEBUG); + @unlink($full_filename); } } - $dir_handle->close(); } + $dir_handle->close(); } } } @@ -1419,7 +1441,7 @@ class backup $ok = self::make_web_backup($rec, $backup_job); break; case 'mysql': - $rec['server_id'] = $server_id; + $rec['server_id'] = $server_id; $ok = self::make_database_backup($rec, $backup_job); break; default: @@ -1460,7 +1482,7 @@ class backup } } - $sql = "SELECT DISTINCT d.*, db.server_id as `server_id` FROM web_database as db INNER JOIN web_domain as d ON (d.domain_id = db.parent_domain_id) WHERE db.server_id = ? AND db.active = 'y' AND d.backup_interval != 'none' AND d.backup_interval != ''"; + $sql = "SELECT DISTINCT d.*, db.server_id as `server_id` FROM web_database as db INNER JOIN web_domain as d ON (d.domain_id = db.parent_domain_id) WHERE db.server_id = ? AND db.active = 'y' AND d.backup_interval != 'none' AND d.backup_interval != ''"; $databases = $app->dbmaster->queryAllRecords($sql, $server_id); foreach ($databases as $database) { -- GitLab From 17a4a5d4a6cb8b23e9ac6fe1b1cc0eea5cea200b Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 7 Dec 2020 07:42:13 -0700 Subject: [PATCH 064/403] log directory not automatically excluded from backups --- server/lib/classes/backup.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index 128a3993c0..1685f8da51 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -1315,7 +1315,6 @@ class backup $backup_excludes = array( escapeshellarg('./backup\*'), './bin', './dev', './etc', './lib', './lib32', './lib64', './opt', './sys', './usr', './var', './proc', './run', './tmp', - './log', ); $b_excludes = explode(',', trim($web_domain['backup_excludes'])); -- GitLab From d296003668c50cb66a88ab724e784c15cb1b554c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 7 Dec 2020 11:11:11 -0700 Subject: [PATCH 065/403] fix query calls, bad escaping of db name, and include zip fixes from !1345 --- server/lib/classes/backup.inc.php | 63 ++++++++++++++++++------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index 1685f8da51..486493a20e 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -736,11 +736,12 @@ class backup //First check that all records in database have related files and delete records without files on disk $args = array(); $args_domains = array(); + $args_domains_with_backups = array(); $server_config = $app->getconf->get_server_config($server_id, 'server'); $backup_dir = trim($server_config['backup_dir']); $sql = "SELECT * FROM web_backup WHERE server_id = ?"; $sql_domains = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; - $sql_domains_with_backups = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE domain_id in (SELECT * FROM web_backup WHERE server_id = ?" . ((!empty($backup_type)) ? " AND backup_type = ?" : "") . ") AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; + $sql_domains_with_backups = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE domain_id in (SELECT parent_domain_id FROM web_backup WHERE server_id = ?" . ((!empty($backup_type)) ? " AND backup_type = ?" : "") . ") AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; array_push($args, $server_id); array_push($args_domains, $server_id); array_push($args_domains_with_backups, $server_id); @@ -759,7 +760,7 @@ class backup } array_unshift($args, $sql); array_unshift($args_domains, $sql_domains); - array_unshift($args_domains_with_backups, $sql_domains); + array_unshift($args_domains_with_backups, $sql_domains_with_backups); $db_list = array($app->db); if ($app->db->dbHost != $app->dbmaster->dbHost) @@ -779,7 +780,7 @@ class backup } // Cleanup backup files with missing web_backup entries (runs on all servers) - $domains = $app->dbmaster->queryAllRecords($args_domains_with_backups); + $domains = call_user_func_array(array($app->dbmaster, "queryAllRecords"), $args_domains_with_backups); foreach ($domains as $rec) { $domain_id = $rec['domain_id']; $domain_backup_dir = $backup_dir . '/web' . $domain_id; @@ -788,29 +789,29 @@ class backup if (!empty($files)) { // leave out server_id here, in case backup storage is shared between servers $sql = "SELECT backup_id, filename FROM web_backup WHERE parent_domain_id = ?"; + $untracked_backup_files = array(); foreach ($db_list as $db) { - $backup_record_exists = false; - $backups = $db->queryAllRecords($sql, $server_id, $domain_id); + $backups = $db->queryAllRecords($sql, $domain_id); foreach ($backups as $backup) { - if (in_array($backup['filename'],$files)) { - $backup_record_exists = true; + if (!in_array($backup['filename'],$files)) { + $untracked_backup_files[] = $backup['filename']; } } - if (!$backup_record_exists) { - $backup_file = $backup_dir . '/web' . $domain_id . '/' . $backup['filename']; - $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG); - @unlink($backup_file); - } + } + array_unique( $untracked_backup_files ); + foreach ($untracked_backup_files as $f) { + $backup_file = $backup_dir . '/web' . $domain_id . '/' . $f; + $app->log('Backup file ' . $backup_file . ' is not contained in database, deleting this file from disk', LOGLEVEL_DEBUG); + @unlink($backup_file); } } } // This cleanup only runs on web servers - $domains = $app->db->queryAllRecords($args_domains); + $domains = call_user_func_array(array($app->db, "queryAllRecords"), $args_domains); foreach ($domains as $rec) { $domain_id = $rec['domain_id']; $domain_backup_dir = $backup_dir . '/web' . $domain_id; - $files = self::get_files($domain_backup_dir); // Remove backupdir symlink and create as directory instead if (is_link($backup_download_dir) || !is_dir($backup_download_dir)) { @@ -836,7 +837,7 @@ class backup $now = time(); while (false !== ($entry = $dir_handle->read())) { $full_filename = $backup_download_dir . '/' . $entry; - if ($entry != '.' && $entry != '..' && is_file($full_filename)) { + if ($entry != '.' && $entry != '..' && is_file($full_filename) && ! is_link($full_filename)) { // delete files older than 3 days if ($now - filemtime($full_filename) >= 60 * 60 * 24 * 3) { $app->log('Backup file ' . $full_filename . ' is too old, deleting this file from disk', LOGLEVEL_DEBUG); @@ -919,16 +920,24 @@ class backup * Generates excludes list for compressors * @param string[] $backup_excludes * @param string $arg + * @param string $pre + * @param string $post * @return string * @author Ramil Valitov */ - protected static function generateExcludeList($backup_excludes, $arg) + protected static function generateExcludeList($backup_excludes, $arg, $pre='', $post='') { - $excludes = implode(" " . $arg, $backup_excludes); - if (!empty($excludes)) { - $excludes = $arg . $excludes; + $excludes = ""; + foreach ($backup_excludes as $ex) { + # pass through escapeshellarg if not already done + if ( preg_match( "/^'.+'$/", $ex ) ) { + $excludes .= "${arg}${pre}${ex}${post} "; + } else { + $excludes .= "${arg}" . escapeshellarg("${pre}${ex}${post}") . " "; + } } - return $excludes; + + return trim( $excludes ); } /** @@ -987,12 +996,14 @@ class backup if (!empty($password)) { $zip_options .= ' --password ' . escapeshellarg($password); } + $excludes = self::generateExcludeList($backup_excludes, '-x '); + $excludes .= " " . self::generateExcludeList($backup_excludes, '-x ', '', '/*'); if ($backup_mode == 'user_zip') { //Standard casual behaviour of ISPConfig - $app->system->exec_safe($find_user_files . ' | zip ' . $zip_options . ' -b ? ' . $excludes . ' --symlinks ? -@', $web_path, $web_user, $web_group, $http_server_user, $backup_tmp, $web_backup_dir . '/' . $web_backup_file); + $app->system->exec_safe($find_user_files . ' | zip ' . $zip_options . ' -b ? --symlinks ? -@ ' . $excludes, $web_path, $web_user, $web_group, $http_server_user, $backup_tmp, $web_backup_dir . '/' . $web_backup_file); } else { - //Use cd to have a correct directory structure inside the archive, extra options to zip hidden (dot) files - $app->system->exec_safe('cd ? && zip ' . $zip_options . ' -b ? ' . $excludes . ' --symlinks -r ? * .* -x "../*"', $web_path, $backup_tmp, $web_backup_dir . '/' . $web_backup_file); + //Use cd to have a correct directory structure inside the archive, zip current directory "." to include hidden (dot) files + $app->system->exec_safe('cd ? && zip ' . $zip_options . ' -b ? --symlinks -r ? . ' . $excludes, $web_path, $backup_tmp, $web_backup_dir . '/' . $web_backup_file); } $exit_code = $app->system->last_exec_retcode(); // zip can return 12(due to harmless warnings) and still create valid backups @@ -1237,8 +1248,8 @@ class backup //* Remove old backups self::backups_garbage_collection($server_id, 'mysql', $domain_id); $prefix_list = array( - 'db_'.escapeshellarg($db_name).'_', - 'manual-db_'.escapeshellarg($db_name).'_', + "db_${db_name}_", + "manual-db_${db_name}_", ); self::clearBackups($server_id, $domain_id, intval($rec['backup_copies']), $db_backup_dir, $prefix_list); } else { @@ -1313,7 +1324,7 @@ class backup # default exclusions $backup_excludes = array( - escapeshellarg('./backup\*'), + './backup*', './bin', './dev', './etc', './lib', './lib32', './lib64', './opt', './sys', './usr', './var', './proc', './run', './tmp', ); -- GitLab From 3a0383c45fa9e3763855cc6beb39123349caceb5 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 9 Dec 2020 10:16:10 -0700 Subject: [PATCH 066/403] nicer calling syntax for queryAllRecords --- server/lib/classes/backup.inc.php | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index 486493a20e..cafff35f18 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -734,33 +734,30 @@ class backup global $app; //First check that all records in database have related files and delete records without files on disk - $args = array(); - $args_domains = array(); - $args_domains_with_backups = array(); + $args_sql = array(); + $args_sql_domains = array(); + $args_sql_domains_with_backups = array(); $server_config = $app->getconf->get_server_config($server_id, 'server'); $backup_dir = trim($server_config['backup_dir']); $sql = "SELECT * FROM web_backup WHERE server_id = ?"; $sql_domains = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; $sql_domains_with_backups = "SELECT domain_id,document_root,system_user,system_group,backup_interval FROM web_domain WHERE domain_id in (SELECT parent_domain_id FROM web_backup WHERE server_id = ?" . ((!empty($backup_type)) ? " AND backup_type = ?" : "") . ") AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')"; - array_push($args, $server_id); - array_push($args_domains, $server_id); - array_push($args_domains_with_backups, $server_id); + array_push($args_sql, $server_id); + array_push($args_sql_domains, $server_id); + array_push($args_sql_domains_with_backups, $server_id); if (!empty($backup_type)) { $sql .= " AND backup_type = ?"; - array_push($args, $backup_type); - array_push($args_domains_with_backups, $backup_type); + array_push($args_sql, $backup_type); + array_push($args_sql_domains_with_backups, $backup_type); } if (!empty($domain_id)) { $sql .= " AND parent_domain_id = ?"; $sql_domains .= " AND domain_id = ?"; $sql_domains_with_backups .= " AND domain_id = ?"; - array_push($args, $domain_id); - array_push($args_domains, $domain_id); - array_push($args_domains_with_backups, $domain_id); + array_push($args_sql, $domain_id); + array_push($args_sql_domains, $domain_id); + array_push($args_sql_domains_with_backups, $domain_id); } - array_unshift($args, $sql); - array_unshift($args_domains, $sql_domains); - array_unshift($args_domains_with_backups, $sql_domains_with_backups); $db_list = array($app->db); if ($app->db->dbHost != $app->dbmaster->dbHost) @@ -768,7 +765,7 @@ class backup // Cleanup web_backup entries for non-existent backup files foreach ($db_list as $db) { - $backups = call_user_func_array(array($db, "queryAllRecords"), $args); + $backups = $app->db->queryAllRecords($sql, true, $args_sql); foreach ($backups as $backup) { $backup_file = $backup_dir . '/web' . $backup['parent_domain_id'] . '/' . $backup['filename']; if (!is_file($backup_file)) { @@ -780,7 +777,7 @@ class backup } // Cleanup backup files with missing web_backup entries (runs on all servers) - $domains = call_user_func_array(array($app->dbmaster, "queryAllRecords"), $args_domains_with_backups); + $domains = $app->dbmaster->queryAllRecords($sql_domains_with_backups, true, $args_sql_domains_with_backups); foreach ($domains as $rec) { $domain_id = $rec['domain_id']; $domain_backup_dir = $backup_dir . '/web' . $domain_id; @@ -808,7 +805,7 @@ class backup } // This cleanup only runs on web servers - $domains = call_user_func_array(array($app->db, "queryAllRecords"), $args_domains); + $domains = $app->db->queryAllRecords($sql_domains, true, $args_sql_domains); foreach ($domains as $rec) { $domain_id = $rec['domain_id']; $domain_backup_dir = $backup_dir . '/web' . $domain_id; -- GitLab From 6183781bff8a45ceedb269711b6743941a1e2e59 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Thu, 10 Dec 2020 09:02:51 +0100 Subject: [PATCH 067/403] wrong main.cf after install (Fixes #5963) --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index f73aefe2c5..31fc679383 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1496,7 +1496,7 @@ class installer_base { foreach ($options as $value) { $value = trim($value); if ($value == '') continue; - if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) { + if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) { continue; } $new_options[] = $value; @@ -1504,7 +1504,7 @@ class installer_base { if ($configure_lmtp && $conf['mail']['content_filter'] === 'amavisd') { for ($i = 0; isset($new_options[$i]); $i++) { if ($new_options[$i] == 'reject_unlisted_recipient') { - array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf")); + array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf")); break; } } -- GitLab From 919b34aac838895bf8309a5f33eae308a6f8b950 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 10 Dec 2020 14:29:20 +0100 Subject: [PATCH 068/403] Move @ replacement function to idnividual records that need it. Fix typo in comment --- interface/web/dns/dns_alias_edit.php | 11 +++++++++++ interface/web/dns/dns_cname_edit.php | 10 ++++++++++ interface/web/dns/dns_dname_edit.php | 11 +++++++++++ interface/web/dns/dns_edit_base.php | 5 +---- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/interface/web/dns/dns_alias_edit.php b/interface/web/dns/dns_alias_edit.php index 20bbc38d86..3dfb59dead 100644 --- a/interface/web/dns/dns_alias_edit.php +++ b/interface/web/dns/dns_alias_edit.php @@ -51,6 +51,17 @@ class page_action extends dns_page_action { if($tmp['number'] > 0) return true; return false; } + + function onSubmit() { + global $app, $conf; + // Get the parent soa record of the domain + $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST["zone"]); + // Replace @ to example.com. in data field + if($this->dataRecord["data"] === '@') { + $this->dataRecord["data"] = $soa['origin']; + } + parent::onSubmit(); + } } $page = new page_action; diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php index 38bb8140c4..e2fde267d2 100644 --- a/interface/web/dns/dns_cname_edit.php +++ b/interface/web/dns/dns_cname_edit.php @@ -53,6 +53,16 @@ class page_action extends dns_page_action { return false; } + function onSubmit() { + global $app, $conf; + // Get the parent soa record of the domain + $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST["zone"]); + // Replace @ to example.com. in data field + if($this->dataRecord["data"] === '@') { + $this->dataRecord["data"] = $soa['origin']; + } + parent::onSubmit(); + } } $page = new page_action; diff --git a/interface/web/dns/dns_dname_edit.php b/interface/web/dns/dns_dname_edit.php index a1e1cb6c07..4e97a8632c 100644 --- a/interface/web/dns/dns_dname_edit.php +++ b/interface/web/dns/dns_dname_edit.php @@ -52,6 +52,17 @@ class page_action extends dns_page_action { if($tmp['number'] > 0) return true; return false; } + + function onSubmit() { + global $app, $conf; + // Get the parent soa record of the domain + $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST["zone"]); + // Replace @ to example.com. in data field + if($this->dataRecord["data"] === '@') { + $this->dataRecord["data"] = $soa['origin']; + } + parent::onSubmit(); + } } $page = new page_action; diff --git a/interface/web/dns/dns_edit_base.php b/interface/web/dns/dns_edit_base.php index 843f377db5..61c08f6576 100644 --- a/interface/web/dns/dns_edit_base.php +++ b/interface/web/dns/dns_edit_base.php @@ -104,7 +104,7 @@ class dns_page_action extends tform_actions { $client_group_id = intval($_SESSION["s"]["user"]["default_group"]); $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); - // Check if the user may add another mailbox. + // Check if the user may add another record. if($this->id == 0 && $client["limit_dns_record"] >= 0) { $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id); if($tmp["number"] >= $client["limit_dns_record"]) { @@ -117,9 +117,6 @@ class dns_page_action extends tform_actions { if($this->dataRecord["name"] === '@') { $this->dataRecord["name"] = $soa['origin']; } - if($this->dataRecord["data"] === '@') { - $this->dataRecord["data"] = $soa['origin']; - } // Replace * to *.example.com. if($this->dataRecord["name"] === '*') { -- GitLab From 4e9b2914f4e9b6f5acbbaac9dbb08bc0d170c537 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 10 Dec 2020 14:48:07 +0100 Subject: [PATCH 069/403] Apply 1 suggestion(s) to 1 file(s) --- install/sql/incremental/upd_dev_collection.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index f72e1eb05f..1544ea81b0 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,5 +1,5 @@ -- drop old php column because new installations don't have them (fails in multi-server) ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; --- add php_fpm_pool_dir column to server_php +-- add php_fpm_socket_dir column to server_php ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; -- GitLab From 5f842cb8975dc11a019e952c43aa4b19df589808 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 10 Dec 2020 15:18:27 +0100 Subject: [PATCH 070/403] Fix FTP user auth error with MySQL 8 (#5939) --- .../sql/incremental/upd_dev_collection.sql | 3 +++ install/tpl/pureftpd_mysql.conf.master | 22 +++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 1544ea81b0..520b9cc950 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -3,3 +3,6 @@ ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; -- add php_fpm_socket_dir column to server_php ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; + +-- rename Comodo to "Sectigo / Comodo CA" +UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00'; diff --git a/install/tpl/pureftpd_mysql.conf.master b/install/tpl/pureftpd_mysql.conf.master index 484f1054c8..fe3df27a3a 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="0000-00-00 00:00:00" 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 > 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="0000-00-00 00:00:00" 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 > 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="0000-00-00 00:00:00" 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 > 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="0000-00-00 00:00:00" 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 > NOW()) -# Optional : query to get the maximal number of files +# 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="0000-00-00 00:00:00" 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 > 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="0000-00-00 00:00:00" 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 > 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="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()) +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()) # 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="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()) +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()) # Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS : # 1) You know what you are doing. -- GitLab From 5ab09ce8554942beef0c9898eb237a5783e8b177 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 10 Dec 2020 15:28:41 +0100 Subject: [PATCH 071/403] Fix comment for query --- install/sql/incremental/upd_dev_collection.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 520b9cc950..a12f9d482b 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -4,5 +4,5 @@ ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; -- add php_fpm_socket_dir column to server_php ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; --- rename Comodo to "Sectigo / Comodo CA" +-- fix #5939 UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00'; -- GitLab From 2e299c5473badec2ea3037151a0f4d765d60af02 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 10 Dec 2020 10:54:15 -0700 Subject: [PATCH 072/403] restoreFileOwnership() excludes system paths --- server/lib/classes/backup.inc.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index cafff35f18..3cdf17d1fc 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -100,12 +100,21 @@ class backup * @param string $web_user * @author Ramil Valitov */ - protected static function restoreFileOwnership($web_document_root, $web_user) + protected static function restoreFileOwnership($web_document_root, $web_user, $web_group) { global $app; + $blacklist = array('bin', 'dev', 'etc', 'home', 'lib', 'lib32', 'lib64', 'log', 'opt', 'proc', 'net', 'run', 'sbin', 'ssl', 'srv', 'sys', 'usr', 'var'); + + $find_excludes = '-not -path "." -and -not -path "./web/stats/*"'; + + foreach ( $blacklist as $dir ) { + $find_excludes .= ' -and -not -path "./'.$dir.'" -and -not -path "./'.$dir.'/*"'; + } + $app->log('Restoring permissions for ' . $web_document_root, LOGLEVEL_DEBUG); - $app->system->exec_safe('cd ? && find . -not -path "./web/stats/*" -and -not -path "./log" -and -not -path "./log/*" -and -not -path "./ssl" -and -not -path "./ssl/*" -and -not -path "." -exec chown ?:? {} \;', $web_document_root, $web_user, $web_user); + $app->system->exec_safe('cd ? && find . '.$find_excludes.' -exec chown ?:? {} \;', $web_document_root, $web_user, $web_group); + } /** @@ -290,7 +299,7 @@ class backup */ $success = ($retval == 0 || $retval == 50); if ($success) { - self::restoreFileOwnership($web_root, $web_user); + self::restoreFileOwnership($web_root, $web_user, $web_group); } break; case 'rar': -- GitLab From 0c490a4d8dcca6bd57baed7f0bcca23fc4f0e53b Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 10 Dec 2020 12:00:42 -0700 Subject: [PATCH 073/403] fix bad newlines in sieve Reject action --- interface/lib/plugins/mail_user_filter_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 4f24042b30..a6fe968e43 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -217,7 +217,7 @@ class mail_user_filter_plugin { } elseif ($page_form->dataRecord["action"] == 'stop') { $content .= " stop;\n"; } elseif ($page_form->dataRecord["action"] == 'reject') { - $content .= ' reject "'.$page_form->dataRecord["target"].'"; stop;\n\n'; + $content .= ' reject "'.$page_form->dataRecord["target"].'";' . "\n stop;\n"; } else { $content .= " discard;\n stop;\n"; } -- GitLab From 58f7c06c102303f700afaaa444cdf1312ba28cf1 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 11 Dec 2020 11:00:08 +0100 Subject: [PATCH 074/403] Apply 1 suggestion(s) to 1 file(s) --- 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 31fc679383..96ef499c67 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1496,7 +1496,7 @@ class installer_base { foreach ($options as $value) { $value = trim($value); if ($value == '') continue; - if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) { + if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) { continue; } $new_options[] = $value; -- GitLab From d903931fa7437ae5b9049d987a415e7716a385f3 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 11 Dec 2020 11:00:24 +0100 Subject: [PATCH 075/403] Apply 1 suggestion(s) to 1 file(s) --- 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 96ef499c67..7bb75d8c37 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1458,7 +1458,7 @@ class installer_base { } $config_dir = $conf['postfix']['config_dir']; - $quoted_config_dir = preg_quote($config_dir, '/'); + $quoted_config_dir = preg_quote($config_dir, '|'); $postfix_version = `postconf -d mail_version 2>/dev/null`; $postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version ); -- GitLab From c1535d34931d15f14a601f933c07eb6dbda970a2 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sat, 12 Dec 2020 17:16:16 +0100 Subject: [PATCH 076/403] Do OS-Update for Redhat family --- server/mods-available/remoteaction_core_module.inc.php | 5 +++-- server/plugins-available/software_update_plugin.inc.php | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index eea8fd6941..1c1e18d87e 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -181,8 +181,9 @@ class remoteaction_core_module { exec("glsa-check -f --nocolor affected"); } elseif(file_exists('/etc/redhat-release')) { exec("dnf -y update"); - } - else { + } elseif(file_exists('/etc/redhat-release')) { + exec("dnf -y update"); + } else { exec("apt-get update"); exec("apt-get -y upgrade"); } diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php index 2626d1e756..29393edf3c 100644 --- a/server/plugins-available/software_update_plugin.inc.php +++ b/server/plugins-available/software_update_plugin.inc.php @@ -289,6 +289,11 @@ class software_update_plugin { $app->log('Execeuted Debian / Ubuntu update', LOGLEVEL_DEBUG); } + //** Redhat, CentOS, Fedora + if(file_exists('/etc/redhat-release')) { + exec("dnf -y update"); + } + //** Gentoo Linux if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); -- GitLab From 8b949e731941bbf43fe516df6bba9e5dad77007b Mon Sep 17 00:00:00 2001 From: Sroka Date: Sat, 12 Dec 2020 18:53:30 +0100 Subject: [PATCH 077/403] Do OS-Update for Redhat family - add CentOS7 yum --- server/plugins-available/software_update_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php index 29393edf3c..211951685d 100644 --- a/server/plugins-available/software_update_plugin.inc.php +++ b/server/plugins-available/software_update_plugin.inc.php @@ -291,7 +291,7 @@ class software_update_plugin { //** Redhat, CentOS, Fedora if(file_exists('/etc/redhat-release')) { - exec("dnf -y update"); + exec("which dnf &> /dev/null && dnf -y update || yum -y update"); } //** Gentoo Linux -- GitLab From 8a5fbd6f12e8489542134124a5e4b5d0b67aac92 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sat, 12 Dec 2020 18:54:46 +0100 Subject: [PATCH 078/403] Do OS-Update for Redhat family - add CentOS7 yum --- server/mods-available/remoteaction_core_module.inc.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index 1c1e18d87e..56cc3745c2 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -180,9 +180,7 @@ class remoteaction_core_module { if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); } elseif(file_exists('/etc/redhat-release')) { - exec("dnf -y update"); - } elseif(file_exists('/etc/redhat-release')) { - exec("dnf -y update"); + exec("which dnf &> /dev/null && dnf -y update || yum -y update"); } else { exec("apt-get update"); exec("apt-get -y upgrade"); -- GitLab From df80789bdfce4e35e0bd5a902ccec35bbce931aa Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Thu, 10 Dec 2020 09:02:51 +0100 Subject: [PATCH 079/403] wrong main.cf after install (Fixes #5963) --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index f73aefe2c5..31fc679383 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1496,7 +1496,7 @@ class installer_base { foreach ($options as $value) { $value = trim($value); if ($value == '') continue; - if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) { + if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) { continue; } $new_options[] = $value; @@ -1504,7 +1504,7 @@ class installer_base { if ($configure_lmtp && $conf['mail']['content_filter'] === 'amavisd') { for ($i = 0; isset($new_options[$i]); $i++) { if ($new_options[$i] == 'reject_unlisted_recipient') { - array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf")); + array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf")); break; } } -- GitLab From 4e0e6059a70f60b5527f92f0e141b5a244e7b66f Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 11 Dec 2020 11:00:08 +0100 Subject: [PATCH 080/403] Apply 1 suggestion(s) to 1 file(s) --- 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 31fc679383..96ef499c67 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1496,7 +1496,7 @@ class installer_base { foreach ($options as $value) { $value = trim($value); if ($value == '') continue; - if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) { + if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) { continue; } $new_options[] = $value; -- GitLab From 2ae1dd2c33bbe22e84d3b202d32c83629686f3a0 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Fri, 11 Dec 2020 11:00:24 +0100 Subject: [PATCH 081/403] Apply 1 suggestion(s) to 1 file(s) --- 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 96ef499c67..7bb75d8c37 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1458,7 +1458,7 @@ class installer_base { } $config_dir = $conf['postfix']['config_dir']; - $quoted_config_dir = preg_quote($config_dir, '/'); + $quoted_config_dir = preg_quote($config_dir, '|'); $postfix_version = `postconf -d mail_version 2>/dev/null`; $postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version ); -- GitLab From c9f472bf4b8450b1a28349791cb986016e61de00 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 14 Dec 2020 16:44:19 -0700 Subject: [PATCH 082/403] sender_login_maps returns mail_user.cc --- install/tpl/mysql-virtual_sender_login_maps.cf.master | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master index d2a70015f5..7342cf87fa 100644 --- a/install/tpl/mysql-virtual_sender_login_maps.cf.master +++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master @@ -9,3 +9,6 @@ query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = UNION SELECT login FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id} AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX(email, '@', -1) AND active = 'y' AND server_id = {server_id}) + UNION + SELECT cc FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND disabledeliver = 'y' AND server_id = {server_id} + AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX(email, '@', -1) AND active = 'y' AND server_id = {server_id}) -- GitLab From 571ca4e3badaccf1a20558db46da7dce18b34032 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Wed, 16 Dec 2020 20:05:32 +0100 Subject: [PATCH 083/403] Allow subnet for xfer and also notify (#3122) --- interface/lib/classes/validate_dns.inc.php | 33 +++++++++++++++++----- interface/web/dns/form/dns_soa.tform.php | 13 +++------ interface/web/dns/lib/lang/ar_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/bg_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/el_dns_soa.lng | 2 +- interface/web/dns/lib/lang/en_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/fi_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/hu_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/id_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/ja_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/nl_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/pt_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/ro_dns_soa.lng | 4 +-- interface/web/dns/lib/lang/se_dns_soa.lng | 2 +- interface/web/dns/lib/lang/sk_dns_soa.lng | 4 +-- 15 files changed, 54 insertions(+), 40 deletions(-) diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php index 48759286a8..fd9faa593b 100644 --- a/interface/lib/classes/validate_dns.inc.php +++ b/interface/lib/classes/validate_dns.inc.php @@ -283,33 +283,52 @@ class validate_dns { } return $new_serial; } - - function validate_xfer($field_name, $field_value, $validator) { + + function validate_ip($field_name, $field_value, $validator) { global $app; - + $errorMessage = ''; - + if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n'; if($validator['allowempty'] == 'y' && $field_value == '') { //* Do nothing } elseif ($field_value == 'any') { //* Do nothing } else { - //* Check if its a IPv4 or IPv6 address + //* Check if its a IPv4 or IPv6 address/range if(isset($validator['separator']) && $validator['separator'] != '') { //* When the field may contain several IP addresses, split them by the char defined as separator $field_value_array = explode($validator['separator'], $field_value); } else { $field_value_array[] = $field_value; } + // Check if it's a valid input foreach($field_value_array as $field_value) { - $field_value = trim($field_value); + // Check if the IP is valid without range + $ip = strstr($field_value, '/', true) ?: $field_value; + if (strpos($field_value, '/') !== false) { + $subnet = strstr($field_value, '/', false); + $subnet = ltrim($subnet, "/"); + } if(function_exists('filter_var')) { - if(!filter_var($field_value, FILTER_VALIDATE_IP)) { + if(!filter_var($ip, FILTER_VALIDATE_IP)) { $errmsg = $validator['errmsg']; $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; } } else $this->errorMessage .= "function filter_var missing
\r\n"; + // Check if the range is valid + if ($subnet !== '') { + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + if ($subnet < 1 || $subnet > 128) { + $errmsg = $validator['errmsg']; + $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; + } + } + elseif ($subnet < 1 || $subnet > 32) { + $errmsg = $validator['errmsg']; + $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; + } + } } } return $errorMessage; diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index fea4bd1f98..fe71757788 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -244,18 +244,11 @@ $form["tabs"]['dns_soa'] = array ( 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'CUSTOM', 'class' => 'validate_dns', - 'function' => 'validate_xfer', + 'function' => 'validate_ip', 'allowempty' => 'y', 'separator' => ',', 'errmsg'=> 'xfer_error_regex'), ), - /* - 'validators' => array ( 0 => array ( 'type' => 'ISIP', - 'allowempty' => 'y', - 'separator' => ',', - 'errmsg'=> 'xfer_error_regex'), - ), - */ 'default' => '', 'value' => '', 'width' => '30', @@ -264,7 +257,9 @@ $form["tabs"]['dns_soa'] = array ( 'also_notify' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'ISIP', + 'validators' => array ( 0 => array ( 'type' => 'CUSTOM', + 'class' => 'validate_dns', + 'function' => 'validate_ip', 'allowempty' => 'y', 'separator' => ',', 'errmsg'=> 'also_notify_error_regex' diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng index 8c13c59e8e..0d90b7091b 100644 --- a/interface/web/dns/lib/lang/ar_dns_soa.lng +++ b/interface/web/dns/lib/lang/ar_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS has a invalid format.'; $wb['mbox_error_empty'] = 'Email is empty.'; $wb['mbox_error_regex'] = 'Email format invalid.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/bg_dns_soa.lng b/interface/web/dns/lib/lang/bg_dns_soa.lng index c43ad91196..4cd3c705ac 100644 --- a/interface/web/dns/lib/lang/bg_dns_soa.lng +++ b/interface/web/dns/lib/lang/bg_dns_soa.lng @@ -23,7 +23,7 @@ $wb['mbox_error_empty'] = 'Полето с емайл е празно.'; $wb['mbox_error_regex'] = 'Полето е емайл е в грешен формат.'; $wb['also_notify_txt'] = 'Also Notify'; $wb['update_acl_txt'] = 'Обнови ACL'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; $wb['eg_ns1_domain_tld'] = 'e.g. ns1.domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Минималния TTL е 60 секунди.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/el_dns_soa.lng b/interface/web/dns/lib/lang/el_dns_soa.lng index aae62bef76..a22c9de413 100644 --- a/interface/web/dns/lib/lang/el_dns_soa.lng +++ b/interface/web/dns/lib/lang/el_dns_soa.lng @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index 9651eb2d10..7f42b9f27a 100644 --- a/interface/web/dns/lib/lang/en_dns_soa.lng +++ b/interface/web/dns/lib/lang/en_dns_soa.lng @@ -25,8 +25,8 @@ $wb['ns_error_regex'] = 'NS has a invalid format.'; $wb['mbox_error_empty'] = 'Email is empty.'; $wb['mbox_error_regex'] = 'Email format invalid.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Also notify: Please use an IP address.'; -$wb['xfer_error_regex'] = 'Xfer: Please use one or more IP addresses, separated by , or use the keyword: any'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; diff --git a/interface/web/dns/lib/lang/fi_dns_soa.lng b/interface/web/dns/lib/lang/fi_dns_soa.lng index b34b2893fd..d90de950b0 100644 --- a/interface/web/dns/lib/lang/fi_dns_soa.lng +++ b/interface/web/dns/lib/lang/fi_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'Nimipalvelin-kenttä on tyhjä.'; $wb['mbox_error_empty'] = 'Sähköpostiosoite on tyhjä.'; $wb['mbox_error_regex'] = 'Sähköpostiosoite on vääränlainen'; $wb['also_notify_txt'] = 'Läheta ilmoitus'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Päivitä ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng index 445de86d69..38d3272f04 100644 --- a/interface/web/dns/lib/lang/hu_dns_soa.lng +++ b/interface/web/dns/lib/lang/hu_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS has a invalid format.'; $wb['mbox_error_empty'] = 'Email is empty.'; $wb['mbox_error_regex'] = 'Email format invalid.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng index c9a43ad057..2c1842e6f2 100644 --- a/interface/web/dns/lib/lang/id_dns_soa.lng +++ b/interface/web/dns/lib/lang/id_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'Format NS salah.'; $wb['mbox_error_empty'] = 'Email kosong.'; $wb['mbox_error_regex'] = 'Format Email tidak valid.'; $wb['also_notify_txt'] = 'Notifikasi Juga'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Mutakhirkan ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng index 7ab5799750..a2e5e20c71 100644 --- a/interface/web/dns/lib/lang/ja_dns_soa.lng +++ b/interface/web/dns/lib/lang/ja_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS が不正な文字を含んでいます。'; $wb['mbox_error_empty'] = 'メールアドレスを指定してください'; $wb['mbox_error_regex'] = 'メールアドレスの形式が不正です。'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng index 1f875df3c9..2b2b734e3b 100644 --- a/interface/web/dns/lib/lang/nl_dns_soa.lng +++ b/interface/web/dns/lib/lang/nl_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS heeft een ongeldig format.'; $wb['mbox_error_empty'] = 'E-mail is niet ingvuld.'; $wb['mbox_error_regex'] = 'E-mail formaat ongeldig.'; $wb['also_notify_txt'] = 'ook notifcatie'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng index 7b6ac864a1..7d4c692855 100644 --- a/interface/web/dns/lib/lang/pt_dns_soa.lng +++ b/interface/web/dns/lib/lang/pt_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS tem um formato inválido.'; $wb['mbox_error_empty'] = 'Correio está em branco.'; $wb['mbox_error_regex'] = 'Correio com formato inválido.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Actualizar ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng index 9ae957f240..f1125b6981 100644 --- a/interface/web/dns/lib/lang/ro_dns_soa.lng +++ b/interface/web/dns/lib/lang/ro_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS are un format invalid'; $wb['mbox_error_empty'] = 'Email-ul este gol'; $wb['mbox_error_regex'] = 'Format email invalid.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng index 8e380f85a3..a27181699d 100644 --- a/interface/web/dns/lib/lang/se_dns_soa.lng +++ b/interface/web/dns/lib/lang/se_dns_soa.lng @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng index c96399cc4e..a03b15d477 100644 --- a/interface/web/dns/lib/lang/sk_dns_soa.lng +++ b/interface/web/dns/lib/lang/sk_dns_soa.lng @@ -22,7 +22,7 @@ $wb['ns_error_regex'] = 'NS má neplatný formát.'; $wb['mbox_error_empty'] = 'Email je prázdny.'; $wb['mbox_error_regex'] = 'Email má neplatný formát.'; $wb['also_notify_txt'] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['update_acl_txt'] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; @@ -34,7 +34,7 @@ $wb['retry_range_error'] = 'Min. Retry time is 60 seconds.'; $wb['expire_range_error'] = 'Min. Expire time is 60 seconds.'; $wb['minimum_range_error'] = 'Min. Minimum time is 60 seconds.'; $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; -$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Zone transfers: Please use a valid IP range, one or more IP addresses separated by a comma or use the keyword: any'; $wb['dnssec_info_txt'] = 'DNSSEC DS-Data for registry'; $wb['dnssec_wanted_txt'] = 'Sign zone (DNSSEC)'; $wb['dnssec_wanted_info'] = 'When disabling DNSSEC keys are not going to be deleted if DNSSEC was enabled before and keys already have been generated but the zone will no longer be delivered in signed format afterwards. If you use PowerDNS, keys WILL be deleted!'; -- GitLab From cc4076bcad9298d5f20815ea38d0a7d4c2dfad07 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 17 Dec 2020 01:01:49 +0100 Subject: [PATCH 084/403] Update sites_web_domain_add.php --- remoting_client/examples/sites_web_domain_add.php | 1 + 1 file changed, 1 insertion(+) diff --git a/remoting_client/examples/sites_web_domain_add.php b/remoting_client/examples/sites_web_domain_add.php index 0ee462ab7a..84c5c79e13 100644 --- a/remoting_client/examples/sites_web_domain_add.php +++ b/remoting_client/examples/sites_web_domain_add.php @@ -53,6 +53,7 @@ try { 'allow_override' => 'All', 'apache_directives' => '', 'php_open_basedir' => '/', + 'pm' => 'ondemand', 'pm_max_requests' => 0, 'pm_process_idle_timeout' => 10, 'custom_php_ini' => '', -- GitLab From 3718e6ba5a10dcdb2fad2e4bc0e6860b498b49f2 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 17 Dec 2020 11:18:32 +0100 Subject: [PATCH 085/403] Fix using webroot map on certbot --- server/lib/classes/letsencrypt.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 3923954e10..a118d55769 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -162,7 +162,7 @@ class letsencrypt { $webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme"; } - $cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $cmd --webroot-path /usr/local/ispconfig/interface/acme"; + $cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $webroot_args"; return $cmd; } -- GitLab From 62b0c1f507f67bf908d465c66590a73f23f550e3 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 17 Dec 2020 12:55:25 -0700 Subject: [PATCH 086/403] manual database backups scheduled once per server --- interface/lib/classes/plugin_backuplist.inc.php | 2 +- interface/web/sites/templates/web_backup_list.htm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php index 81fe1daae7..4774eb6c49 100644 --- a/interface/lib/classes/plugin_backuplist.inc.php +++ b/interface/lib/classes/plugin_backuplist.inc.php @@ -58,7 +58,7 @@ class plugin_backuplist extends plugin_base { if ($tmp['number'] == 0) { if($action_type === 'backup_database') { // get all server ids of databases for this domain - $sql = 'SELECT `server_id` FROM `web_database` WHERE `parent_domain_id` = ?'; + $sql = 'SELECT distinct(`server_id`) FROM `web_database` WHERE `parent_domain_id` = ?'; $result = $app->db->query($sql, $domain_id); while(($cur = $result->get())) { $server_id = $cur['server_id']; diff --git a/interface/web/sites/templates/web_backup_list.htm b/interface/web/sites/templates/web_backup_list.htm index 47c08d4413..f2baa48f91 100644 --- a/interface/web/sites/templates/web_backup_list.htm +++ b/interface/web/sites/templates/web_backup_list.htm @@ -1,6 +1,6 @@

- - + +

-- GitLab From de1ac5656d0a68f4d2be92539d11ad2e8bc33cde Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 31 Oct 2020 21:17:08 +0100 Subject: [PATCH 087/403] Add extra links to datalog --- interface/web/monitor/dataloghistory_view.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php index b86334b0af..6a268c4fa7 100644 --- a/interface/web/monitor/dataloghistory_view.php +++ b/interface/web/monitor/dataloghistory_view.php @@ -79,6 +79,15 @@ if (!empty($value)) { case 'web_database_user': $file = 'sites/database_user_edit.php'; break; + case 'ftp_user': + $file = 'sites/ftp_user_edit.php'; + break; + case 'shell_user': + $file = 'sites/shell_user_edit.php'; + break; + case 'dns_soa': + $file = 'dns/dns_soa_edit.php'; + break; // TODO Add a link per content type default: -- GitLab From 44ab3adcd1f6f07b47e299d40c4b1d96e1c8fc6e Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 17 Dec 2020 22:17:18 +0100 Subject: [PATCH 088/403] Correct mail_forwarding sub type links --- interface/web/monitor/dataloghistory_view.php | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/interface/web/monitor/dataloghistory_view.php b/interface/web/monitor/dataloghistory_view.php index 6a268c4fa7..433f1e0ee9 100644 --- a/interface/web/monitor/dataloghistory_view.php +++ b/interface/web/monitor/dataloghistory_view.php @@ -52,6 +52,10 @@ $record = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE datalog_id = $out['id'] = $id; $out['username'] = $record['user']; +if(!$data = unserialize(stripslashes($record['data']))) { + $data = unserialize($record['data']); +} + $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']); $out['table'] = $record['dbtable']; list($key, $value) = explode(':', $record['dbidx']); @@ -62,7 +66,20 @@ if (!empty($value)) { } else { switch ($out['table']) { case 'mail_forwarding': - $file = 'mail/mail_forward_edit.php'; + switch ($data['new']['type']) { + case 'alias': + $file = 'mail/mail_alias_edit.php'; + break; + case 'aliasdomain': + $file = 'mail/mail_aliasdomain_edit.php'; + break; + case 'forward': + $file = 'mail/mail_forward_edit.php'; + break; + case 'catchall': + $file = 'mail/mail_domain_catchall_edit.php'; + break; + } break; case 'mail_user': $file = 'mail/mail_user_edit.php'; @@ -107,10 +124,6 @@ $out['action_name'] = $app->lng($record['action']); $out['session_id'] = $record['session_id']; -if(!$data = unserialize(stripslashes($record['data']))) { - $data = unserialize($record['data']); -} - switch ($record['action']) { case 'i': $inserts = array(); -- GitLab From 8be19f199c450df69a127c17995b98f71cf759e7 Mon Sep 17 00:00:00 2001 From: Sroka Date: Fri, 18 Dec 2020 19:48:11 +0100 Subject: [PATCH 089/403] fix tls1.3 in nginx --- server/conf/nginx_vhost.conf.master | 4 +--- server/plugins-available/nginx_plugin.inc.php | 12 +++--------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 5bd90fd822..f2b3e0f833 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -19,11 +19,9 @@ server {
- - + ssl_protocols TLSv1.3 TLSv1.2; - ssl_protocols TLSv1.2; # ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 9eb2e1ef04..ddaba273e5 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1631,16 +1631,10 @@ class nginx_plugin { // set logging variable $vhost_data['logging'] = $web_config['logging']; - // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time. - $output = $app->system->exec_safe('nginx -V 2>&1'); - - if(preg_match('/built with OpenSSL\s*(\d+)(\.(\d+)(\.(\d+))*)?(\D|$)/i', $output[0], $matches)) { - $nginx_openssl_ver = $matches[1] . (isset($matches[3]) ? '.' . $matches[3] : '') . (isset($matches[5]) ? '.' . $matches[5] : ''); - } - - if((version_compare($app->system->getnginxversion(true), '1.13.0', '>=') && version_compare($nginx_openssl_ver, '1.1.1', '>='))) { + // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time. + if((version_compare($app->system->getnginxversion(true), '1.13.0', '>=') && version_compare($app->system->getopensslversion(true), '1.1.1', '>='))) { $app->log('Enable TLS 1.3 for: '.$domain, LOGLEVEL_DEBUG); - $vhost_data['tls1.3_supported'] = 'y'; + $vhost_data['tls13_supported'] = "y"; } $tpl->setVar($vhost_data); -- GitLab From efd4f18ac5f83e2929f93daa6437c5f2575e2cfe Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 18 Dec 2020 21:23:32 +0100 Subject: [PATCH 090/403] Apply 1 suggestion(s) to 1 file(s) --- interface/lib/classes/plugin_backuplist.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php index 4774eb6c49..0b98dc9ec0 100644 --- a/interface/lib/classes/plugin_backuplist.inc.php +++ b/interface/lib/classes/plugin_backuplist.inc.php @@ -58,7 +58,7 @@ class plugin_backuplist extends plugin_base { if ($tmp['number'] == 0) { if($action_type === 'backup_database') { // get all server ids of databases for this domain - $sql = 'SELECT distinct(`server_id`) FROM `web_database` WHERE `parent_domain_id` = ?'; + $sql = 'SELECT DISTINCT `server_id` FROM `web_database` WHERE `parent_domain_id` = ?'; $result = $app->db->query($sql, $domain_id); while(($cur = $result->get())) { $server_id = $cur['server_id']; -- GitLab From e0453b974d712e3b38de4ee5b0ee2e4feb0fcc0b Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 20 Dec 2020 15:37:14 +0100 Subject: [PATCH 091/403] fix tls1.3 in nginx --- server/plugins-available/nginx_plugin.inc.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index ddaba273e5..5213063a84 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1631,8 +1631,11 @@ class nginx_plugin { // set logging variable $vhost_data['logging'] = $web_config['logging']; - // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time. - if((version_compare($app->system->getnginxversion(true), '1.13.0', '>=') && version_compare($app->system->getopensslversion(true), '1.1.1', '>='))) { + // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time and when it was linked against OpenSSL(>=1.1.1) at runtime. + $nginx_openssl_ver = $app->system->exec_safe('nginx -V 2>&1 | grep OpenSSL | sed \'s/.*built\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); + if(version_compare($app->system->getnginxversion(true), '1.13.0', '>=') + && version_compare($nginx_openssl_ver, '1.1.1', '>=') + && version_compare($app->system->getopensslversion(true), '1.1.1', '>=')) { $app->log('Enable TLS 1.3 for: '.$domain, LOGLEVEL_DEBUG); $vhost_data['tls13_supported'] = "y"; } -- GitLab From f77cf03c6be318f93517fb2f7abc6bd1579d54a6 Mon Sep 17 00:00:00 2001 From: Sroka Date: Sun, 20 Dec 2020 16:29:29 +0100 Subject: [PATCH 092/403] fix tls1.3 in nginx --- server/plugins-available/nginx_plugin.inc.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 5213063a84..7d95671b70 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1632,10 +1632,11 @@ class nginx_plugin { $vhost_data['logging'] = $web_config['logging']; // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time and when it was linked against OpenSSL(>=1.1.1) at runtime. - $nginx_openssl_ver = $app->system->exec_safe('nginx -V 2>&1 | grep OpenSSL | sed \'s/.*built\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); + $nginx_openssl_build_ver = $app->system->exec_safe('nginx -V 2>&1 | grep OpenSSL | sed \'s/.*built\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); + $nginx_openssl_running_ver = $app->system->exec_safe('nginx -V 2>&1 | grep \'running with\' | sed \'s/.*running\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); if(version_compare($app->system->getnginxversion(true), '1.13.0', '>=') - && version_compare($nginx_openssl_ver, '1.1.1', '>=') - && version_compare($app->system->getopensslversion(true), '1.1.1', '>=')) { + && version_compare($nginx_openssl_build_ver, '1.1.1', '>=') + && (empty($nginx_openssl_running_ver) || version_compare($nginx_openssl_running_ver, '1.1.1', '>='))) { $app->log('Enable TLS 1.3 for: '.$domain, LOGLEVEL_DEBUG); $vhost_data['tls13_supported'] = "y"; } -- GitLab From 1e01e0dd39a8b7b72b80d4c6543ed09523b86828 Mon Sep 17 00:00:00 2001 From: Sroka Date: Mon, 21 Dec 2020 11:10:36 +0100 Subject: [PATCH 093/403] fix tls1.3 in nginx - more precise selector --- server/plugins-available/nginx_plugin.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 7d95671b70..ada8e71c3c 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1632,8 +1632,8 @@ class nginx_plugin { $vhost_data['logging'] = $web_config['logging']; // Provide TLS 1.3 support if Nginx version is >= 1.13.0 and when it was linked against OpenSSL(>=1.1.1) at build time and when it was linked against OpenSSL(>=1.1.1) at runtime. - $nginx_openssl_build_ver = $app->system->exec_safe('nginx -V 2>&1 | grep OpenSSL | sed \'s/.*built\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); - $nginx_openssl_running_ver = $app->system->exec_safe('nginx -V 2>&1 | grep \'running with\' | sed \'s/.*running\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); + $nginx_openssl_build_ver = $app->system->exec_safe('nginx -V 2>&1 | grep \'built with OpenSSL\' | sed \'s/.*built\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); + $nginx_openssl_running_ver = $app->system->exec_safe('nginx -V 2>&1 | grep \'running with OpenSSL\' | sed \'s/.*running\([a-zA-Z ]*\)OpenSSL \([0-9.]*\).*/\2/\''); if(version_compare($app->system->getnginxversion(true), '1.13.0', '>=') && version_compare($nginx_openssl_build_ver, '1.1.1', '>=') && (empty($nginx_openssl_running_ver) || version_compare($nginx_openssl_running_ver, '1.1.1', '>='))) { -- GitLab From 5bde2b9caf8cc9109aedf8900316cc618dae6eb7 Mon Sep 17 00:00:00 2001 From: Sroka Date: Mon, 21 Dec 2020 17:50:13 +0100 Subject: [PATCH 094/403] Fix php_fpm_socket_dir --- server/plugins-available/nginx_plugin.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index ada8e71c3c..73e788ed43 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1094,7 +1094,7 @@ class nginx_plugin { $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; - $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; + $custom_php_fpm_socket_dir = $tmp_php['php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } } @@ -1106,7 +1106,7 @@ class nginx_plugin { $custom_php_fpm_ini_dir = $tmp_php['php_fpm_ini_dir']; $custom_php_fpm_init_script = $tmp_php['php_fpm_init_script']; $custom_php_fpm_pool_dir = $tmp_php['php_fpm_pool_dir']; - $custom_php_fpm_socket_dir = $tmp_php['custom_php_fpm_socket_dir']; + $custom_php_fpm_socket_dir = $tmp_php['php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } } -- GitLab From 09e1cab0fe20b901987c7000ab3a69aa94883841 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 21 Dec 2020 18:50:22 +0100 Subject: [PATCH 095/403] Update 500-clean_mailboxes.inc.php --- server/lib/classes/cron.d/500-clean_mailboxes.inc.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php index 7e8c82da64..711c735db1 100755 --- a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php +++ b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php @@ -53,10 +53,11 @@ class cronjob_clean_mailboxes extends cronjob { public function onRunJob() { global $app, $conf; - $trash_names=array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'INBOX.Trash', 'INBOX.Papierkorb', 'INBOX.Deleted Messages'); + $trash_names=array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'INBOX.Trash', 'INBOX.Papierkorb', 'INBOX.Deleted Messages', 'Corbeille'); $junk_names=array('Junk', 'Junk Email', 'SPAM', 'INBOX.SPAM'); - $purge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore '; + $expunge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore '; + $purge_cmd = 'doveadm purge -u ?'; $recalc_cmd = 'doveadm quota recalc -u ?'; $server_id = intval($conf['server_id']); @@ -67,17 +68,18 @@ class cronjob_clean_mailboxes extends cronjob { if($email['purge_trash_days'] > 0) { foreach($trash_names as $trash) { if(is_dir($email['maildir'].'/Maildir/.'.$trash)) { - $app->system->exec_safe($purge_cmd.intval($email['purge_trash_days']).'d', $email['email'], $trash); + $app->system->exec_safe($expunge_cmd.intval($email['purge_trash_days']).'d', $email['email'], $trash); } } } if($email['purge_junk_days'] > 0) { foreach($junk_names as $junk) { if(is_dir($email['maildir'].'/Maildir/.'.$junk)) { - $app->system->exec_safe($purge_cmd.intval($email['purge_junk_days']).'d', $email['email'], $junk); + $app->system->exec_safe($expunge_cmd.intval($email['purge_junk_days']).'d', $email['email'], $junk); } } } + $app->system->exec_safe($purge_cmd, $email['email']); $app->system->exec_safe($recalc_cmd, $email['email']); } } -- GitLab From 5d0e31b7571d978590333d3579a8d5e971c6c67e Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Tue, 22 Dec 2020 13:12:00 +0100 Subject: [PATCH 096/403] Apply suggestion from !1358 --- interface/lib/classes/validate_dns.inc.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php index fd9faa593b..345396fbba 100644 --- a/interface/lib/classes/validate_dns.inc.php +++ b/interface/lib/classes/validate_dns.inc.php @@ -305,10 +305,12 @@ class validate_dns { // Check if it's a valid input foreach($field_value_array as $field_value) { // Check if the IP is valid without range - $ip = strstr($field_value, '/', true) ?: $field_value; - if (strpos($field_value, '/') !== false) { - $subnet = strstr($field_value, '/', false); - $subnet = ltrim($subnet, "/"); + $subnet = ''; + $ip = $field_value; + if(strpos($ip, '/') !== false) { + list($ip, $subnet) = explode('/', $ip, 2); + $ip = trim($ip); + $subnet = intval($subnet); } if(function_exists('filter_var')) { if(!filter_var($ip, FILTER_VALIDATE_IP)) { -- GitLab From 0a423117bc9ed66a4bb290eb62688173523c54ec Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 22 Dec 2020 15:05:55 +0100 Subject: [PATCH 097/403] Apply 1 suggestion(s) to 1 file(s) --- interface/lib/classes/validate_dns.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php index 345396fbba..c4b94b5f77 100644 --- a/interface/lib/classes/validate_dns.inc.php +++ b/interface/lib/classes/validate_dns.inc.php @@ -306,7 +306,7 @@ class validate_dns { foreach($field_value_array as $field_value) { // Check if the IP is valid without range $subnet = ''; - $ip = $field_value; + $ip = trim($field_value); if(strpos($ip, '/') !== false) { list($ip, $subnet) = explode('/', $ip, 2); $ip = trim($ip); -- GitLab From 062368aef4ca6b2644656f9b7c1dd0fd15271a1b Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 22 Dec 2020 11:28:36 -0700 Subject: [PATCH 098/403] don't allow empty web_folder --- interface/web/sites/form/web_vhost_domain.tform.php | 12 +++++++----- interface/web/sites/lib/lang/ar_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/ar_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/bg_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/bg_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/br_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/br_web_vhost_subdomain.lng | 1 + interface/web/sites/lib/lang/ca_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/ca_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/cz_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/cz_web_vhost_subdomain.lng | 1 + interface/web/sites/lib/lang/de_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/de_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/dk_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/dk_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/el_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/el_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/en_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/en_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/es_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/es_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/fi_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/fi_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/fr_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/fr_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/hr_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/hr_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/hu_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/hu_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/id_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/id_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/it_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/it_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/ja_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/ja_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/nl_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/nl_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/pl_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/pl_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/pt_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/pt_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/ro_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/ro_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/ru_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/ru_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/se_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/se_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/sk_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/sk_web_vhost_subdomain.lng | 2 +- interface/web/sites/lib/lang/tr_web_vhost_domain.lng | 1 + .../web/sites/lib/lang/tr_web_vhost_subdomain.lng | 2 +- 51 files changed, 57 insertions(+), 28 deletions(-) diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php index 85387f6dab..5c26f8254d 100644 --- a/interface/web/sites/form/web_vhost_domain.tform.php +++ b/interface/web/sites/form/web_vhost_domain.tform.php @@ -367,12 +367,14 @@ if($vhostdomain_type == 'domain') { ); $form['tabs']['domain']['fields']['web_folder'] = array ( 'datatype' => 'VARCHAR', - 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '@^((?!(.*\.\.)|(.*\./)|(.*//))[^/][\w/_\.\-]{1,100})?$@', - 'errmsg'=> 'web_folder_error_regex'), + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'web_folder_error_empty'), + 1 => array ( 'type' => 'REGEX', + 'regex' => '@^((?!(.*\.\.)|(.*\./)|(.*//))[^/][\w/_\.\-]{1,100})?$@', + 'errmsg'=> 'web_folder_error_regex'), ), - 'filters' => array( 0 => array( 'event' => 'SAVE', - 'type' => 'TRIM'), + 'filters' => array( 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), ), 'formtype' => 'TEXT', 'default' => '', diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng index 6551a1ee65..ab8c2b2520 100644 --- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng @@ -114,6 +114,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/ar_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng index 8fbb96bd50..14b4a4b0b1 100644 --- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['password_match_txt'] = 'The passwords do match.'; $wb['ssl_key_txt'] = 'SSL Key'; $wb['perl_txt'] = 'Perl'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng index e9795a9942..5bc8b5db7f 100644 --- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng @@ -15,6 +15,7 @@ $wb['ssl_domain_txt'] = 'Domínio SSL'; $wb['server_id_txt'] = 'Servidor'; $wb['domain_txt'] = 'Domínio'; $wb['web_folder_error_regex'] = 'Pasta web é inválida. Por favor não utilize o caractere (barra).'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Tipo'; $wb['parent_domain_id_txt'] = 'Site Pai'; $wb['redirect_type_txt'] = 'Tipo de redirecionamento'; diff --git a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng index 3f1dc2d080..76df925aa8 100644 --- a/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/br_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Servidor'; $wb['domain_txt'] = 'Domínio'; $wb['host_txt'] = 'Nome do host'; $wb['web_folder_error_regex'] = 'Pasta Web é inválida. Por favor não utilize o caractere (barra).'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Tipo'; $wb['redirect_type_txt'] = 'Tipo de redirecionamento'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng index 4607132a76..050338e77b 100644 --- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng @@ -15,6 +15,7 @@ $wb['ssl_domain_txt'] = 'SSL Domain'; $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['parent_domain_id_txt'] = 'Parent Website'; $wb['redirect_type_txt'] = 'Redirect Type'; diff --git a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng index c5ef06416a..2c9fbc7e6c 100644 --- a/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/ca_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng index 021176aa13..c46d90c12b 100644 --- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng @@ -20,6 +20,7 @@ $wb['domain_txt'] = 'Doména'; $wb['type_txt'] = 'Verze'; $wb['host_txt'] = 'Název hostitele'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['redirect_type_txt'] = 'Typ přesměrování'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; $wb['l_redirect_txt'] = 'L (Last redirect rule)'; diff --git a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng index 705a49f240..fac991966e 100644 --- a/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Doména'; $wb['host_txt'] = 'Název hostitele'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Verze'; $wb['redirect_type_txt'] = 'Typ přesměrování'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng index 52c602f19a..e99e1eebcb 100644 --- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng @@ -14,6 +14,7 @@ $wb['domain_txt'] = 'Domain'; $wb['type_txt'] = 'Typ'; $wb['parent_domain_id_txt'] = 'Zugehörige Webseite'; $wb['web_folder_error_regex'] = 'Ungültige Verzeichnisangabe, bitte keinen / eingeben.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['redirect_type_txt'] = 'Weiterleitungstyp'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; $wb['l_redirect_txt'] = 'L (Last redirect rule)'; diff --git a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng index 5941e822e4..ac615eb4ad 100644 --- a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng @@ -18,6 +18,7 @@ $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Host'; $wb['type_txt'] = 'Typ'; $wb['web_folder_error_regex'] = 'Ungültige Ordnerangabe, bitte keinen / eingeben.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['redirect_type_txt'] = 'Redirect-Typ'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; $wb['l_redirect_txt'] = 'L (Last redirect rule)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng index ed4bf4d2dc..4a11c506b7 100644 --- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng @@ -15,6 +15,7 @@ $wb['ssl_domain_txt'] = 'SSL Domain'; $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['parent_domain_id_txt'] = 'Parent Website'; $wb['redirect_type_txt'] = 'Redirect Type'; diff --git a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng index 48e1542a6e..9563199028 100644 --- a/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/dk_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domæne'; $wb['host_txt'] = 'Værtsnavn'; $wb['web_folder_error_regex'] = 'Ugyldigt folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Omdiriger Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng index 9f1e5613c4..7982767973 100644 --- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng @@ -114,6 +114,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/el_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng index 98bebee634..9220220ec4 100644 --- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng @@ -15,6 +15,7 @@ $wb['ssl_domain_txt'] = 'SSL Domain'; $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['parent_domain_id_txt'] = 'Parent Website'; $wb['redirect_type_txt'] = 'Redirect Type'; diff --git a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng index 512a8169fc..771ec5f342 100644 --- a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['parent_domain_id_txt'] = 'Parent Website'; $wb['redirect_type_txt'] = 'Redirect Type'; @@ -133,4 +134,3 @@ $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.'; -?> \ No newline at end of file diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng index 08520c668d..587c3b9b47 100644 --- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng @@ -96,6 +96,7 @@ $wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers debe ser $wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers debe ser un valor entero positivo.'; $wb['ssl_key_txt'] = 'Clave SSL'; $wb['web_folder_error_regex'] = 'La carpeta introducida no es válida. Por favor no introduzcas una barra.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'Ya hay un subdominio con estas configuraciones.'; $wb['perl_txt'] = 'Perl'; $wb['hd_quota_error_regex'] = 'Cuota de disco no es válida.'; diff --git a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/es_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng index 6d68bd9d55..ceda787e69 100644 --- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng index 6f6ee29386..4e74ee0eb9 100644 --- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Vérification du mot de passe'; $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.'; $wb['password_match_txt'] = 'Les mots de passe correspondent.'; $wb['web_folder_error_regex'] = 'Le dossier saisi est invalide. Ne saisissez pas de ./ (slash).'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'Un sous-domaine avec cette configuration existe déjà.'; $wb['available_php_directive_snippets_txt'] = 'Directives PHP Snippets disponibles :'; $wb['available_apache_directive_snippets_txt'] = 'Directives Apache Snippets disponibles :'; diff --git a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng index 7b8245d717..b3c8601f79 100644 --- a/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng index 0384b1111d..ec1d62d2e2 100644 --- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Ponovi šifru'; $wb['password_mismatch_txt'] = 'Šifre nisu identične.'; $wb['password_match_txt'] = 'Šifre su identične.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'Već postoji poddomena sa ovim postavkama.'; $wb['available_php_directive_snippets_txt'] = 'Dostupne PHP direktive:'; $wb['available_apache_directive_snippets_txt'] = 'Dostupne Apache direktive:'; diff --git a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng index c3167cc892..6783f909f4 100644 --- a/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domena'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Neispravan direktorij. Nemojte koristiti slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Vrsta'; $wb['redirect_type_txt'] = 'Vrsta redirekcije'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng index 89b1c06418..c5ff589363 100644 --- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng index 7c874a7a6b..b085c246fd 100644 --- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/id_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng index 887ad9cde7..22fce96dab 100644 --- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng @@ -114,6 +114,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng index f391fc1473..5366e37baf 100644 --- a/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/it_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Dominio'; $wb['host_txt'] = 'Nome Host'; $wb['web_folder_error_regex'] = 'Cartella inserita non valida. Per favore non inserire uno slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Tipo'; $wb['redirect_type_txt'] = 'Tipo reinderizzamento'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng index f29aae19c6..0ffa0a9c23 100644 --- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> 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 b179780b89..0cf3cb726c 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng @@ -113,6 +113,7 @@ $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['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng index a69a1e8a24..3e383505bc 100644 --- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng @@ -99,6 +99,7 @@ $wb['hd_quota_error_regex'] = 'Limit dysku jest nieprawidłowy.'; $wb['traffic_quota_error_regex'] = 'Limit transferu jest nieprawidłowy.'; $wb['ssl_key_txt'] = 'Klucz SSL'; $wb['web_folder_error_regex'] = 'Wprowadzono nieprawidłowy katalog. Proszę nie wpisywać znaku slash [ / ]'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'Istnieje już subdomena z tymi ustawieniami.'; $wb['perl_txt'] = 'Perl'; $wb['server_php_id_txt'] = 'Wersja PHP'; diff --git a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng index 300ce3080a..3350cce054 100644 --- a/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Serwer'; $wb['domain_txt'] = 'Domena'; $wb['host_txt'] = 'Nazwa hosta'; $wb['web_folder_error_regex'] = 'Wpisano nieprawidłowy folder. Proszę nie dopisywać znaku slash: / '; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Rodzaj'; $wb['redirect_type_txt'] = 'Rodzaj przekierowania'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng index 16297d56fe..fe5b29be92 100644 --- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng index 085305658c..218e104833 100644 --- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng @@ -114,6 +114,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng index 4133237bb7..11e947b412 100644 --- a/interface/web/sites/lib/lang/ru_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ru_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Повторить пароль'; $wb['password_mismatch_txt'] = 'Пароли не совпадают.'; $wb['password_match_txt'] = 'Эти пароли совпадают.'; $wb['web_folder_error_regex'] = 'Неверный ввод папки. Пожалуйста, не вводите слеш.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'Поддомен с такими настройками уже существует.'; $wb['available_php_directive_snippets_txt'] = 'Доступные заготовки директив PHP:'; $wb['available_apache_directive_snippets_txt'] = 'Доступные заготовки директив Apache:'; diff --git a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng index d459fcd076..77af212253 100644 --- a/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Сервер'; $wb['domain_txt'] = 'Домен'; $wb['host_txt'] = 'Хост'; $wb['web_folder_error_regex'] = 'Неверный ввод папки. Пожалуйста, не вводите слеш.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Тип'; $wb['redirect_type_txt'] = 'Тип редиректа'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $wb['http_port_txt'] = 'Порт HTTP'; $wb['https_port_txt'] = 'Порт HTTPS'; $wb['http_port_error_regex'] = 'Некорректный порт HTTP.'; $wb['https_port_error_regex'] = 'Некорректный порт HTTPS.'; -?> diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng index a6bdb9e1b5..5edba1fe9e 100644 --- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng @@ -114,6 +114,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng index 49e5f6c833..e7d6b1f45b 100644 --- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng @@ -113,6 +113,7 @@ $wb['repeat_password_txt'] = 'Repeat Password'; $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['domain_error_autosub'] = 'There is already a subdomain with these settings.'; $wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:'; $wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:'; diff --git a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng index 13e1558aa6..06f15bfe38 100644 --- a/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Server'; $wb['domain_txt'] = 'Domain'; $wb['host_txt'] = 'Hostname'; $wb['web_folder_error_regex'] = 'Invalid folder entered. Please do not enter a slash.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Type'; $wb['redirect_type_txt'] = 'Redirect Type'; $wb['r_redirect_txt'] = 'R (Temporary redirect)'; @@ -132,4 +133,3 @@ $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.'; -?> diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng index 9f7ef413b1..1228e81c7d 100644 --- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng @@ -15,6 +15,7 @@ $wb['ssl_domain_txt'] = 'SSL Etki Alanı'; $wb['server_id_txt'] = 'Sunucu'; $wb['domain_txt'] = 'Etki Alanı'; $wb['web_folder_error_regex'] = 'Yazdığınız klasör geçersiz. Lütfen / karakterini yazmayın.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Tür'; $wb['parent_domain_id_txt'] = 'Üst Web Sitesi'; $wb['redirect_type_txt'] = 'Yönlendirme Türü'; diff --git a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng index 8fb06e2802..66677d8b56 100644 --- a/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng +++ b/interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng @@ -20,6 +20,7 @@ $wb['server_id_txt'] = 'Sunucu'; $wb['domain_txt'] = 'Etki Alanı'; $wb['host_txt'] = 'Sunucu Adı'; $wb['web_folder_error_regex'] = 'Yazılan klasör geçersiz. Lütfen / karakteri kullanmadan yazın.'; +$wb['web_folder_error_empty'] = 'Web folder cannot be empty. Use /web/ to make the same as the Parent Website'; $wb['type_txt'] = 'Tür'; $wb['parent_domain_id_txt'] = 'Üst Web Sitesi'; $wb['redirect_type_txt'] = 'Yönlendirme Türü'; @@ -133,4 +134,3 @@ $wb['http_port_txt'] = 'HTTP Kapı Numarası'; $wb['https_port_txt'] = 'HTTPS Kapı Numarası'; $wb['http_port_error_regex'] = 'HTTP kapı numarası geçersiz.'; $wb['https_port_error_regex'] = 'HTTPS kapı numarası geçersiz.'; -?> -- GitLab From f064194e003f579933193424a5f66fc163202f60 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Tue, 22 Dec 2020 22:40:08 +0100 Subject: [PATCH 099/403] Add numerical check for subnet (#5975) --- interface/lib/classes/validate_dns.inc.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php index c4b94b5f77..15d670d84a 100644 --- a/interface/lib/classes/validate_dns.inc.php +++ b/interface/lib/classes/validate_dns.inc.php @@ -310,7 +310,6 @@ class validate_dns { if(strpos($ip, '/') !== false) { list($ip, $subnet) = explode('/', $ip, 2); $ip = trim($ip); - $subnet = intval($subnet); } if(function_exists('filter_var')) { if(!filter_var($ip, FILTER_VALIDATE_IP)) { @@ -320,7 +319,11 @@ class validate_dns { } else $this->errorMessage .= "function filter_var missing
\r\n"; // Check if the range is valid if ($subnet !== '') { - if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + if (!is_numeric($subnet)) { + $errmsg = $validator['errmsg']; + $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; + } + elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { if ($subnet < 1 || $subnet > 128) { $errmsg = $validator['errmsg']; $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; -- GitLab From 368e1c3548b9a3acdc035a215389367cbc1e1e05 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 23 Dec 2020 13:54:50 +0100 Subject: [PATCH 100/403] Apply 1 suggestion(s) to 1 file(s) --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 91d23fac07..f3bb140d1b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -57,7 +57,6 @@ test:install: only: - schedules - web - - merge_requests script: - $CI_PROJECT_DIR/helper_scripts/test_install_docker.sh - apt-get update -- GitLab From 8f0440285e5a4b301f2d2b6fc0bfdf6c9dcd5d17 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 24 Dec 2020 09:06:18 -0700 Subject: [PATCH 101/403] fix bind plugin loglevel error --- server/plugins-available/bind_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index a32a1931cd..a7bcc2e678 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -340,7 +340,7 @@ class bind_plugin { if($return_status === 0) { $app->log("Writing BIND domain file: ".$filename, LOGLEVEL_DEBUG); } else { - $loglevel = @($dns_config['disable_bind_log'] === 'y')?'LOGLEVEL_DEBUG':'LOGLEVEL_WARN'; + $loglevel = @($dns_config['disable_bind_log'] === 'y') ? LOGLEVEL_DEBUG : LOGLEVEL_WARN; $app->log("Writing BIND domain file failed: ".$filename." ".implode(' ', $out), $loglevel); if(is_array($out) && !empty($out)){ $app->log('Reason for Bind restart failure: '.implode("\n", $out), $loglevel); -- GitLab From 3eb43fe73ac0d1c699623ae43d16e3ee21bfcf61 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sat, 26 Dec 2020 12:33:40 +0100 Subject: [PATCH 102/403] addendum fixes center of database quota dashlet closes #5954 --- 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 7cfd10b095..062b8d99b2 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_if name="database_quota" op="!=" value="unlimited"}
-
{tmpl_var name="used_percentage"}% +
{tmpl_var name="used_percentage"}% {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'}
-- GitLab From 5c0fcb454b2263c9c0983eaaec58443511120591 Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 27 Dec 2020 20:08:43 +0100 Subject: [PATCH 103/403] fix limits dashlet not centered, with unlimited databasequota do not display progressbar --- interface/web/dashboard/dashlets/templates/databasequota.htm | 2 +- interface/web/dashboard/dashlets/templates/limits.htm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/dashboard/dashlets/templates/databasequota.htm b/interface/web/dashboard/dashlets/templates/databasequota.htm index 062b8d99b2..082dd1f8c0 100644 --- a/interface/web/dashboard/dashlets/templates/databasequota.htm +++ b/interface/web/dashboard/dashlets/templates/databasequota.htm @@ -14,7 +14,7 @@ {tmpl_var name='database_name'} {tmpl_var name='used'} {tmpl_var name='database_quota'} - {tmpl_if name="database_quota" op="!=" value="unlimited"} + {tmpl_if name="quota_raw" op="!=" value="0"}
{tmpl_var name="used_percentage"}% {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 d4144ee562..7b46206335 100644 --- a/interface/web/dashboard/dashlets/templates/limits.htm +++ b/interface/web/dashboard/dashlets/templates/limits.htm @@ -19,7 +19,7 @@ role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="progressbar"}' style='width:{tmpl_var name="progressbar"}%' data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='percentage'}%"> - {tmpl_var name="percentage"}% + {tmpl_var name="percentage"}% {tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}
-- GitLab From 7de40252c76588b538c19c68e27c702caa5d2b1f Mon Sep 17 00:00:00 2001 From: Pascal Dreissen Date: Sun, 27 Dec 2020 20:27:23 +0100 Subject: [PATCH 104/403] fix unlimited progressbar in mailquota dashlet --- interface/web/dashboard/dashlets/templates/mailquota.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/dashboard/dashlets/templates/mailquota.htm b/interface/web/dashboard/dashlets/templates/mailquota.htm index d80c619fee..9013c7ac3b 100644 --- a/interface/web/dashboard/dashlets/templates/mailquota.htm +++ b/interface/web/dashboard/dashlets/templates/mailquota.htm @@ -16,7 +16,7 @@ {tmpl_var name='name'} {tmpl_var name='used'} {tmpl_var name='quota'} - {tmpl_if name="quota" op="!=" value="unlimited"} + {tmpl_if name="quota_raw" op="!=" value="0"}
{tmpl_var name="used_percentage"}% {tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'} -- GitLab From 84066d639252a0f23fd32d81e40becc3ef036956 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Tue, 20 Oct 2020 16:53:12 +0200 Subject: [PATCH 105/403] Do now show FTP traffic when the client has no ftp access --- interface/web/sites/lib/module.conf.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/interface/web/sites/lib/module.conf.php b/interface/web/sites/lib/module.conf.php index 5f1a25a449..80a034819c 100644 --- a/interface/web/sites/lib/module.conf.php +++ b/interface/web/sites/lib/module.conf.php @@ -198,11 +198,12 @@ $items[] = array( 'title' => 'Web traffic', 'link' => 'sites/web_sites_stats.php', 'html_id' => 'websites_stats'); -$items[] = array( 'title' => 'FTP traffic', - 'target' => 'content', - 'link' => 'sites/ftp_sites_stats.php', - 'html_id' => 'ftpsites_stats'); - +if($app->auth->get_client_limit($userid, 'ftp_user') != 0) { + $items[] = array( 'title' => 'FTP traffic', + 'target' => 'content', + 'link' => 'sites/ftp_sites_stats.php', + 'html_id' => 'ftpsites_stats'); +} $items[] = array( 'title' => 'Website quota (Harddisk)', 'target' => 'content', 'link' => 'sites/user_quota_stats.php', -- GitLab From 949ab384196038e4f4b55b6add24194ab1cd9da2 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Tue, 27 Oct 2020 14:31:14 +0100 Subject: [PATCH 106/403] Remove unreachable code --- interface/lib/classes/remote.d/dns.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php index b65dd63c8d..463b474cd1 100644 --- a/interface/lib/classes/remote.d/dns.inc.php +++ b/interface/lib/classes/remote.d/dns.inc.php @@ -46,7 +46,6 @@ class remoting_dns extends remoting { global $app, $conf; if(!$this->checkPerm($session_id, 'dns_templatezone_add')) { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); - return false; } $client = $app->db->queryOneRecord("SELECT default_dnsserver FROM client WHERE client_id = ?", $client_id); -- GitLab From 49d255efc6457ab2f4fdbd0a8dd5643362762c1e Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 30 Oct 2020 16:37:31 +0100 Subject: [PATCH 107/403] Extra dutch translation string --- interface/web/login/lib/lang/nl.lng | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/login/lib/lang/nl.lng b/interface/web/login/lib/lang/nl.lng index 2c98275fd4..cd5f3b713d 100644 --- a/interface/web/login/lib/lang/nl.lng +++ b/interface/web/login/lib/lang/nl.lng @@ -16,7 +16,7 @@ $wb['username_txt'] = 'Gebruikersnaam'; $wb['password_txt'] = 'Wachtwoord'; $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['error_maintenance_mode'] = 'Deze dienst is momenteel in onderhoud. We zijn spoedig weer beschikbaar.'; $wb['login_txt'] = 'Inloggen'; $wb['pw_reset_txt'] = 'Wachtwoord herstellen'; $wb['pw_button_txt'] = 'Wachtwoord versturen'; -- GitLab From ae7a1e2a29894d70a762760ccb75f7ba4bc13173 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 31 Oct 2020 20:54:53 +0100 Subject: [PATCH 108/403] typo --- 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 7bb75d8c37..553eb90b2c 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -34,7 +34,7 @@ class installer_base { var $language = 'en'; var $db; public $install_ispconfig_interface = true; - public $is_update = false; // true if it is an update, falsi if it is a new install + public $is_update = false; // true if it is an update, false if it is a new install public $min_php = '5.4'; // minimal php-version for update / install protected $mailman_group = 'list'; -- GitLab From 2b43a922dd782eabbe89edb64eef8bc7d35adfcb Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 3 Dec 2020 14:25:28 +0100 Subject: [PATCH 109/403] Fix comment --- install/lib/install.lib.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index 3d77443372..7a49939600 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -882,9 +882,8 @@ function get_apps_vhost_port_number() { } /* -* Get the port number of the ISPConfig controlpanel vhost -*/ - + * Check if SSL is anabled in the ISPConfig controlpanel vhost. + */ function is_ispconfig_ssl_enabled() { global $conf; $ispconfig_vhost_file = $conf['apache']['vhost_conf_dir'].'/ispconfig.vhost'; -- GitLab From f8563e03ef517f087b8626a9d405f07d2b381a66 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 9 Dec 2020 14:26:40 +0100 Subject: [PATCH 110/403] Remove duplicate _csrf_id and _csrf_key parameters --- interface/web/mail/templates/mail_alias_list.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/templates/mail_alias_list.htm b/interface/web/mail/templates/mail_alias_list.htm index f65e40a908..21f868dc81 100644 --- a/interface/web/mail/templates/mail_alias_list.htm +++ b/interface/web/mail/templates/mail_alias_list.htm @@ -53,7 +53,7 @@ {tmpl_var name="source"} {tmpl_var name="destination"} - + -- GitLab From de55f865b29986d6b91a64d9779241a4fad0e6c0 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 26 Dec 2020 21:39:36 +0100 Subject: [PATCH 111/403] Use tstamp via placeholder, value was already passed to query(). --- interface/lib/classes/remoting.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index 751edcf024..094d83c971 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -124,7 +124,7 @@ class remoting { $remote_functions = ''; $tstamp = time() + $this->session_timeout; $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp' - .') VALUES (?, ?, ?, 1, $tstamp)'; + .') VALUES (?, ?, ?, 1, ?)'; $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); return $remote_session; } else { -- GitLab From bad887aac38aa99318123780bee23d24778f4f0e Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sun, 27 Dec 2020 20:53:06 +0100 Subject: [PATCH 112/403] Fix nonexistant CONST --- server/plugins-available/bind_plugin.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index a32a1931cd..d3c678d7aa 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -208,7 +208,7 @@ class bind_plugin { //* Check for available entropy if (file_get_contents('/proc/sys/kernel/random/entropy_avail') < 200) { - $app->log('DNSSEC ERROR: We are low on entropy. This could cause server script to fail. Please consider installing package haveged.', LOGLEVEL_ERR); + $app->log('DNSSEC ERROR: We are low on entropy. This could cause server script to fail. Please consider installing package haveged.', LOGLEVEL_ERROR); echo "DNSSEC ERROR: We are low on entropy. This could cause server script to fail. Please consider installing package haveged.\n"; return false; } @@ -219,7 +219,7 @@ class bind_plugin { $app->system->exec_safe('cd ?; named-checkzone ? ? | egrep -ho \'[0-9]{10}\'', $dns_config['bind_zonefiles_dir'], $domain, $dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain); $retState = $app->system->last_exec_retcode(); if ($retState != 0) { - $app->log('DNSSEC Error: Error in Zonefile for '.$domain, LOGLEVEL_ERR); + $app->log('DNSSEC Error: Error in Zonefile for '.$domain, LOGLEVEL_ERROR); return false; } -- GitLab From 2adaa6b2d616dac22bd3ceba2272aa6e9762aab9 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 31 Dec 2020 11:03:20 +0100 Subject: [PATCH 113/403] Remove call to long deleted script Removed in 2016 via 708b93bdea4b623a6b1fe3d2ca7e472fd60c4cac --- server/plugins-available/bind_plugin.inc.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index d3c678d7aa..775fd20ffa 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -417,12 +417,6 @@ class bind_plugin { if(is_file($zone_file_name.'.err')) unlink($zone_file_name.'.err'); $app->log("Deleting BIND domain file: ".$zone_file_name, LOGLEVEL_DEBUG); - //* DNSSEC-Implementation - if($data['old']['dnssec_initialized'] == 'Y' && file_exists('/usr/local/ispconfig/server/scripts/dnssec-delete.sh')) { - //delete keys - $app->system->exec_safe('/usr/local/ispconfig/server/scripts/dnssec-delete.sh ?', $data['old']['origin']); - } - //* Reload bind nameserver $app->services->restartServiceDelayed('bind', 'reload'); -- GitLab From d37894f5294038181d2efffc17d78ca0710d8541 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 31 Dec 2020 16:02:48 -0700 Subject: [PATCH 114/403] remote api functions: Roundcube plugins functions --- interface/web/admin/lib/remote.conf.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/interface/web/admin/lib/remote.conf.php b/interface/web/admin/lib/remote.conf.php index a1067a992f..9c2db8144e 100644 --- a/interface/web/admin/lib/remote.conf.php +++ b/interface/web/admin/lib/remote.conf.php @@ -3,4 +3,9 @@ $function_list['server_get,server_config_set,get_function_list,client_templates_get_all,server_get_serverid_by_ip,server_ip_get,server_ip_add,server_ip_update,server_ip_delete,system_config_set,system_config_get,config_value_get,config_value_add,config_value_update,config_value_replace,config_value_delete'] = 'Server functions'; $function_list['admin_record_permissions'] = 'Record permission changes'; +# Roundcube: generate list of actual soap methods used with: +# grep soap-\> /usr/share/roundcube/plugins/ispconfig3_*/ispconfig3_*.php | sed -e 's/^.*soap->//g' -e 's/(.*$//g' | sort -u | xargs | sed -e 's/ /,/g' +# +$function_list['client_get_id,login,logout,mail_alias_get,mail_fetchmail_add,mail_fetchmail_delete,mail_fetchmail_get,mail_fetchmail_update,mail_policy_get,mail_spamfilter_blacklist_add,mail_spamfilter_blacklist_delete,mail_spamfilter_blacklist_get,mail_spamfilter_blacklist_update,mail_spamfilter_user_add,mail_spamfilter_user_get,mail_spamfilter_user_update,mail_spamfilter_whitelist_add,mail_spamfilter_whitelist_delete,mail_spamfilter_whitelist_get,mail_spamfilter_whitelist_update,mail_user_filter_add,mail_user_filter_delete,mail_user_filter_get,mail_user_filter_update,mail_user_get,mail_user_update,server_get,server_get_app_version'] = 'Roundcube plugins functions'; + ?> -- GitLab From 47ef5ce2262f128838ba46597dbfe89ff71a98b8 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 1 Jan 2021 20:41:33 +0100 Subject: [PATCH 115/403] Show rendered dns zone in tab, #5983 --- install/sql/incremental/upd_dev_collection.sql | 2 ++ install/sql/ispconfig3.sql | 1 + interface/web/dns/form/dns_soa.tform.php | 11 +++++++++++ interface/web/dns/lib/lang/en_dns_soa.lng | 1 + interface/web/dns/templates/dns_soa_rendered.htm | 10 ++++++++++ server/plugins-available/bind_plugin.inc.php | 7 ++++++- 6 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 interface/web/dns/templates/dns_soa_rendered.htm diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index a12f9d482b..2e1c39676a 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -6,3 +6,5 @@ ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTE -- fix #5939 UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00'; + +ALTER TABLE `dns_soa` ADD `rendered_zone` MEDIUMTEXT NULL AFTER `dnssec_info`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 8fb5cdfb74..ff41fe96f4 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -629,6 +629,7 @@ CREATE TABLE `dns_soa` ( `dnssec_algo` SET('NSEC3RSASHA1','ECDSAP256SHA256') NOT NULL DEFAULT 'ECDSAP256SHA256', `dnssec_last_signed` BIGINT NOT NULL DEFAULT '0', `dnssec_info` TEXT NULL, + `rendered_zone` MEDIUMTEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `origin` (`origin`), KEY `active` (`active`) diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index fe71757788..099c6d6c57 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -322,6 +322,17 @@ $form["tabs"]['dns_soa'] = array ( //################################# ) ); +$form["tabs"]['dns_rendered_zone'] = array ( + 'title' => "Zone rendering", + 'width' => 100, + 'template' => "templates/dns_soa_rendered.htm", + 'fields' => array ( + 'rendered_zone' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + ), + ) +); // show update acl to admins only. if(!$app->auth->is_admin()) unset($form["tabs"]['dns_soa']['fields']['update_acl']); diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index 7f42b9f27a..1d4f6ca42f 100644 --- a/interface/web/dns/lib/lang/en_dns_soa.lng +++ b/interface/web/dns/lib/lang/en_dns_soa.lng @@ -42,4 +42,5 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; ?> diff --git a/interface/web/dns/templates/dns_soa_rendered.htm b/interface/web/dns/templates/dns_soa_rendered.htm new file mode 100644 index 0000000000..dca86d73aa --- /dev/null +++ b/interface/web/dns/templates/dns_soa_rendered.htm @@ -0,0 +1,10 @@ + +{tmpl_var name='rendered_zone_txt'} +
+{tmpl_var name='rendered_zone'}
+
+ +
+ +
+ diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index a7bcc2e678..02ef052426 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -328,10 +328,15 @@ class bind_plugin { $filename = $dns_config['bind_zonefiles_dir'].'/' . $this->zone_file_prefix() . str_replace("/", "_", substr($zone['origin'], 0, -1)); $old_zonefile = @file_get_contents($filename); - file_put_contents($filename, $tpl->grab()); + $rendered_zone = $tpl->grab(); + file_put_contents($filename, $rendered_zone); + chown($filename, $dns_config['bind_user']); chgrp($filename, $dns_config['bind_group']); + // Store also in the db for exports. + $app->dbmaster->query("UPDATE `dns_soa` SET `rendered_zone`=?", $rendered_zone); + //* Check the zonefile if(is_file($filename.'.err')) unlink($filename.'.err'); $app->system->exec_safe('named-checkzone ? ?', $zone['origin'], $filename); -- GitLab From 7d7a48f1aee51f3eedaf4292035d96bb150bc1f4 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 2 Jan 2021 21:27:15 +0100 Subject: [PATCH 116/403] Add no data message when no zone rendering is ready, #5983 --- interface/web/dns/lib/lang/en_dns_soa.lng | 1 + interface/web/dns/templates/dns_soa_rendered.htm | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index 1d4f6ca42f..a5f1adfae5 100644 --- a/interface/web/dns/lib/lang/en_dns_soa.lng +++ b/interface/web/dns/lib/lang/en_dns_soa.lng @@ -43,4 +43,5 @@ $wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please co $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; $wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/templates/dns_soa_rendered.htm b/interface/web/dns/templates/dns_soa_rendered.htm index dca86d73aa..31f1d925a5 100644 --- a/interface/web/dns/templates/dns_soa_rendered.htm +++ b/interface/web/dns/templates/dns_soa_rendered.htm @@ -1,8 +1,10 @@ -{tmpl_var name='rendered_zone_txt'} -
-{tmpl_var name='rendered_zone'}
-
+{tmpl_if name='rendered_zone'} + {tmpl_var name='rendered_zone_txt'} +
{tmpl_var name='rendered_zone'}
+{tmpl_else} + {tmpl_var name='rendered_zone_unavailable_txt'} +{/tmpl_if}
-- GitLab From 5fe7013ed572ab1f64955478f34a1664e856e591 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Sun, 3 Jan 2021 14:52:20 +0100 Subject: [PATCH 117/403] - do not allow raw SQL through array[SQL] in db lib - don't make sql request on invalid arguments in password reset form --- interface/lib/classes/db_mysql.inc.php | 36 +++++++++---------- interface/web/login/password_reset.php | 14 ++++---- .../classes/cron.d/300-quota_notify.inc.php | 6 ++-- server/lib/classes/db_mysql.inc.php | 36 +++++++++---------- 4 files changed, 43 insertions(+), 49 deletions(-) diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php index feab66cd93..cd9c333b22 100644 --- a/interface/lib/classes/db_mysql.inc.php +++ b/interface/lib/classes/db_mysql.inc.php @@ -171,14 +171,10 @@ class db } elseif(is_null($sValue) || (is_string($sValue) && (strcmp($sValue, '#NULL#') == 0))) { $sTxt = 'NULL'; } elseif(is_array($sValue)) { - if(isset($sValue['SQL'])) { - $sTxt = $sValue['SQL']; - } else { - $sTxt = ''; - foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\''; - $sTxt = '(' . substr($sTxt, 1) . ')'; - if($sTxt == '()') $sTxt = '(0)'; - } + $sTxt = ''; + foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\''; + $sTxt = '(' . substr($sTxt, 1) . ')'; + if($sTxt == '()') $sTxt = '(0)'; } else { $sTxt = '\'' . $this->escape($sValue) . '\''; } @@ -258,7 +254,7 @@ class db private function _query($sQuery = '') { global $app; - + $aArgs = func_get_args(); if ($sQuery == '') { @@ -354,7 +350,7 @@ class db * @return array result row or NULL if none found */ public function queryOneRecord($sQuery = '') { - + $aArgs = func_get_args(); if(!empty($aArgs)) { $sQuery = array_shift($aArgs); @@ -363,7 +359,7 @@ class db } array_unshift($aArgs, $sQuery); } - + $oResult = call_user_func_array([&$this, 'query'], $aArgs); if(!$oResult) return null; @@ -750,7 +746,7 @@ class db foreach($insert_data as $key => $val) { $key_str .= '??,'; $params[] = $key; - + $val_str .= '?,'; $v_params[] = $val; } @@ -764,7 +760,7 @@ class db $this->query("INSERT INTO ?? $insert_data_str", $tablename); $app->log("deprecated use of passing values to datalogInsert() - table " . $tablename, 1); } - + $old_rec = array(); $index_value = $this->insertID(); if(!$index_value && isset($insert_data[$index_field])) { @@ -1112,7 +1108,7 @@ class db * @access public * @return string 'mariadb' or string 'mysql' */ - + public function getDatabaseType() { $tmp = $this->queryOneRecord('SELECT VERSION() as version'); if(stristr($tmp['version'],'mariadb')) { @@ -1140,7 +1136,7 @@ class db return $version[0]; } } - + /** * Get a mysql password hash * @@ -1150,9 +1146,9 @@ class db */ public function getPasswordHash($password) { - + $password_type = 'password'; - + /* Disabled until caching_sha2_password is implemented if($this->getDatabaseType() == 'mysql' && $this->getDatabaseVersion(true) >= 8) { // we are in MySQL 8 mode @@ -1162,16 +1158,16 @@ class db } } */ - + if($password_type == 'caching_sha2_password') { /* - caching_sha2_password hashing needs to be implemented, have not + caching_sha2_password hashing needs to be implemented, have not found valid PHP implementation for the new password hash type. */ } else { $password_hash = '*'.strtoupper(sha1(sha1($password, true))); } - + return $password_hash; } diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php index 9a2541bba0..2e1d5e6aad 100644 --- a/interface/web/login/password_reset.php +++ b/interface/web/login/password_reset.php @@ -47,7 +47,7 @@ include ISPC_ROOT_PATH.'/web/login/lib/lang/'.$app->functions->check_language($c $app->tpl->setVar($wb); $continue = true; -if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != '' && $_POST['username'] != 'admin') { +if(isset($_POST['username']) && is_string($_POST['username']) && $_POST['username'] != '' && isset($_POST['email']) && is_string($_POST['email']) && $_POST['email'] != '' && $_POST['username'] != 'admin') { if(!preg_match("/^[\w\.\-\_]{1,64}$/", $_POST['username'])) { $app->tpl->setVar("error", $wb['user_regex_error']); $continue = false; @@ -60,11 +60,13 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != ' $username = $_POST['username']; $email = $_POST['email']; - $client = $app->db->queryOneRecord("SELECT client.*, sys_user.lost_password_function, sys_user.lost_password_hash, IF(sys_user.lost_password_reqtime IS NOT NULL AND DATE_SUB(NOW(), INTERVAL 15 MINUTE) < sys_user.lost_password_reqtime, 1, 0) as `lost_password_wait` FROM client,sys_user WHERE client.username = ? AND client.email = ? AND client.client_id = sys_user.client_id", $username, $email); + if($continue) { + $client = $app->db->queryOneRecord("SELECT client.*, sys_user.lost_password_function, sys_user.lost_password_hash, IF(sys_user.lost_password_reqtime IS NOT NULL AND DATE_SUB(NOW(), INTERVAL 15 MINUTE) < sys_user.lost_password_reqtime, 1, 0) as `lost_password_wait` FROM client,sys_user WHERE client.username = ? AND client.email = ? AND client.client_id = sys_user.client_id", $username, $email); + } - if($client['lost_password_function'] == 0) { + if($client && $client['lost_password_function'] == 0) { $app->tpl->setVar("error", $wb['lost_password_function_disabled_txt']); - } elseif($client['lost_password_wait'] == 1) { + } elseif($client && $client['lost_password_wait'] == 1) { $app->tpl->setVar("error", $wb['lost_password_function_wait_txt']); } elseif ($continue) { if($client['client_id'] > 0) { @@ -111,7 +113,7 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != ' $app->tpl->setVar("error", $wb['user_regex_error']); $continue = false; } - + $username = $_GET['username']; $hash = $_GET['hash']; @@ -127,7 +129,7 @@ if(isset($_POST['username']) && $_POST['username'] != '' && $_POST['email'] != ' if($client['client_id'] > 0) { $server_config_array = $app->getconf->get_global_config(); $min_password_length = $app->auth->get_min_password_length(); - + $new_password = $app->auth->get_random_password($min_password_length, true); $new_password_encrypted = $app->auth->crypt_password($new_password); diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php index bd6a410309..5e1bb92276 100644 --- a/server/lib/classes/cron.d/300-quota_notify.inc.php +++ b/server/lib/classes/cron.d/300-quota_notify.inc.php @@ -250,7 +250,7 @@ class cronjob_quota_notify extends cronjob { //* Send quota notifications if(($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y') && $send_notification == true) { - $app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'domain_id', $rec['domain_id']); + $app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => date('Y-m-d')), 'domain_id', $rec['domain_id']); $placeholders = array('{domain}' => $rec['domain'], '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'), @@ -379,7 +379,7 @@ class cronjob_quota_notify extends cronjob { elseif($mail_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $mail_config['overquota_notify_freq']) $send_notification = true; if(($mail_config['overquota_notify_admin'] == 'y' || $mail_config['overquota_notify_client'] == 'y') && $send_notification == true) { - $app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'mailuser_id', $rec['mailuser_id']); + $app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => date('Y-m-d')), 'mailuser_id', $rec['mailuser_id']); $placeholders = array('{email}' => $rec['email'], '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'), @@ -466,7 +466,7 @@ class cronjob_quota_notify extends cronjob { //* Send quota notifications if(($web_config['overquota_db_notify_admin'] == 'y' || $web_config['overquota_db_notify_client'] == 'y') && $send_notification == true) { - $app->dbmaster->datalogUpdate('web_database', array("last_quota_notification" => array("SQL" => "CURDATE()")), 'database_id', $rec['database_id']); + $app->dbmaster->datalogUpdate('web_database', array("last_quota_notification" => date('Y-m-d')), 'database_id', $rec['database_id']); $placeholders = array( '{database_name}' => $rec['database_name'], '{admin_mail}' => ($global_config['admin_mail'] != ''? $global_config['admin_mail'] : 'root'), diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index df38086ebe..9b9d43b442 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -171,14 +171,10 @@ class db } elseif(is_null($sValue) || (is_string($sValue) && (strcmp($sValue, '#NULL#') == 0))) { $sTxt = 'NULL'; } elseif(is_array($sValue)) { - if(isset($sValue['SQL'])) { - $sTxt = $sValue['SQL']; - } else { - $sTxt = ''; - foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\''; - $sTxt = '(' . substr($sTxt, 1) . ')'; - if($sTxt == '()') $sTxt = '(0)'; - } + $sTxt = ''; + foreach($sValue as $sVal) $sTxt .= ',\'' . $this->escape($sVal) . '\''; + $sTxt = '(' . substr($sTxt, 1) . ')'; + if($sTxt == '()') $sTxt = '(0)'; } else { $sTxt = '\'' . $this->escape($sValue) . '\''; } @@ -258,7 +254,7 @@ class db private function _query($sQuery = '') { global $app; - + $aArgs = func_get_args(); if ($sQuery == '') { @@ -354,7 +350,7 @@ class db * @return array result row or NULL if none found */ public function queryOneRecord($sQuery = '') { - + $aArgs = func_get_args(); if(!empty($aArgs)) { $sQuery = array_shift($aArgs); @@ -363,7 +359,7 @@ class db } array_unshift($aArgs, $sQuery); } - + $oResult = call_user_func_array([&$this, 'query'], $aArgs); if(!$oResult) return null; @@ -750,7 +746,7 @@ class db foreach($insert_data as $key => $val) { $key_str .= '??,'; $params[] = $key; - + $val_str .= '?,'; $v_params[] = $val; } @@ -764,7 +760,7 @@ class db $this->query("INSERT INTO ?? $insert_data_str", $tablename); $app->log("deprecated use of passing values to datalogInsert() - table " . $tablename, 1); } - + $old_rec = array(); $index_value = $this->insertID(); if(!$index_value && isset($insert_data[$index_field])) { @@ -1140,7 +1136,7 @@ class db return $version[0]; } } - + /** * Get a mysql password hash * @@ -1148,11 +1144,11 @@ class db * @param string cleartext password * @return string Password hash */ - + public function getPasswordHash($password) { - + $password_type = 'password'; - + /* Disabled until caching_sha2_password is implemented if($this->getDatabaseType() == 'mysql' && $this->getDatabaseVersion(true) >= 8) { // we are in MySQL 8 mode @@ -1162,16 +1158,16 @@ class db } } */ - + if($password_type == 'caching_sha2_password') { /* - caching_sha2_password hashing needs to be implemented, have not + caching_sha2_password hashing needs to be implemented, have not found valid PHP implementation for the new password hash type. */ } else { $password_hash = '*'.strtoupper(sha1(sha1($password, true))); } - + return $password_hash; } -- GitLab From dbfb249a158b28de3bac81951ee4f1ac154f9be2 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Sun, 3 Jan 2021 15:25:13 +0100 Subject: [PATCH 118/403] - merge collection sql updates to new sql update file --- install/sql/incremental/upd_0092.sql | 8 ++++++++ install/sql/incremental/upd_dev_collection.sql | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 install/sql/incremental/upd_0092.sql diff --git a/install/sql/incremental/upd_0092.sql b/install/sql/incremental/upd_0092.sql new file mode 100644 index 0000000000..a12f9d482b --- /dev/null +++ b/install/sql/incremental/upd_0092.sql @@ -0,0 +1,8 @@ +-- drop old php column because new installations don't have them (fails in multi-server) +ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; + +-- add php_fpm_socket_dir column to server_php +ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; + +-- fix #5939 +UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00'; diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index a12f9d482b..e69de29bb2 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,8 +0,0 @@ --- drop old php column because new installations don't have them (fails in multi-server) -ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; - --- add php_fpm_socket_dir column to server_php -ALTER TABLE `server_php` ADD `php_fpm_socket_dir` varchar(255) DEFAULT NULL AFTER `php_fpm_pool_dir`; - --- fix #5939 -UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00'; -- GitLab From 5b98587f5f3842b1ecaab60af87e88f654a26ca7 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Sun, 3 Jan 2021 19:30:39 +0100 Subject: [PATCH 119/403] - do not use md5 on sys_user password - update user password with new hashing algo on login - delete initial password from ispconfig sql file --- install/dist/lib/fedora.lib.php | 4 +-- install/dist/lib/gentoo.lib.php | 4 +-- install/dist/lib/opensuse.lib.php | 4 +-- install/lib/installer_base.lib.php | 32 ++++++++++++++++++-- install/sql/ispconfig3.sql | 2 +- interface/web/login/index.php | 48 ++++++++++++++++-------------- 6 files changed, 63 insertions(+), 31 deletions(-) diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 506659f6e7..9e3f07d102 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -1227,8 +1227,8 @@ class installer_dist extends installer_base { caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') { - $sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';"; - $this->db->query($sql, $conf['interface_password']); + $sql = "UPDATE sys_user SET passwort = ? WHERE username = 'admin';"; + $this->db->query($sql, $this->crypt_password($conf['interface_password'])); } if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){ diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index acd4dbcf61..a7d62cda0b 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -1115,8 +1115,8 @@ class installer extends installer_base caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') { - $sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';"; - $this->db->query($sql, $conf['interface_password']); + $sql = "UPDATE sys_user SET passwort = ? WHERE username = 'admin';"; + $this->db->query($sql, $this->crypt_password($conf['interface_password'])); } if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){ diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index cb145ea7df..8a4152d9b5 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -1215,8 +1215,8 @@ class installer_dist extends installer_base { caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') { - $sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';"; - $this->db->query($sql, $conf['interface_password']); + $sql = "UPDATE sys_user SET passwort = ? WHERE username = 'admin';"; + $this->db->query($sql, $this->crypt_password($conf['interface_password'])); } if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){ diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 7bb75d8c37..338a3dfc7e 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -157,6 +157,34 @@ class installer_base { else return true; } + public function crypt_password($cleartext_password, $charset = 'UTF-8') { + if($charset != 'UTF-8') { + $cleartext_password = mb_convert_encoding($cleartext_password, $charset, 'UTF-8'); + } + + if(defined('CRYPT_SHA512') && CRYPT_SHA512 == 1) { + $salt = '$6$rounds=5000$'; + $salt_length = 16; + } elseif(defined('CRYPT_SHA256') && CRYPT_SHA256 == 1) { + $salt = '$5$rounds=5000$'; + $salt_length = 16; + } else { + $salt = '$1$'; + $salt_length = 12; + } + + if(function_exists('openssl_random_pseudo_bytes')) { + $salt .= substr(bin2hex(openssl_random_pseudo_bytes($salt_length)), 0, $salt_length); + } else { + $base64_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./'; + for($n = 0; $n < $salt_length; $n++) { + $salt .= $base64_alphabet[mt_rand(0, 63)]; + } + } + $salt .= "$"; + return crypt($cleartext_password, $salt); + } + //** Detect installed applications public function find_installed_apps() { global $conf; @@ -3415,8 +3443,8 @@ class installer_base { caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); if ($this->install_ispconfig_interface == true && isset($conf['interface_password']) && $conf['interface_password']!='admin') { - $sql = "UPDATE sys_user SET passwort = md5(?) WHERE username = 'admin';"; - $this->db->query($sql, $conf['interface_password']); + $sql = "UPDATE sys_user SET passwort = ? WHERE username = 'admin';"; + $this->db->query($sql, $this->crypt_password($conf['interface_password'])); } if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){ diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 8fb5cdfb74..0f10d59ac6 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -2580,7 +2580,7 @@ INSERT INTO `sys_theme` (`var_id`, `tpl_name`, `username`, `logo_url`) VALUES (N -- Dumping data for table `sys_user` -- -INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `language`, `groups`, `default_group`, `client_id`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'dashboard,admin,client,mail,monitor,sites,dns,vm,tools,help', 'dashboard', 'default', 'admin', 1, 'en', '1,2', 1, 0); +INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `language`, `groups`, `default_group`, `client_id`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', 'xxx', 'dashboard,admin,client,mail,monitor,sites,dns,vm,tools,help', 'dashboard', 'default', 'admin', 1, 'en', '1,2', 1, 0); -- -------------------------------------------------------- diff --git a/interface/web/login/index.php b/interface/web/login/index.php index b5d5abc27b..d820e917c9 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -83,23 +83,23 @@ if(count($_POST) > 0) { * The actual user is NOT a admin or reseller, but maybe he * has logged in as "normal" user before... */ - + if (isset($_SESSION['s_old'])&& ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))){ /* The "old" user is admin or reseller, so everything is ok * if he is reseller, we need to check if he logs in to one of his clients */ if($_SESSION['s_old']['user']['typ'] != 'admin') { - + /* this is the one currently logged in (normal user) */ $old_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $old_client_group_id); - + /* this is the reseller, that shall be re-logged in */ $sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?"; $tmp = $app->db->queryOneRecord($sql, $username, $password); $client_group_id = $app->functions->intval($tmp['default_group']); $tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); - + if(!$tmp_client || $old_client["parent_client_id"] != $tmp_client["client_id"] || $tmp["default_group"] != $_SESSION["s_old"]["user"]["default_group"] ) { die("You don't have the right to 'login as' this user!"); } @@ -115,12 +115,12 @@ if(count($_POST) > 0) { /* a reseller wants to 'login as', we need to check if he is allowed to */ $res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $res_client_group_id); - + /* this is the user the reseller wants to 'login as' */ $sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?"; $tmp = $app->db->queryOneRecord($sql, $username, $password); $tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $tmp["default_group"]); - + if(!$tmp || $tmp_client["parent_client_id"] != $res_client["client_id"]) { die("You don't have the right to login as this user!"); } @@ -129,16 +129,16 @@ if(count($_POST) > 0) { unset($tmp_client); } $loginAs = true; - + } else { /* normal login */ $loginAs = false; } - + //* Check if there are already wrong logins $sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1"; $alreadyfailed = $app->db->queryOneRecord($sql, $ip); - + //* too many failedlogins if($alreadyfailed['times'] > 5) { $error = $app->lng('error_user_too_many_logins'); @@ -148,7 +148,7 @@ if(count($_POST) > 0) { $sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ?"; $user = $app->db->queryOneRecord($sql, $username, $password); } else { - + if(stristr($username, '@')) { //* mailuser login $sql = "SELECT * FROM mail_user WHERE login = ? or email = ?"; @@ -160,7 +160,7 @@ if(count($_POST) > 0) { 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; @@ -196,6 +196,10 @@ if(count($_POST) > 0) { //* The password is md5 encrypted if(md5($password) != $saved_password) { $user = false; + } else { + // update password with secure algo + $sql = 'UPDATE `sys_user` SET `passwort` = ? WHERE `username` = ?'; + $app->db->query($sql, $app->auth->crypt_password($password), $username); } } } else { @@ -203,19 +207,19 @@ if(count($_POST) > 0) { } } } - + if($user) { if($user['active'] == 1) { // Maintenance mode - allow logins only when maintenance mode is off or if the user is admin if(!$app->is_under_maintenance() || $user['typ'] == 'admin'){ - + // User login right, so attempts can be deleted $sql = "DELETE FROM `attempts_login` WHERE `ip`=?"; $app->db->query($sql, $ip); $user = $app->db->toLower($user); - + if ($loginAs) $oldSession = $_SESSION['s']; - + // Session regenerate causes login problems on some systems, see Issue #3827 // Set session_regenerate_id to no in security settings, it you encounter // this problem. @@ -231,7 +235,7 @@ if(count($_POST) > 0) { $_SESSION['s']['language'] = $app->functions->check_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 $app->functions->check_include_path(ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php'); $menu_dir = ISPC_WEB_PATH.'/' . $_SESSION['s']['user']['startmodule'] . '/lib/menu.d'; @@ -257,20 +261,20 @@ if(count($_POST) > 0) { $_SESSION['show_error_msg'] = $app->lng('theme_not_compatible'); } } - + $app->plugin->raiseEvent('login', $username); - + //* Save successfull login message to var - $authlog = 'Successful login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s') . ' with session ID ' .session_id(); + $authlog = 'Successful login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s') . ' with session ID ' .session_id(); $authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a'); fwrite($authlog_handle, $authlog ."\n"); fclose($authlog_handle); - + /* * We need LOGIN_REDIRECT instead of HEADER_REDIRECT to load the * new theme, if the logged-in user has another */ - + if ($loginAs){ echo 'LOGIN_REDIRECT:'.$_SESSION['s']['module']['startpage']; exit; @@ -327,7 +331,7 @@ if($security_config['password_reset_allowed'] == 'yes') { } else { $app->tpl->setVar('pw_lost_show', 0); } - + $app->tpl->setVar('error', $error); $app->tpl->setVar('error_txt', $app->lng('error_txt')); $app->tpl->setVar('login_txt', $app->lng('login_txt')); -- GitLab From eabdde5dcb8d13c2b9ffb269eb6b85b55f1031d6 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Mon, 4 Jan 2021 11:41:34 +0100 Subject: [PATCH 120/403] - dont use md5 on remote users --- interface/lib/classes/remoting.inc.php | 30 ++++++++++++------- .../web/admin/form/remote_user.tform.php | 10 +++---- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index 751edcf024..f3b597830b 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -128,13 +128,23 @@ class remoting { $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); return $remote_session; } else { - $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = md5(?)"; - $remote_user = $app->db->queryOneRecord($sql, $username, $password); + $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = ?"; + $remote_user = $app->db->queryOneRecord($sql, $username, $app->auth->crypt_password($password)); + if(!$remote_user) { + // fallback to md5 + $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = ?"; + $remote_user = $app->db->queryOneRecord($sql, $username, md5($password)); + if($remote_user) { + // update hash algo + $sql = 'UPDATE `remote_user` SET `remote_password` = ? WHERE `remote_username` = ?'; + $app->db->query($sql, $app->auth->crypt_password($password), $username); + } + } if($remote_user['remote_userid'] > 0) { if (trim($remote_user['remote_ips']) != '') { $allowed_ips = explode(',',$remote_user['remote_ips']); - foreach($allowed_ips as $i => $allowed) { - if(!filter_var($allowed, FILTER_VALIDATE_IP)) { + foreach($allowed_ips as $i => $allowed) { + if(!filter_var($allowed, FILTER_VALIDATE_IP)) { // get the ip for a hostname unset($allowed_ips[$i]); $temp=dns_get_record($allowed, DNS_A+DNS_AAAA); @@ -169,7 +179,7 @@ class remoting { if(!$remote_allowed) { throw new SoapFault('login_failed', 'The login is not allowed from '.$_SERVER['REMOTE_ADDR']); return false; - } + } //* Create a remote user session //srand ((double)microtime()*1000000); $remote_session = md5(mt_rand().uniqid('ispco')); @@ -368,22 +378,22 @@ class remoting { //* Load the form definition $app->remoting_lib->loadFormDef($formdef_file); - + //* get old record and merge with params, so only new values have to be set in $params $old_rec = $app->remoting_lib->getDataRecord($primary_id, $client_id); - + foreach ($app->remoting_lib->formDef['fields'] as $fieldName => $fieldConf) { if ($fieldConf['formtype'] === 'PASSWORD' && empty($params[$fieldName])) { unset($old_rec[$fieldName]); } } - + $params = $app->functions->array_merge($old_rec,$params); //* Get the SQL query $sql = $app->remoting_lib->getSQL($params, 'UPDATE', $primary_id); - + // throw new SoapFault('debug', $sql); if($app->remoting_lib->errorMessage != '') { throw new SoapFault('data_processing_error', $app->remoting_lib->errorMessage); @@ -546,7 +556,7 @@ class remoting { return false; } } - + /** Gets a list of all servers @param int session_id diff --git a/interface/web/admin/form/remote_user.tform.php b/interface/web/admin/form/remote_user.tform.php index 6e351730c2..0a8595f1b8 100644 --- a/interface/web/admin/form/remote_user.tform.php +++ b/interface/web/admin/form/remote_user.tform.php @@ -109,7 +109,7 @@ $form["tabs"]['remote_user'] = array ( 'errmsg' => 'weak_password_txt' ) ), - 'encryption' => 'MD5', + 'encryption' => 'CRYPT', 'default' => '', 'value' => '', 'width' => '30', @@ -124,11 +124,11 @@ $form["tabs"]['remote_user'] = array ( 'remote_ips' => array ( 'datatype' => 'TEXT', 'formtype' => 'TEXT', - 'validators' => array ( + 'validators' => array ( 0 => array ( - 'type' => 'CUSTOM', - 'class' => 'validate_remote_user', - 'function' => 'valid_remote_ip', + 'type' => 'CUSTOM', + 'class' => 'validate_remote_user', + 'function' => 'valid_remote_ip', 'errmsg' => 'remote_user_error_ips'), ), 'default' => '', -- GitLab From b87fc251e40314d69030b676d4e3a781915ccca4 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Mon, 4 Jan 2021 11:59:47 +0100 Subject: [PATCH 121/403] - fixed hash generation for remote password --- interface/lib/classes/remoting.inc.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index f3b597830b..001f214229 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -128,19 +128,22 @@ class remoting { $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); return $remote_session; } else { - $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = ?"; - $remote_user = $app->db->queryOneRecord($sql, $username, $app->auth->crypt_password($password)); - if(!$remote_user) { - // fallback to md5 - $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = ?"; - $remote_user = $app->db->queryOneRecord($sql, $username, md5($password)); - if($remote_user) { + $sql = "SELECT * FROM remote_user WHERE remote_username = ?"; + $remote_user = $app->db->queryOneRecord($sql, $username); + if($remote_user) { + if(substr($remote_user['remote_password'], 0, 1) === '$') { + if(crypt(stripslashes($password), $remote_user['remote_password']) != $remote_user['remote_password']) { + $remote_user = null; + } + } elseif(md5($password) == $remote_user['remote_password']) { // update hash algo $sql = 'UPDATE `remote_user` SET `remote_password` = ? WHERE `remote_username` = ?'; $app->db->query($sql, $app->auth->crypt_password($password), $username); + } else { + $remote_user = null; } } - if($remote_user['remote_userid'] > 0) { + if($remote_user && $remote_user['remote_userid'] > 0) { if (trim($remote_user['remote_ips']) != '') { $allowed_ips = explode(',',$remote_user['remote_ips']); foreach($allowed_ips as $i => $allowed) { -- GitLab From d6933c0e36ed09826d639658740e58971a4c84c6 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Mon, 4 Jan 2021 14:44:48 +0100 Subject: [PATCH 122/403] - adjust ispconfig log file permissions --- install/dist/lib/fedora.lib.php | 1 + install/dist/lib/gentoo.lib.php | 1 + install/dist/lib/opensuse.lib.php | 1 + install/lib/installer_base.lib.php | 1 + 4 files changed, 4 insertions(+) diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 9e3f07d102..9620bf3561 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -1372,6 +1372,7 @@ class installer_dist extends installer_base { //* Create the ispconfig log directory if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']); if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log'); + chmod($conf['ispconfig_log_dir'].'/ispconfig.log', 0600); if(is_user('getmail')) { exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh'); diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index a7d62cda0b..f719fbee38 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -1252,6 +1252,7 @@ class installer extends installer_base if (!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) { touch($conf['ispconfig_log_dir'].'/ispconfig.log'); } + chmod($conf['ispconfig_log_dir'].'/ispconfig.log', 0600); //* Create the ispconfig auth log file and set uid/gid if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) { diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index 8a4152d9b5..b9e3a1c575 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -1369,6 +1369,7 @@ class installer_dist extends installer_base { //* Create the ispconfig log directory if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']); if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log'); + chmod($conf['ispconfig_log_dir'].'/ispconfig.log', 0600); if(is_user('getmail')) { exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh'); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 338a3dfc7e..cec9c55b42 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -3588,6 +3588,7 @@ class installer_base { if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755); touch($conf['ispconfig_log_dir'].'/ispconfig.log'); } + chmod($conf['ispconfig_log_dir'].'/ispconfig.log', 0600); //* Create the ispconfig auth log file and set uid/gid if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) { -- GitLab From 6360c54b16163254a1e336fc5513955840ff987e Mon Sep 17 00:00:00 2001 From: Thom Date: Mon, 4 Jan 2021 21:03:11 +0100 Subject: [PATCH 123/403] Fix remote user logins (column width) (#5989) --- install/sql/incremental/upd_dev_collection.sql | 1 + install/sql/ispconfig3.sql | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index e69de29bb2..9f4c0f17b6 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -0,0 +1 @@ +ALTER TABLE remote_user MODIFY remote_password VARCHAR(200) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 0f10d59ac6..d4640ea47a 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -1325,7 +1325,7 @@ CREATE TABLE `remote_user` ( `sys_perm_group` varchar(5) default NULL, `sys_perm_other` varchar(5) default NULL, `remote_username` varchar(64) NOT NULL DEFAULT '', - `remote_password` varchar(64) NOT NULL DEFAULT '', + `remote_password` varchar(200) NOT NULL DEFAULT '', `remote_access` enum('y','n') NOT NULL DEFAULT 'y', `remote_ips` TEXT, `remote_functions` text, -- GitLab From 598d0e0a2dcb05df7614b554defe7f91c38abb56 Mon Sep 17 00:00:00 2001 From: Thom Date: Mon, 4 Jan 2021 21:31:15 +0100 Subject: [PATCH 124/403] Apply 1 suggestion(s) to 1 file(s) --- install/sql/incremental/upd_dev_collection.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 9f4c0f17b6..02a94fdc1a 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1 +1 @@ -ALTER TABLE remote_user MODIFY remote_password VARCHAR(200) NOT NULL DEFAULT ''; \ No newline at end of file +ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ''; \ No newline at end of file -- GitLab From b1f0c209804d3b627ab62fcba53e32df289ec8b6 Mon Sep 17 00:00:00 2001 From: Hj Ahmad Rasyid Hj Ismail Date: Wed, 6 Jan 2021 07:32:57 +0100 Subject: [PATCH 125/403] Update installer_base.lib.php to overwrite self-signed certificate with LE SSL certs when possible. A temporary backup is made to be restored if LE SSL certs failed to be issued. It will be made permanent if LE SSL certs are successfully issued. To resolve raised issue https://git.ispconfig.org/ispconfig/ispconfig3/-/issues/5919 --- install/lib/installer_base.lib.php | 74 ++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 7bb75d8c37..6996198e7a 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2871,8 +2871,13 @@ class installer_base { $ip_address_match = true; } + // Get subject and issuer of ispserver.crt to check if it is self-signed cert + if (file_exists($ssl_crt_file)) { + $crt_subject = exec("openssl x509 -in ".escapeshellarg($ssl_crt_file)." -inform PEM -noout -subject"); + $crt_issuer = exec("openssl x509 -in ".escapeshellarg($ssl_crt_file)." -inform PEM -noout -issuer"); + } - if ((!@is_dir($acme_cert_dir) || !@file_exists($check_acme_file) || !@file_exists($ssl_crt_file) || md5_file($check_acme_file) != md5_file($ssl_crt_file)) && $ip_address_match == true) { + if ((@file_exists($ssl_crt_file) && ($crt_subject == $crt_issuer)) || (!@is_dir($acme_cert_dir) || !@file_exists($check_acme_file) || !@file_exists($ssl_crt_file) || md5_file($check_acme_file) != md5_file($ssl_crt_file)) && $ip_address_match == true) { // This script is needed earlier to check and open http port 80 or standalone might fail // Make executable and temporary symlink latest letsencrypt pre, post and renew hook script before install @@ -2942,6 +2947,14 @@ class installer_base { $issued_successfully = false; + // Backup existing ispserver ssl files + if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) + rename($ssl_crt_file, $ssl_crt_file.'-temporary.bak'); + if(file_exists($ssl_key_file) || is_link($ssl_key_file)) + rename($ssl_key_file, $ssl_key_file.'-temporary.bak'); + if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) + rename($ssl_pem_file, $ssl_pem_file.'-temporary.bak'); + // Attempt to use Neilpang acme.sh first, as it is now the preferred LE client if (is_executable($acme)) { @@ -2958,18 +2971,6 @@ class installer_base { if($ret == 0 || ($ret == 2 && file_exists($check_acme_file))) { // acme.sh returns with 2 on issue for already existing certificate - - // Backup existing ispserver ssl files - if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) { - rename($ssl_crt_file, $ssl_crt_file . '-' . $date->format('YmdHis') . '.bak'); - } - if(file_exists($ssl_key_file) || is_link($ssl_key_file)) { - rename($ssl_key_file, $ssl_key_file . '-' . $date->format('YmdHis') . '.bak'); - } - if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) { - rename($ssl_pem_file, $ssl_pem_file . '-' . $date->format('YmdHis') . '.bak'); - } - $check_acme_file = $ssl_crt_file; // Define LE certs name and path, then install them @@ -2978,8 +2979,26 @@ class installer_base { $acme_chain = "--fullchain-file " . escapeshellarg($ssl_crt_file); exec("$acme --install-cert -d " . escapeshellarg($hostname) . " $acme_key $acme_chain"); $issued_successfully = true; + + // Make temporary backup of self-signed certs permanent + if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) + rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file.'-'.$date->format('YmdHis').'.bak'); + if(file_exists($ssl_key_file.'-temporary.bak') || is_link($ssl_key_file.'-temporary.bak')) + rename($ssl_key_file.'-temporary.bak', $ssl_key_file.'-'.$date->format('YmdHis').'.bak'); + if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak')) + rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file.'-'.$date->format('YmdHis').'.bak'); + } else { swriteln('Issuing certificate via acme.sh failed. Please check that your hostname can be verified by letsencrypt'); + + // Restore temporary backup of self-signed certs + if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) + rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file); + if(file_exists($ssl_key_file.'-temporary.bak') || is_link($ssl_key_file.'-temporary.bak')) + rename($ssl_key_file.'-temporary.bak', $ssl_key_file); + if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak')) + rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file); + } // Else, we attempt to use the official LE certbot client certbot } else { @@ -3011,24 +3030,31 @@ class installer_base { if($ret == 0) { // certbot returns with 0 on issue for already existing certificate - // Backup existing ispserver ssl files - if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) { - rename($ssl_crt_file, $ssl_crt_file . '-' . $date->format('YmdHis') . '.bak'); - } - if(file_exists($ssl_key_file) || is_link($ssl_key_file)) { - rename($ssl_key_file, $ssl_key_file . '-' . $date->format('YmdHis') . '.bak'); - } - if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) { - rename($ssl_pem_file, $ssl_pem_file . '-' . $date->format('YmdHis') . '.bak'); - } - $acme_cert_dir = '/etc/letsencrypt/live/' . $hostname; symlink($acme_cert_dir . '/fullchain.pem', $ssl_crt_file); symlink($acme_cert_dir . '/privkey.pem', $ssl_key_file); $issued_successfully = true; + + // Make temporary backup of self-signed certs permanent + if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) + rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file.'-'.$date->format('YmdHis').'.bak'); + if(file_exists($ssl_key_file.'-temporary.bak') || is_link($ssl_key_file.'-temporary.bak')) + rename($ssl_key_file.'-temporary.bak', $ssl_key_file.'-'.$date->format('YmdHis').'.bak'); + if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak')) + rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file.'-'.$date->format('YmdHis').'.bak'); + } else { swriteln('Issuing certificate via certbot failed. Please check log files and make sure that your hostname can be verified by letsencrypt'); + + // Restore temporary backup of self-signed certs + if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) + rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file); + if(file_exists($ssl_key_file.'-temporary.bak') || is_link($ssl_key_file.'-temporary.bak')) + rename($ssl_key_file.'-temporary.bak', $ssl_key_file); + if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak')) + rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file); + } } else { swriteln('Did not find any valid acme client (acme.sh or certbot)'); -- GitLab From f2bfd8c6f1d70048bdbfc5b125adf62a1c95daf1 Mon Sep 17 00:00:00 2001 From: Thom Date: Wed, 6 Jan 2021 15:28:32 +0100 Subject: [PATCH 126/403] Fix typo (SEPCIAL -> SPECIAL) (#6001) --- install/tpl/debian6_dovecot2.conf.master | 2 +- install/tpl/fedora_dovecot2.conf.master | 2 +- install/tpl/opensuse_dovecot2.conf.master | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index f933463b0b..5032488a6f 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -111,7 +111,7 @@ plugin { quota_status_overquota = "552 5.2.2 Mailbox is full" } -imap_capability=+SEPCIAL-USE XLIST +imap_capability=+SPECIAL-USE XLIST namespace inbox { inbox = yes separator = . diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index a217e28d99..81d71a37fe 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -105,7 +105,7 @@ plugin { quota_status_overquota = "552 5.2.2 Mailbox is full" } -imap_capability=+SEPCIAL-USE XLIST +imap_capability=+SPECIAL-USE XLIST namespace inbox { inbox = yes separator = . diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master index 7dc715ef69..fbbb102e1a 100644 --- a/install/tpl/opensuse_dovecot2.conf.master +++ b/install/tpl/opensuse_dovecot2.conf.master @@ -104,7 +104,7 @@ plugin { quota_status_overquota = "552 5.2.2 Mailbox is full" } -imap_capability=+SEPCIAL-USE XLIST +imap_capability=+SPECIAL-USE XLIST namespace inbox { inbox = yes separator = . -- GitLab From 1b79629119251e3cf0c948a8cf90bfe057791fcd Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 10 Jan 2021 18:16:38 +0100 Subject: [PATCH 127/403] Remove descriptions from forms (#6008) --- interface/web/admin/form/dbsync.tform.php | 2 +- interface/web/admin/form/groups.tform.php | 2 +- interface/web/admin/form/iptables.tform.php | 2 +- interface/web/admin/form/server_config.tform.php | 2 +- interface/web/admin/form/server_ip.tform.php | 2 +- interface/web/admin/form/server_ip_map.tform.php | 6 +++--- interface/web/admin/form/server_php.tform.php | 2 +- interface/web/admin/form/software_package.tform.php | 2 +- interface/web/admin/form/software_repo.tform.php | 2 +- interface/web/admin/form/system_config.tform.php | 2 +- interface/web/admin/form/tpl_default.tform.php | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/interface/web/admin/form/dbsync.tform.php b/interface/web/admin/form/dbsync.tform.php index 8a4181b888..b854db81f9 100644 --- a/interface/web/admin/form/dbsync.tform.php +++ b/interface/web/admin/form/dbsync.tform.php @@ -94,7 +94,7 @@ unset($form); $form['title'] = 'DB sync'; -$form['description'] = 'ISPConfig database synchronisation tool.'; +//$form['description'] = 'ISPConfig database synchronisation tool.'; $form['name'] = 'dbsync'; $form['action'] = 'dbsync_edit.php'; $form['db_table'] = 'sys_dbsync'; diff --git a/interface/web/admin/form/groups.tform.php b/interface/web/admin/form/groups.tform.php index 5bcbe6279f..6a2b3acb9f 100644 --- a/interface/web/admin/form/groups.tform.php +++ b/interface/web/admin/form/groups.tform.php @@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "Groups"; -$form["description"] = "groups_description"; +//$form["description"] = "groups_description"; $form["name"] = "groups"; $form["action"] = "groups_edit.php"; $form["db_table"] = "sys_group"; diff --git a/interface/web/admin/form/iptables.tform.php b/interface/web/admin/form/iptables.tform.php index 76d747020d..d36ade42b8 100644 --- a/interface/web/admin/form/iptables.tform.php +++ b/interface/web/admin/form/iptables.tform.php @@ -1,7 +1,7 @@ array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', - 'validators' => array ( + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'source_ip_empty'), ), 'default' => '', @@ -68,7 +68,7 @@ $form["tabs"]['server_ip_map'] = array ( 'destination_ip' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', - 'validators' => array ( + 'validators' => array ( 0 => array ( 'type' => 'ISIPV4', 'errmsg'=> 'ip_error_wrong'), 1 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'destination_ip_empty'), ), diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php index 59eb7b4a6f..2a37a1e6d1 100644 --- a/interface/web/admin/form/server_php.tform.php +++ b/interface/web/admin/form/server_php.tform.php @@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "Additional PHP Versions"; -$form["description"] = "Form to edit additional PHP versions"; +//$form["description"] = "Form to edit additional PHP versions"; $form["name"] = "server_php"; $form["action"] = "server_php_edit.php"; $form["db_table"] = "server_php"; diff --git a/interface/web/admin/form/software_package.tform.php b/interface/web/admin/form/software_package.tform.php index b8368d5457..888bc6df1a 100644 --- a/interface/web/admin/form/software_package.tform.php +++ b/interface/web/admin/form/software_package.tform.php @@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "Software Package"; -$form["description"] = "Modify software package details"; +//$form["description"] = "Modify software package details"; $form["name"] = "software_package"; $form["action"] = "software_package_edit.php"; $form["db_table"] = "software_package"; diff --git a/interface/web/admin/form/software_repo.tform.php b/interface/web/admin/form/software_repo.tform.php index cbf68b3a35..2c208ce216 100644 --- a/interface/web/admin/form/software_repo.tform.php +++ b/interface/web/admin/form/software_repo.tform.php @@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "Software Repository"; -$form["description"] = "Software Repository which may contain addons or updates"; +//$form["description"] = "Software Repository which may contain addons or updates"; $form["name"] = "software_repo"; $form["action"] = "software_repo_edit.php"; $form["db_table"] = "software_repo"; diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index bbfb921e9a..88d0fef26c 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -34,7 +34,7 @@ */ $form["title"] = "system_config_title"; -$form["description"] = "system_config_desc_txt"; +//$form["description"] = "system_config_desc_txt"; $form["name"] = "system_config"; $form["action"] = "system_config_edit.php"; $form["db_table"] = "sys_ini"; diff --git a/interface/web/admin/form/tpl_default.tform.php b/interface/web/admin/form/tpl_default.tform.php index baa84d7b30..804cfd9542 100644 --- a/interface/web/admin/form/tpl_default.tform.php +++ b/interface/web/admin/form/tpl_default.tform.php @@ -60,7 +60,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "tpl_default_head_txt"; -$form["description"] = "tpl_default_desc_txt"; +//$form["description"] = "tpl_default_desc_txt"; $form["name"] = "tpl_default"; $form["action"] = "tpl_default.php"; $form["db_table"] = "sys_theme"; -- GitLab From 910e1023b0bcb9d5e633fd32c9da079d7debc0ff Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 10 Jan 2021 18:31:45 +0100 Subject: [PATCH 128/403] Add missing label for php_fpm_socket_dir (#6009) --- interface/web/admin/lib/lang/ar_server_php.lng | 1 + interface/web/admin/lib/lang/bg_server_php.lng | 1 + interface/web/admin/lib/lang/br_server_php.lng | 1 + interface/web/admin/lib/lang/ca_server_php.lng | 1 + interface/web/admin/lib/lang/cz_server_php.lng | 1 + interface/web/admin/lib/lang/de_server_php.lng | 1 + interface/web/admin/lib/lang/dk_server_php.lng | 1 + interface/web/admin/lib/lang/el_server_php.lng | 1 + interface/web/admin/lib/lang/en_server_php.lng | 1 + interface/web/admin/lib/lang/es_server_php.lng | 1 + interface/web/admin/lib/lang/fi_server_php.lng | 1 + interface/web/admin/lib/lang/fr_server_php.lng | 1 + interface/web/admin/lib/lang/hr_server_php.lng | 1 + interface/web/admin/lib/lang/hu_server_php.lng | 1 + interface/web/admin/lib/lang/id_server_php.lng | 1 + interface/web/admin/lib/lang/it_server_php.lng | 1 + interface/web/admin/lib/lang/ja_server_php.lng | 1 + interface/web/admin/lib/lang/nl_server_php.lng | 1 + interface/web/admin/lib/lang/pl_server_php.lng | 1 + interface/web/admin/lib/lang/pt_server_php.lng | 1 + interface/web/admin/lib/lang/ro_server_php.lng | 1 + interface/web/admin/lib/lang/ru_server_php.lng | 1 + interface/web/admin/lib/lang/se_server_php.lng | 1 + interface/web/admin/lib/lang/sk_server_php.lng | 1 + interface/web/admin/lib/lang/tr_server_php.lng | 1 + interface/web/admin/templates/server_php_fpm_edit.htm | 8 ++++---- 26 files changed, 29 insertions(+), 4 deletions(-) diff --git a/interface/web/admin/lib/lang/ar_server_php.lng b/interface/web/admin/lib/lang/ar_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/ar_server_php.lng +++ b/interface/web/admin/lib/lang/ar_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/bg_server_php.lng b/interface/web/admin/lib/lang/bg_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/bg_server_php.lng +++ b/interface/web/admin/lib/lang/bg_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng index 6524531be5..97b70c2e8f 100644 --- a/interface/web/admin/lib/lang/br_server_php.lng +++ b/interface/web/admin/lib/lang/br_server_php.lng @@ -13,6 +13,7 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Diretório PHP.ini'; $wb['php_fpm_init_script_txt'] = 'Caminho do script de inicialização PHP-FPM'; $wb['php_fpm_ini_dir_txt'] = 'Caminho do diretório PHP.ini'; $wb['php_fpm_pool_dir_txt'] = 'Caminho do diretório da pool PHP-FPM'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Ativo'; $wb['php_in_use_error'] = 'Esta versão PHP está em uso.'; $wb['php_name_in_use_error'] = 'O nome não pode ser modificado.'; diff --git a/interface/web/admin/lib/lang/ca_server_php.lng b/interface/web/admin/lib/lang/ca_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/ca_server_php.lng +++ b/interface/web/admin/lib/lang/ca_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng index d955c3b633..ab255bcea7 100644 --- a/interface/web/admin/lib/lang/cz_server_php.lng +++ b/interface/web/admin/lib/lang/cz_server_php.lng @@ -13,6 +13,7 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Cesta k php.ini adresáři'; $wb['php_fpm_init_script_txt'] = 'Cesta k PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Cesta k php.ini adresáři'; $wb['php_fpm_pool_dir_txt'] = 'Cesta k PHP-FPM pool adresáři'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Aktivní'; $wb['php_in_use_error'] = 'This PHP-Version is in use.'; $wb['php_name_in_use_error'] = 'The name can not be changed.'; diff --git a/interface/web/admin/lib/lang/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng index f43e79b4af..b3ad5d9913 100644 --- a/interface/web/admin/lib/lang/de_server_php.lng +++ b/interface/web/admin/lib/lang/de_server_php.lng @@ -13,6 +13,7 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Pfad zum php.ini Verzeichnis'; $wb['php_fpm_init_script_txt'] = 'Pfad zum PHP-FPM Init Script'; $wb['php_fpm_ini_dir_txt'] = 'Pfad zum php.ini Verzeichnis'; $wb['php_fpm_pool_dir_txt'] = 'Pfad zum PHP-FPM Pool Verzeichnis'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Aktiv'; $wb['php_in_use_error'] = 'Diese PHP-Version wird noch benutzt.'; $wb['php_name_in_use_error'] = 'Der Name kann nicht geändert werden.'; diff --git a/interface/web/admin/lib/lang/dk_server_php.lng b/interface/web/admin/lib/lang/dk_server_php.lng index ff8586f5ea..b21f00eec9 100644 --- a/interface/web/admin/lib/lang/dk_server_php.lng +++ b/interface/web/admin/lib/lang/dk_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Sti til php.ini mappe'; $wb['php_fpm_init_script_txt'] = 'Sti til PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Sti til php.ini mappe'; $wb['php_fpm_pool_dir_txt'] = 'Sti til PHP-FPM pool mappe'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/el_server_php.lng b/interface/web/admin/lib/lang/el_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/el_server_php.lng +++ b/interface/web/admin/lib/lang/el_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/en_server_php.lng b/interface/web/admin/lib/lang/en_server_php.lng index 9d322804bb..491be1aae2 100644 --- a/interface/web/admin/lib/lang/en_server_php.lng +++ b/interface/web/admin/lib/lang/en_server_php.lng @@ -13,6 +13,7 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; $wb['php_in_use_error'] = 'This PHP-Version is in use.'; $wb['php_name_in_use_error'] = 'The name can not be changed.'; diff --git a/interface/web/admin/lib/lang/es_server_php.lng b/interface/web/admin/lib/lang/es_server_php.lng index 762fa0ed8c..478bd07eeb 100644 --- a/interface/web/admin/lib/lang/es_server_php.lng +++ b/interface/web/admin/lib/lang/es_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fpm_init_script_txt'] = 'Ruta al archivo de arranque de PHP-FPM'; $wb['php_fpm_pool_dir_txt'] = 'Ruta al directorio de procesos de PHP-FPM'; $wb['server_id_txt'] = 'Servidor'; $wb['server_php_name_error_empty'] = 'El campo Nombre no puede estar vacío.'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/fi_server_php.lng b/interface/web/admin/lib/lang/fi_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/fi_server_php.lng +++ b/interface/web/admin/lib/lang/fi_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/fr_server_php.lng b/interface/web/admin/lib/lang/fr_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/fr_server_php.lng +++ b/interface/web/admin/lib/lang/fr_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/hr_server_php.lng b/interface/web/admin/lib/lang/hr_server_php.lng index 5bfc1dd6d2..d6a95e74f0 100644 --- a/interface/web/admin/lib/lang/hr_server_php.lng +++ b/interface/web/admin/lib/lang/hr_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Putanja do php.ini direktorija'; $wb['php_fpm_init_script_txt'] = 'Putanja do PHP-FPM init skripte'; $wb['php_fpm_ini_dir_txt'] = 'Putanja do php.ini direktorija'; $wb['php_fpm_pool_dir_txt'] = 'Putanja do PHP-FPM pool direktorija'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/hu_server_php.lng b/interface/web/admin/lib/lang/hu_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/hu_server_php.lng +++ b/interface/web/admin/lib/lang/hu_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/id_server_php.lng b/interface/web/admin/lib/lang/id_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/id_server_php.lng +++ b/interface/web/admin/lib/lang/id_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/it_server_php.lng b/interface/web/admin/lib/lang/it_server_php.lng index 805528f376..42d926d83b 100644 --- a/interface/web/admin/lib/lang/it_server_php.lng +++ b/interface/web/admin/lib/lang/it_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Percorso per php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Percorso per PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Percorso per php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Percorso per PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/ja_server_php.lng b/interface/web/admin/lib/lang/ja_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/ja_server_php.lng +++ b/interface/web/admin/lib/lang/ja_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/nl_server_php.lng b/interface/web/admin/lib/lang/nl_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/nl_server_php.lng +++ b/interface/web/admin/lib/lang/nl_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/pl_server_php.lng b/interface/web/admin/lib/lang/pl_server_php.lng index 5a7c7b6f9b..207be27c6f 100644 --- a/interface/web/admin/lib/lang/pl_server_php.lng +++ b/interface/web/admin/lib/lang/pl_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Ścieżka do katalogu php.ini'; $wb['php_fpm_init_script_txt'] = 'Ścieżka do skryptu inicjującego PHP-FPM'; $wb['php_fpm_ini_dir_txt'] = 'Ścieżka do katalogu php.ini'; $wb['php_fpm_pool_dir_txt'] = 'Ścieżka do katalogu pool PHP-FPM'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/pt_server_php.lng b/interface/web/admin/lib/lang/pt_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/pt_server_php.lng +++ b/interface/web/admin/lib/lang/pt_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/ro_server_php.lng b/interface/web/admin/lib/lang/ro_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/ro_server_php.lng +++ b/interface/web/admin/lib/lang/ro_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/ru_server_php.lng b/interface/web/admin/lib/lang/ru_server_php.lng index 854b8a3c23..cfcf8de4e5 100644 --- a/interface/web/admin/lib/lang/ru_server_php.lng +++ b/interface/web/admin/lib/lang/ru_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Путь к каталогу php.ini FastCGI'; $wb['php_fpm_init_script_txt'] = 'Путь к скрипту нициализации PHP-FPM'; $wb['php_fpm_ini_dir_txt'] = 'Путь к каталогу php.ini PHP-FPM'; $wb['php_fpm_pool_dir_txt'] = 'Путь до каталога пула PHP-FPM'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/se_server_php.lng b/interface/web/admin/lib/lang/se_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/se_server_php.lng +++ b/interface/web/admin/lib/lang/se_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/sk_server_php.lng b/interface/web/admin/lib/lang/sk_server_php.lng index 179a8fc357..24ad3c4be8 100644 --- a/interface/web/admin/lib/lang/sk_server_php.lng +++ b/interface/web/admin/lib/lang/sk_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_init_script_txt'] = 'Path to the PHP-FPM init script'; $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; ?> diff --git a/interface/web/admin/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng index e0437e94b3..d4ad338db1 100644 --- a/interface/web/admin/lib/lang/tr_server_php.lng +++ b/interface/web/admin/lib/lang/tr_server_php.lng @@ -13,5 +13,6 @@ $wb['php_fastcgi_ini_dir_txt'] = 'php.ini Klasörünün Yolu'; $wb['php_fpm_init_script_txt'] = 'PHP-FPM Başlatma Betiğinin Yolu'; $wb['php_fpm_ini_dir_txt'] = 'php.ini Klasörünün Yolu'; $wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Havuz Klasörünün Yolu'; +$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Etkin'; ?> diff --git a/interface/web/admin/templates/server_php_fpm_edit.htm b/interface/web/admin/templates/server_php_fpm_edit.htm index 5e4cae9ac5..c3369f1fdb 100644 --- a/interface/web/admin/templates/server_php_fpm_edit.htm +++ b/interface/web/admin/templates/server_php_fpm_edit.htm @@ -8,12 +8,12 @@
- +
- - + + - +
-- GitLab From c6827aa608e3923de4b0bdee2c624edbb86eff16 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 10 Jan 2021 18:36:34 +0100 Subject: [PATCH 129/403] Add missing translations from !950 --- interface/web/admin/lib/lang/ar_server_php.lng | 2 ++ interface/web/admin/lib/lang/bg_server_php.lng | 2 ++ interface/web/admin/lib/lang/br_server_php.lng | 1 + interface/web/admin/lib/lang/ca_server_php.lng | 2 ++ interface/web/admin/lib/lang/cz_server_php.lng | 1 + interface/web/admin/lib/lang/dk_server_php.lng | 2 ++ interface/web/admin/lib/lang/el_server_php.lng | 2 ++ interface/web/admin/lib/lang/es_server_php.lng | 2 ++ interface/web/admin/lib/lang/fi_server_php.lng | 2 ++ interface/web/admin/lib/lang/fr_server_php.lng | 2 ++ interface/web/admin/lib/lang/hr_server_php.lng | 2 ++ interface/web/admin/lib/lang/hu_server_php.lng | 2 ++ interface/web/admin/lib/lang/id_server_php.lng | 2 ++ interface/web/admin/lib/lang/it_server_php.lng | 2 ++ interface/web/admin/lib/lang/ja_server_php.lng | 2 ++ interface/web/admin/lib/lang/nl_server_php.lng | 2 ++ interface/web/admin/lib/lang/pl_server_php.lng | 2 ++ interface/web/admin/lib/lang/pt_server_php.lng | 2 ++ interface/web/admin/lib/lang/ro_server_php.lng | 2 ++ interface/web/admin/lib/lang/ru_server_php.lng | 2 ++ interface/web/admin/lib/lang/se_server_php.lng | 2 ++ interface/web/admin/lib/lang/sk_server_php.lng | 2 ++ interface/web/admin/lib/lang/tr_server_php.lng | 2 ++ 23 files changed, 44 insertions(+) diff --git a/interface/web/admin/lib/lang/ar_server_php.lng b/interface/web/admin/lib/lang/ar_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/ar_server_php.lng +++ b/interface/web/admin/lib/lang/ar_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/bg_server_php.lng b/interface/web/admin/lib/lang/bg_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/bg_server_php.lng +++ b/interface/web/admin/lib/lang/bg_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng index 97b70c2e8f..d0a1015833 100644 --- a/interface/web/admin/lib/lang/br_server_php.lng +++ b/interface/web/admin/lib/lang/br_server_php.lng @@ -17,3 +17,4 @@ $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Ativo'; $wb['php_in_use_error'] = 'Esta versão PHP está em uso.'; $wb['php_name_in_use_error'] = 'O nome não pode ser modificado.'; +?> diff --git a/interface/web/admin/lib/lang/ca_server_php.lng b/interface/web/admin/lib/lang/ca_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/ca_server_php.lng +++ b/interface/web/admin/lib/lang/ca_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng index ab255bcea7..c1c67f05ef 100644 --- a/interface/web/admin/lib/lang/cz_server_php.lng +++ b/interface/web/admin/lib/lang/cz_server_php.lng @@ -17,3 +17,4 @@ $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Aktivní'; $wb['php_in_use_error'] = 'This PHP-Version is in use.'; $wb['php_name_in_use_error'] = 'The name can not be changed.'; +?> diff --git a/interface/web/admin/lib/lang/dk_server_php.lng b/interface/web/admin/lib/lang/dk_server_php.lng index b21f00eec9..db6ef1f98a 100644 --- a/interface/web/admin/lib/lang/dk_server_php.lng +++ b/interface/web/admin/lib/lang/dk_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Sti til php.ini mappe'; $wb['php_fpm_pool_dir_txt'] = 'Sti til PHP-FPM pool mappe'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/el_server_php.lng b/interface/web/admin/lib/lang/el_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/el_server_php.lng +++ b/interface/web/admin/lib/lang/el_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/es_server_php.lng b/interface/web/admin/lib/lang/es_server_php.lng index 478bd07eeb..df2f0778f4 100644 --- a/interface/web/admin/lib/lang/es_server_php.lng +++ b/interface/web/admin/lib/lang/es_server_php.lng @@ -15,4 +15,6 @@ $wb['server_id_txt'] = 'Servidor'; $wb['server_php_name_error_empty'] = 'El campo Nombre no puede estar vacío.'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/fi_server_php.lng b/interface/web/admin/lib/lang/fi_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/fi_server_php.lng +++ b/interface/web/admin/lib/lang/fi_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/fr_server_php.lng b/interface/web/admin/lib/lang/fr_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/fr_server_php.lng +++ b/interface/web/admin/lib/lang/fr_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/hr_server_php.lng b/interface/web/admin/lib/lang/hr_server_php.lng index d6a95e74f0..15ec1b30f5 100644 --- a/interface/web/admin/lib/lang/hr_server_php.lng +++ b/interface/web/admin/lib/lang/hr_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Putanja do php.ini direktorija'; $wb['php_fpm_pool_dir_txt'] = 'Putanja do PHP-FPM pool direktorija'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/hu_server_php.lng b/interface/web/admin/lib/lang/hu_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/hu_server_php.lng +++ b/interface/web/admin/lib/lang/hu_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/id_server_php.lng b/interface/web/admin/lib/lang/id_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/id_server_php.lng +++ b/interface/web/admin/lib/lang/id_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/it_server_php.lng b/interface/web/admin/lib/lang/it_server_php.lng index 42d926d83b..d85b5cd7da 100644 --- a/interface/web/admin/lib/lang/it_server_php.lng +++ b/interface/web/admin/lib/lang/it_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Percorso per php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Percorso per PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/ja_server_php.lng b/interface/web/admin/lib/lang/ja_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/ja_server_php.lng +++ b/interface/web/admin/lib/lang/ja_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/nl_server_php.lng b/interface/web/admin/lib/lang/nl_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/nl_server_php.lng +++ b/interface/web/admin/lib/lang/nl_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/pl_server_php.lng b/interface/web/admin/lib/lang/pl_server_php.lng index 207be27c6f..de4ce60ac1 100644 --- a/interface/web/admin/lib/lang/pl_server_php.lng +++ b/interface/web/admin/lib/lang/pl_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Ścieżka do katalogu php.ini'; $wb['php_fpm_pool_dir_txt'] = 'Ścieżka do katalogu pool PHP-FPM'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/pt_server_php.lng b/interface/web/admin/lib/lang/pt_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/pt_server_php.lng +++ b/interface/web/admin/lib/lang/pt_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/ro_server_php.lng b/interface/web/admin/lib/lang/ro_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/ro_server_php.lng +++ b/interface/web/admin/lib/lang/ro_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/ru_server_php.lng b/interface/web/admin/lib/lang/ru_server_php.lng index cfcf8de4e5..c5c4942b8e 100644 --- a/interface/web/admin/lib/lang/ru_server_php.lng +++ b/interface/web/admin/lib/lang/ru_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Путь к каталогу php.ini PHP-FPM'; $wb['php_fpm_pool_dir_txt'] = 'Путь до каталога пула PHP-FPM'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/se_server_php.lng b/interface/web/admin/lib/lang/se_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/se_server_php.lng +++ b/interface/web/admin/lib/lang/se_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/sk_server_php.lng b/interface/web/admin/lib/lang/sk_server_php.lng index 24ad3c4be8..491be1aae2 100644 --- a/interface/web/admin/lib/lang/sk_server_php.lng +++ b/interface/web/admin/lib/lang/sk_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory'; $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Active'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> diff --git a/interface/web/admin/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng index d4ad338db1..71b130e3d2 100644 --- a/interface/web/admin/lib/lang/tr_server_php.lng +++ b/interface/web/admin/lib/lang/tr_server_php.lng @@ -15,4 +15,6 @@ $wb['php_fpm_ini_dir_txt'] = 'php.ini Klasörünün Yolu'; $wb['php_fpm_pool_dir_txt'] = 'PHP-FPM Havuz Klasörünün Yolu'; $wb['php_fpm_socket_dir_txt'] = 'PHP-FPM socket directory'; $wb['active_txt'] = 'Etkin'; +$wb['php_in_use_error'] = 'This PHP-Version is in use.'; +$wb['php_name_in_use_error'] = 'The name can not be changed.'; ?> -- GitLab From 61b56b28aaecb50479d9cacad8884c56a4a432ad Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Mon, 11 Jan 2021 17:47:20 +0100 Subject: [PATCH 130/403] allow custom rspamd url (Implements #6010) --- install/tpl/server.ini.master | 1 + interface/web/admin/form/server_config.tform.php | 13 +++++++++++++ interface/web/admin/server_config_edit.php | 8 ++++++-- .../web/admin/templates/server_config_mail_edit.htm | 8 +++++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 175617605a..028fb68a6b 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -59,6 +59,7 @@ overquota_notify_client=y overquota_notify_freq=7 overquota_notify_onok=n sendmail_path=/usr/sbin/sendmail +rspamd_url= [getmail] getmail_config_dir=/etc/getmail diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 7d1e1526f5..1a986d98dd 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -717,6 +717,19 @@ $form["tabs"]['mail'] = array( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), + 'rspamd_url' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'filters' => array( + 0 => array( 'event' => 'SAVE', 'type' => 'IDNTOASCII'), + 1 => array( 'event' => 'SHOW', 'type' => 'IDNTOUTF8'), + 2 => array( 'event' => 'SAVE', 'type' => 'TOLOWER') + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), //################################# // END Datatable fields //################################# diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php index 339ac2f2f5..9a54c9fb16 100644 --- a/interface/web/admin/server_config_edit.php +++ b/interface/web/admin/server_config_edit.php @@ -90,8 +90,12 @@ class page_action extends tform_actions { $this->dataRecord = $app->getconf->get_server_config($server_id, $section); if($section == 'mail'){ - $server_config = $app->getconf->get_server_config($server_id, 'server'); - $rspamd_url = 'https://'.$server_config['hostname'].':8081/rspamd/'; + if(trim($this->dataRecord['rspamd_url'] == '')) { + $server_config = $app->getconf->get_server_config($server_id, 'server'); + $rspamd_url = 'https://'.$server_config['hostname'].':8081/rspamd/'; + } else { + $rspamd_url = $this->dataRecord['rspamd_url']; + } } } diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index c26cff24ba..76ed5ef4fb 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -49,7 +49,13 @@
- +
+ + + + +
+
-- GitLab From 8d65452b4f38e96e114809aba5a3c604965d0a6a Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Tue, 12 Jan 2021 06:47:53 +0100 Subject: [PATCH 131/403] remove duplicate php-version-checks from installer / updater --- install/install.php | 1 - install/lib/installer_base.lib.php | 7 ------- install/update.php | 1 - 3 files changed, 9 deletions(-) diff --git a/install/install.php b/install/install.php index 0df226ee10..7bc3836223 100644 --- a/install/install.php +++ b/install/install.php @@ -146,7 +146,6 @@ include_once 'dist/conf/'.$dist['confid'].'.conf.php'; //** Installer Interface //**************************************************************************************************** $inst = new installer(); -if (!$inst->get_php_version()) die('ISPConfig requires PHP '.$inst->min_php."\n"); $retval=shell_exec("which which"); if (empty($retval)) die ("ISPConfig requires which \n"); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 8a7fb413ec..94042c6931 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -35,7 +35,6 @@ class installer_base { var $db; public $install_ispconfig_interface = true; public $is_update = false; // true if it is an update, falsi if it is a new install - public $min_php = '5.4'; // minimal php-version for update / install protected $mailman_group = 'list'; @@ -151,12 +150,6 @@ class installer_base { } } - //** Detect PHP-Version - public function get_php_version() { - if(version_compare(PHP_VERSION, $this->min_php, '<')) return false; - else return true; - } - public function crypt_password($cleartext_password, $charset = 'UTF-8') { if($charset != 'UTF-8') { $cleartext_password = mb_convert_encoding($cleartext_password, $charset, 'UTF-8'); diff --git a/install/update.php b/install/update.php index 4043647d8e..46031f77bb 100644 --- a/install/update.php +++ b/install/update.php @@ -185,7 +185,6 @@ $conf['server_id'] = intval($conf_old["server_id"]); $conf['ispconfig_log_priority'] = $conf_old["log_priority"]; $inst = new installer(); -if (!$inst->get_php_version()) die('ISPConfig requieres PHP '.$inst->min_php."\n"); $inst->is_update = true; $inst->check_prerequisites(); -- GitLab From c1e666f369252bfea0586a6e5a706bbf020cf8ad Mon Sep 17 00:00:00 2001 From: Thom Date: Tue, 12 Jan 2021 19:41:10 +0100 Subject: [PATCH 132/403] Update README.md --- README.md | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1ffa151993..f59f104bb1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,43 @@ # ISPConfig - Hosting Control Panel - +![alt text](https://www.ispconfig.org/wp-content/themes/ispconfig/images/ispconfig_logo.png "") \ Development branch: [![pipeline status](https://git.ispconfig.org/ispconfig/ispconfig3/badges/develop/pipeline.svg)](https://git.ispconfig.org/ispconfig/ispconfig3/commits/develop) - +## Functions - Manage multiple servers from one control panel -- Web server management (Apache2 and nginx) -- Mail server management (with virtual mail users) -- DNS server management (BIND and MyDNS) +- Single server, multiserver and mirrored clusters. +- Webserver management (Apache2 and nginx) +- Mailserver management +- DNS server management (BIND and PowerDNS) - Virtualization (OpenVZ) -- Administrator, reseller and client login -- Configuration mirroring and clusters +- Administrator, reseller, client and mailuser login - Open Source software (BSD license) + +## Supported daemons +- HTTP: Apache2 and nginx +- HTTP stats: Webalizer, GoAccess and AWStats +- Let's Encrypt: Acme.sh and certbot +- SMTP: Postfix +- POP3/IMAP: Dovecot +- Spamfilter: Rspamd and Amavis +- FTP: PureFTPD +- DNS: Bind, PowerDNS +- Database: MariaDB and MySQL + +## Supported operating systems +- Debian 9, 10, and testing +- Ubuntu 16.04 - 20.04 +- CentOS 7 and 8 + +## Auto-install script +You can install ISPConfig with our official autoinstaller: https://git.ispconfig.org/ispconfig/ispconfig-autoinstaller/-/blob/master/README.md + +## Migration tool +The Migration Tool helps you to import data from other control panels (currently ISPConfig 2 and 3 – 3.2, Plesk 10 – 12.5, Plesk Onyx, CPanel** and Confixx 3). For more information, see https://www.ispconfig.org/add-ons/ispconfig-migration-tool/ + +** The Migration Toolkit contains now beta support for migrating CPanel to ISPConfig. + +## Documentation +You can support ISPConfig development by buying the manual: https://www.ispconfig.org/documentation/ + +## Contributing +If you like to contribute to the ISPConfig development, please send an email to: dev [at] ispconfig [dot] org. -- GitLab From 3d52e5e94a1cbbbdd421c8bc4f380f798a091bc4 Mon Sep 17 00:00:00 2001 From: Thom Date: Tue, 12 Jan 2021 19:43:58 +0100 Subject: [PATCH 133/403] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f59f104bb1..544c36e7d6 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Development branch: [![pipeline status](https://git.ispconfig.org/ispconfig/ispc - POP3/IMAP: Dovecot - Spamfilter: Rspamd and Amavis - FTP: PureFTPD -- DNS: Bind, PowerDNS +- DNS: BIND9 and PowerDNS - Database: MariaDB and MySQL ## Supported operating systems -- GitLab From e2b7dfc8e8c2bef60245efefe64f79724b218a90 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 12 Jan 2021 17:26:32 -0700 Subject: [PATCH 134/403] whitelist senders before reject_sender_login_mismatch --- install/tpl/debian_postfix.conf.master | 2 +- install/tpl/fedora_postfix.conf.master | 2 +- install/tpl/gentoo_postfix.conf.master | 2 +- install/tpl/opensuse_postfix.conf.master | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index a6a48e0e02..03077cbe7d 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -27,7 +27,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = yes smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 3cd8357a66..fb284e4885 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -23,7 +23,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = yes smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index f4a1d4025c..8a50cce3cd 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -22,7 +22,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = yes smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 7d3669853a..8186c2ad8a 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -25,7 +25,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = yes smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject -- GitLab From 46e09fdaa656fc723c6ed02cc2714f1ddb69f9ad Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 13 Jan 2021 10:44:00 -0700 Subject: [PATCH 135/403] mail: add allow_send_as to domain catchall --- .../web/mail/form/mail_domain_catchall.tform.php | 6 ++++++ .../web/mail/lib/lang/ar_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/bg_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/br_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/ca_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/cz_mail_domain_catchall.lng | 2 ++ .../web/mail/lib/lang/de_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/dk_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/el_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/en_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/es_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/fi_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/fr_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/hr_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/hu_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/id_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/it_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/ja_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/nl_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/pl_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/pt_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/ro_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/ru_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/se_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/sk_mail_domain_catchall.lng | 3 ++- .../web/mail/lib/lang/tr_mail_domain_catchall.lng | 3 ++- interface/web/mail/templates/mail_alias_edit.htm | 12 ++++++------ .../web/mail/templates/mail_domain_catchall_edit.htm | 6 ++++++ interface/web/mail/templates/mail_forward_edit.htm | 12 ++++++------ 29 files changed, 74 insertions(+), 36 deletions(-) diff --git a/interface/web/mail/form/mail_domain_catchall.tform.php b/interface/web/mail/form/mail_domain_catchall.tform.php index c43aeb3339..95e10354cc 100644 --- a/interface/web/mail/form/mail_domain_catchall.tform.php +++ b/interface/web/mail/form/mail_domain_catchall.tform.php @@ -125,6 +125,12 @@ $form["tabs"]['catchall'] = array ( 'default' => '', 'value' => array('alias' => 'Alias', 'forward'=>'Forward', 'catchall'=>'Catchall') ), + 'allow_send_as' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(1 => 'y', 0 => 'n') + ), 'active' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng index 55cc10358e..b55657faf6 100644 --- a/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/ar_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts for $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng index 06f1f01e11..346ddad909 100644 --- a/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/bg_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Максималният брой записи $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng index 3d4f85af8d..3bc3b78d04 100644 --- a/interface/web/mail/lib/lang/br_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/br_mail_domain_catchall.lng @@ -10,4 +10,5 @@ $wb['domain_txt'] = 'Domínio'; $wb['source_txt'] = 'Origem'; $wb['destination_error_isemail'] = 'Endereço de e-mail de destino é inválido.'; $wb['greylisting_txt'] = 'Habilitar greylist'; -?> +$wb['send_as_txt'] = 'Enviar como'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng index feafd436f6..5499c5a11d 100644 --- a/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/ca_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour v $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'La destination n\'est pas valide.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng index 0ca32d2347..a425cb74a6 100644 --- a/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/cz_mail_domain_catchall.lng @@ -9,3 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Byl dosažen maximální počet košů účtů $wb['source_txt'] = 'Zdroj'; $wb['destination_error_isemail'] = 'Cílová e-mailová adresa není platná.'; $wb['greylisting_txt'] = 'Povolit greylisting'; +$wb['send_as_txt'] = 'Odeslat jako'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng index bef241e0ea..02fe5f1000 100644 --- a/interface/web/mail/lib/lang/de_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/de_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Die maximale Anzahl an Catchall Einträgen für $wb['source_txt'] = 'Quelle'; $wb['destination_error_isemail'] = 'Das Ziel ist keine gültige E-Mail Adresse.'; $wb['greylisting_txt'] = 'Aktiviere Greylisting'; -?> +$wb['send_as_txt'] = 'Senden als'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng index 8c0be49775..1025ca2898 100644 --- a/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/dk_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti for din kon $wb['source_txt'] = 'Kilde'; $wb['destination_error_isemail'] = 'Destinationen er ikke en gyldig e-mail adresse.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng index b04b43cfcc..9d097c2d42 100644 --- a/interface/web/mail/lib/lang/el_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/el_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Το μέγιστο πλήθος των email c $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng index ecbb8d9444..6af61df4b0 100644 --- a/interface/web/mail/lib/lang/en_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/en_mail_domain_catchall.lng @@ -10,4 +10,5 @@ $wb['domain_txt'] = 'Domain'; $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng index 68e03c8c37..8ff7c6530e 100644 --- a/interface/web/mail/lib/lang/es_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/es_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Ha alcanzado el número máx. de correo \\"reco $wb['no_domain_perm'] = 'No tiene permisos para usar este dominio.'; $wb['source_txt'] = 'Origen'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Enviar como'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng index 085a116c2c..743da590ae 100644 --- a/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/fi_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng index 199cd47224..9ba28dcfb6 100644 --- a/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/fr_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Le nombre maximal de comptes collecteurs pour v $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid e-mail address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng index 1c8da72ab3..ef6dc1d0cf 100644 --- a/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/hr_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Iskorišten ja maksimalan broj email catchall r $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng index e26795953d..9e164ea19c 100644 --- a/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/hu_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Nincs több catchall lehetőség.'; $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng index c380957fdc..69f2837385 100644 --- a/interface/web/mail/lib/lang/id_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/id_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email untuk akun Anda $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng index 3345bed9c7..7403fcd663 100644 --- a/interface/web/mail/lib/lang/it_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/it_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'The max. number of email catchall accounts ragg $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng index 6da7d05c56..28e009efe1 100644 --- a/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/ja_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'キャッチオールアカウントが最大 $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng index ee9c1f7678..37e5c80abc 100644 --- a/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/nl_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Het max. aantal e-mail catchall accounts voor u $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng index fad83875ca..644e90e6c5 100644 --- a/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/pl_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall dla Two $wb['source_txt'] = 'Źródło'; $wb['destination_error_isemail'] = 'Cel nie jest poprawnym adresem email.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng index e81afd74b9..8d8bac47bf 100644 --- a/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/pt_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'O número máximo de catchall para este domíni $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng index c0689ca044..9de50490ad 100644 --- a/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/ro_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'numarul maxim de CATCHALL pe contul dumneavoatr $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng index 25349ca497..13ba70c92c 100644 --- a/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/ru_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Максимальное число Макс. $wb['source_txt'] = 'Источник'; $wb['destination_error_isemail'] = 'Не выбран получатель или запись некорректна.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Отправить как'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng index 39c6e6c559..6724ff3204 100644 --- a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Det maximala antalet catchall-adresser för dit $wb['source_txt'] = 'Källa'; $wb['destination_error_isemail'] = 'Destinationen när inte en giltig epostadress.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng index 03c701c6db..012a585ee8 100644 --- a/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/sk_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménových košov pr $wb['source_txt'] = 'Source'; $wb['destination_error_isemail'] = 'Destination is no valid email address.'; $wb['greylisting_txt'] = 'Enable greylisting'; -?> +$wb['send_as_txt'] = 'Send as'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng index bcdf629846..1cb732b58b 100644 --- a/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng +++ b/interface/web/mail/lib/lang/tr_mail_domain_catchall.lng @@ -9,4 +9,5 @@ $wb['limit_mailcatchall_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla tümü $wb['domain_txt'] = 'Etki Alanı'; $wb['source_txt'] = 'Kaynak'; $wb['destination_error_isemail'] = 'Hedef e-posta adresi geçersiz.'; -?> +$wb['send_as_txt'] = 'Gönderen'; +$wb['send_as_exp'] = 'Allow destination to send from email addresses in this domain'; diff --git a/interface/web/mail/templates/mail_alias_edit.htm b/interface/web/mail/templates/mail_alias_edit.htm index 2fd149a348..7cd50b7d6f 100644 --- a/interface/web/mail/templates/mail_alias_edit.htm +++ b/interface/web/mail/templates/mail_alias_edit.htm @@ -17,21 +17,21 @@
- +
- {tmpl_var name='active'} + {tmpl_var name='allow_send_as'} {tmpl_var name='send_as_exp'}
- +
- {tmpl_var name='allow_send_as'} {tmpl_var name='send_as_exp'} + {tmpl_var name='greylisting'}
- +
- {tmpl_var name='greylisting'} + {tmpl_var name='active'}
diff --git a/interface/web/mail/templates/mail_domain_catchall_edit.htm b/interface/web/mail/templates/mail_domain_catchall_edit.htm index 8da10f1f09..f42781c62f 100644 --- a/interface/web/mail/templates/mail_domain_catchall_edit.htm +++ b/interface/web/mail/templates/mail_domain_catchall_edit.htm @@ -10,6 +10,12 @@
+
+ +
+ {tmpl_var name='allow_send_as'} {tmpl_var name='send_as_exp'} +
+
diff --git a/interface/web/mail/templates/mail_forward_edit.htm b/interface/web/mail/templates/mail_forward_edit.htm index 128ad4cd75..908156f31f 100644 --- a/interface/web/mail/templates/mail_forward_edit.htm +++ b/interface/web/mail/templates/mail_forward_edit.htm @@ -15,21 +15,21 @@
- +
- {tmpl_var name='active'} + {tmpl_var name='allow_send_as'} {tmpl_var name='send_as_exp'}
- +
- {tmpl_var name='allow_send_as'} {tmpl_var name='send_as_exp'} + {tmpl_var name='greylisting'}
- +
- {tmpl_var name='greylisting'} + {tmpl_var name='active'}
-- GitLab From ce648830e1fec00ee8a81372edbd2e8d2384c036 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 13 Jan 2021 17:07:54 -0700 Subject: [PATCH 136/403] allow client to use mail whitelist --- .../web/mail/form/mail_whitelist.tform.php | 4 +++ interface/web/mail/lib/module.conf.php | 26 ++++++++++++--- .../web/mail/list/mail_whitelist.list.php | 33 ++++++++++++++----- interface/web/mail/mail_whitelist_del.php | 2 -- interface/web/mail/mail_whitelist_edit.php | 31 +++++++++++------ interface/web/mail/mail_whitelist_list.php | 2 -- 6 files changed, 70 insertions(+), 28 deletions(-) diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php index edd3248371..d4b9baf742 100644 --- a/interface/web/mail/form/mail_whitelist.tform.php +++ b/interface/web/mail/form/mail_whitelist.tform.php @@ -118,5 +118,9 @@ $form["tabs"]['whitelist'] = array ( ) ); +if (! $app->auth->is_admin()) { + $form["tabs"]['whitelist']['fields']['type']['value'] = array('recipient' => 'Recipient', 'sender' => 'Sender'); +} + ?> diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php index d9d97bc8b2..fbe8ffbcb5 100644 --- a/interface/web/mail/lib/module.conf.php +++ b/interface/web/mail/lib/module.conf.php @@ -61,6 +61,20 @@ if($app->auth->get_client_limit($userid, 'mailcatchall') != 0) 'html_id' => 'mail_domain_catchall_list'); } +if(! $app->auth->is_admin()) +{ + $items[] = array( 'title' => 'Email Whitelist', + 'target' => 'content', + 'link' => 'mail/mail_whitelist_list.php', + 'html_id' => 'mail_whitelist_list'); + + + $items[] = array( 'title' => 'Email Blacklist', + 'target' => 'content', + 'link' => 'mail/mail_blacklist_list.php', + 'html_id' => 'mail_blacklist_list'); +} + if($app->auth->get_client_limit($userid, 'mailrouting') != 0) { $items[] = array( 'title' => 'Email Routing', @@ -110,8 +124,8 @@ if($app->auth->get_client_limit($userid, 'spamfilter_wblist') != 0) 'html_id' => 'spamfilter_blacklist_list'); } -if($app->auth->is_admin()) { - +if($app->auth->is_admin()) +{ $items[] = array( 'title' => 'User / Domain', 'target' => 'content', 'link' => 'mail/spamfilter_users_list.php', @@ -191,7 +205,9 @@ $items[] = array( 'title' => 'Mailbox traffic', 'target' => 'content', 'link' => 'mail/mail_user_stats.php', 'html_id' => 'mail_user_stats'); -if($app->auth->get_client_limit($userid, 'backup') == 'y') { + +if($app->auth->get_client_limit($userid, 'backup') == 'y') +{ $items[] = array ( 'title' => 'Backup Stats', 'target' => 'content', @@ -206,8 +222,8 @@ $module['nav'][] = array( 'title' => 'Statistics', //**** Global filters menu $items = array(); -if($_SESSION['s']['user']['typ'] == 'admin') { - +if($app->auth->is_admin()) +{ $items[] = array( 'title' => 'Postfix Whitelist', 'target' => 'content', 'link' => 'mail/mail_whitelist_list.php', diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php index e27edad6da..61f1d9f261 100644 --- a/interface/web/mail/list/mail_whitelist.list.php +++ b/interface/web/mail/list/mail_whitelist.list.php @@ -78,17 +78,32 @@ $liste["item"][] = array( 'field' => "source", 'op' => "like", 'prefix' => "%", 'suffix' => "%", + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => 'SELECT access_id,source FROM mail_access WHERE {AUTHSQL} ORDER BY source', + 'keyfield'=> 'access_id', + 'valuefield'=> 'source' + ), 'width' => "", 'value' => ""); -$liste["item"][] = array( 'field' => "type", - 'datatype' => "VARCHAR", - 'formtype' => "SELECT", - 'op' => "=", - 'prefix' => "", - 'suffix' => "", - 'width' => "", - 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt', 'client' => 'client_txt')); - +if ($app->auth->is_admin()) { + $liste["item"][] = array( 'field' => "type", + 'datatype' => "VARCHAR", + 'formtype' => "SELECT", + 'op' => "=", + 'prefix' => "", + 'suffix' => "", + 'width' => "", + 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt', 'client' => 'client_txt')); +} else { + $liste["item"][] = array( 'field' => "type", + 'datatype' => "VARCHAR", + 'formtype' => "SELECT", + 'op' => "=", + 'prefix' => "", + 'suffix' => "", + 'width' => "", + 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt')); +} ?> diff --git a/interface/web/mail/mail_whitelist_del.php b/interface/web/mail/mail_whitelist_del.php index 06ce88550b..94be228f67 100644 --- a/interface/web/mail/mail_whitelist_del.php +++ b/interface/web/mail/mail_whitelist_del.php @@ -42,8 +42,6 @@ $tform_def_file = "form/mail_whitelist.tform.php"; require_once '../../lib/config.inc.php'; require_once '../../lib/app.inc.php'; -if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges'); - //* Check permissions for module $app->auth->check_module_permissions('mail'); diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php index 35fa825ec7..37aaf25754 100644 --- a/interface/web/mail/mail_whitelist_edit.php +++ b/interface/web/mail/mail_whitelist_edit.php @@ -50,19 +50,11 @@ $app->load('tform_actions'); class page_action extends tform_actions { - function onShowNew() { - global $app, $conf; - - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); - - parent::onShowNew(); - } + protected $client_allowed_types = array( 'recipient', 'sender' ); function onBeforeUpdate() { global $app, $conf; - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); - //* Check if the server has been changed // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway $rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id); @@ -77,7 +69,26 @@ class page_action extends tform_actions { function onSubmit() { global $app, $conf; - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); + // Non-admin checks + if($_SESSION["s"]["user"]["typ"] != 'admin') { + // Non-admin can only use type 'sender' or 'recipient' and address must belong to the client's domains + if(! in_array($this->dataRecord["type"], $this->client_allowed_types)) { + $app->tform->errorMessage .= $app->lng('Whitelist type requires admin permissions'); + } + // address must be valid email + if(! filter_var( $this->dataRecord["source"], FILTER_VALIDATE_EMAIL )) { + $app->tform->errorMessage .= $app->lng('Invalid address: must be a valid email address'); + } + $tmp = explode('@', $this->dataRecord["source"]); + $domain = trim( array_pop($tmp) ); + $AUTHSQL = $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord("SELECT domain_id from mail_domain WHERE ${AUTHSQL} AND domain = ?", $domain); + // address must belong to the client's domains + if(! (is_array($rec) && isset($rec['domain_id']) && is_numeric($rec['domain_id']))) { + $app->tform->errorMessage .= $app->lng('Invalid address: you have no permission for this domain.'); + } + unset($rec); + } if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); diff --git a/interface/web/mail/mail_whitelist_list.php b/interface/web/mail/mail_whitelist_list.php index 73877797b4..4fd33dd977 100644 --- a/interface/web/mail/mail_whitelist_list.php +++ b/interface/web/mail/mail_whitelist_list.php @@ -12,8 +12,6 @@ $list_def_file = "list/mail_whitelist.list.php"; * End Form configuration ******************************************/ -if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges'); - //* Check permissions for module $app->auth->check_module_permissions('mail'); -- GitLab From 90bee4977612bef81e40a35f643b40830715ee6c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 14 Jan 2021 10:09:28 -0700 Subject: [PATCH 137/403] allow client to use mail blacklist --- .../web/mail/form/mail_blacklist.tform.php | 3 ++ .../web/mail/form/mail_whitelist.tform.php | 2 +- .../web/mail/list/mail_blacklist.list.php | 13 +++++- .../web/mail/list/mail_whitelist.list.php | 27 +++++------ interface/web/mail/mail_blacklist_del.php | 3 -- interface/web/mail/mail_blacklist_edit.php | 46 +++++++++++-------- interface/web/mail/mail_blacklist_list.php | 2 - interface/web/mail/mail_whitelist_edit.php | 1 - 8 files changed, 53 insertions(+), 44 deletions(-) diff --git a/interface/web/mail/form/mail_blacklist.tform.php b/interface/web/mail/form/mail_blacklist.tform.php index 957f35b95b..df29fbd6d9 100644 --- a/interface/web/mail/form/mail_blacklist.tform.php +++ b/interface/web/mail/form/mail_blacklist.tform.php @@ -112,5 +112,8 @@ $form["tabs"]['blacklist'] = array ( ) ); +if (! $app->auth->is_admin()) { + $form['tabs']['blacklist']['fields']['type']['value'] = array('recipient' => 'Recipient', 'sender' => 'Sender'); +} ?> diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php index d4b9baf742..8b570e449d 100644 --- a/interface/web/mail/form/mail_whitelist.tform.php +++ b/interface/web/mail/form/mail_whitelist.tform.php @@ -119,7 +119,7 @@ $form["tabs"]['whitelist'] = array ( ); if (! $app->auth->is_admin()) { - $form["tabs"]['whitelist']['fields']['type']['value'] = array('recipient' => 'Recipient', 'sender' => 'Sender'); + $form['tabs']['whitelist']['fields']['type']['value'] = array('recipient' => 'Recipient', 'sender' => 'Sender'); } diff --git a/interface/web/mail/list/mail_blacklist.list.php b/interface/web/mail/list/mail_blacklist.list.php index a2f3997fd7..6f92c0465f 100644 --- a/interface/web/mail/list/mail_blacklist.list.php +++ b/interface/web/mail/list/mail_blacklist.list.php @@ -78,10 +78,20 @@ $liste["item"][] = array( 'field' => "source", 'op' => "like", 'prefix' => "%", 'suffix' => "%", + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => 'SELECT access_id,source FROM mail_access WHERE {AUTHSQL} ORDER BY source', + 'keyfield'=> 'access_id', + 'valuefield'=> 'source' + ), 'width' => "", 'value' => ""); +if ($app->auth->is_admin()) { + $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); +} else { + $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender'); +} $liste["item"][] = array( 'field' => "type", 'datatype' => "VARCHAR", 'formtype' => "SELECT", @@ -89,7 +99,6 @@ $liste["item"][] = array( 'field' => "type", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client')); - + 'value' => $type_values); ?> diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php index 61f1d9f261..e8a345c10e 100644 --- a/interface/web/mail/list/mail_whitelist.list.php +++ b/interface/web/mail/list/mail_whitelist.list.php @@ -86,24 +86,19 @@ $liste["item"][] = array( 'field' => "source", 'width' => "", 'value' => ""); + if ($app->auth->is_admin()) { - $liste["item"][] = array( 'field' => "type", - 'datatype' => "VARCHAR", - 'formtype' => "SELECT", - 'op' => "=", - 'prefix' => "", - 'suffix' => "", - 'width' => "", - 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt', 'client' => 'client_txt')); + $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); } else { - $liste["item"][] = array( 'field' => "type", - 'datatype' => "VARCHAR", - 'formtype' => "SELECT", - 'op' => "=", - 'prefix' => "", - 'suffix' => "", - 'width' => "", - 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt')); + $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender'); } +$liste["item"][] = array( 'field' => "type", + 'datatype' => "VARCHAR", + 'formtype' => "SELECT", + 'op' => "=", + 'prefix' => "", + 'suffix' => "", + 'width' => "", + 'value' => $type_values); ?> diff --git a/interface/web/mail/mail_blacklist_del.php b/interface/web/mail/mail_blacklist_del.php index aa671c4887..3cb83a50a0 100644 --- a/interface/web/mail/mail_blacklist_del.php +++ b/interface/web/mail/mail_blacklist_del.php @@ -42,9 +42,6 @@ $tform_def_file = "form/mail_blacklist.tform.php"; require_once '../../lib/config.inc.php'; require_once '../../lib/app.inc.php'; - -if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges'); - //* Check permissions for module $app->auth->check_module_permissions('mail'); diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php index b86729b919..1ad8d6affd 100644 --- a/interface/web/mail/mail_blacklist_edit.php +++ b/interface/web/mail/mail_blacklist_edit.php @@ -50,36 +50,44 @@ $app->load('tform_actions'); class page_action extends tform_actions { - function onShowNew() { - global $app, $conf; - - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); - parent::onShowNew(); - } - + protected $client_allowed_types = array( 'recipient', 'sender' ); function onBeforeUpdate() { global $app, $conf; - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); - //* Check if the server has been changed - // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway - if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) { - $rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id); - if($rec['server_id'] != $this->dataRecord["server_id"]) { - //* Add a error message and switch back to old server - $app->tform->errorMessage .= $app->lng('The Server can not be changed.'); - $this->dataRecord["server_id"] = $rec['server_id']; - } - unset($rec); + $rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id); + if($rec['server_id'] != $this->dataRecord["server_id"]) { + //* Add a error message and switch back to old server + $app->tform->errorMessage .= $app->lng('The Server can not be changed.'); + $this->dataRecord["server_id"] = $rec['server_id']; } + unset($rec); } function onSubmit() { global $app, $conf; - if($_SESSION["s"]["user"]["typ"] != 'admin') die('This function needs admin privileges'); + // Non-admin checks + if($_SESSION["s"]["user"]["typ"] != 'admin') { + // Non-admin can only use type 'sender' or 'recipient' and address must belong to the client's domains + if(! in_array($this->dataRecord["type"], $this->client_allowed_types)) { + $app->tform->errorMessage .= $app->lng('Blacklist type requires admin permissions'); + } + // address must be valid email + if(! filter_var( $this->dataRecord["source"], FILTER_VALIDATE_EMAIL )) { + $app->tform->errorMessage .= $app->lng('Invalid address: must be a valid email address'); + } + $tmp = explode('@', $this->dataRecord["source"]); + $domain = trim( array_pop($tmp) ); + $AUTHSQL = $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord("SELECT domain_id from mail_domain WHERE ${AUTHSQL} AND domain = ?", $domain); + // address must belong to the client's domains + if(! (is_array($rec) && isset($rec['domain_id']) && is_numeric($rec['domain_id']))) { + $app->tform->errorMessage .= $app->lng('Invalid address: you have no permission for this domain.'); + } + unset($rec); + } if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); diff --git a/interface/web/mail/mail_blacklist_list.php b/interface/web/mail/mail_blacklist_list.php index ecb24d867c..cf1e50ddaa 100644 --- a/interface/web/mail/mail_blacklist_list.php +++ b/interface/web/mail/mail_blacklist_list.php @@ -12,8 +12,6 @@ $list_def_file = "list/mail_blacklist.list.php"; * End Form configuration ******************************************/ -if($_SESSION["s"]["user"]["typ"] != 'admin') $app->error('This function needs admin privileges'); - //* Check permissions for module $app->auth->check_module_permissions('mail'); diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php index 37aaf25754..52106c1882 100644 --- a/interface/web/mail/mail_whitelist_edit.php +++ b/interface/web/mail/mail_whitelist_edit.php @@ -56,7 +56,6 @@ class page_action extends tform_actions { global $app, $conf; //* Check if the server has been changed - // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway $rec = $app->db->queryOneRecord("SELECT server_id from mail_access WHERE access_id = ?", $this->id); if($rec['server_id'] != $this->dataRecord["server_id"]) { //* Add a error message and switch back to old server -- GitLab From 6ac2ee44483040cd9c22c8e50f3252aa54d2422c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 14 Jan 2021 14:25:29 -0700 Subject: [PATCH 138/403] add client limit for number of white / blacklist --- .../sql/incremental/upd_dev_collection.sql | 5 ++- install/sql/ispconfig3.sql | 2 + interface/web/client/form/client.tform.php | 14 +++++++ .../web/client/form/client_template.tform.php | 14 +++++++ interface/web/client/form/reseller.tform.php | 14 +++++++ interface/web/client/lib/lang/ar_client.lng | 3 +- .../client/lib/lang/ar_client_template.lng | 3 +- interface/web/client/lib/lang/ar_reseller.lng | 3 +- interface/web/client/lib/lang/bg_client.lng | 3 +- .../client/lib/lang/bg_client_template.lng | 3 +- interface/web/client/lib/lang/bg_reseller.lng | 3 +- interface/web/client/lib/lang/br_client.lng | 2 + .../client/lib/lang/br_client_template.lng | 2 + interface/web/client/lib/lang/br_reseller.lng | 2 + interface/web/client/lib/lang/ca_client.lng | 3 +- .../client/lib/lang/ca_client_template.lng | 3 +- interface/web/client/lib/lang/ca_reseller.lng | 3 +- interface/web/client/lib/lang/cz_client.lng | 2 + .../client/lib/lang/cz_client_template.lng | 2 + interface/web/client/lib/lang/cz_reseller.lng | 2 + interface/web/client/lib/lang/de_client.lng | 3 +- .../client/lib/lang/de_client_template.lng | 3 +- interface/web/client/lib/lang/de_reseller.lng | 3 +- interface/web/client/lib/lang/dk_client.lng | 3 +- .../client/lib/lang/dk_client_template.lng | 3 +- interface/web/client/lib/lang/dk_reseller.lng | 3 +- interface/web/client/lib/lang/el_client.lng | 3 +- .../client/lib/lang/el_client_template.lng | 3 +- interface/web/client/lib/lang/el_reseller.lng | 3 +- interface/web/client/lib/lang/en_client.lng | 3 +- .../client/lib/lang/en_client_template.lng | 3 +- interface/web/client/lib/lang/en_reseller.lng | 3 +- interface/web/client/lib/lang/es_client.lng | 3 +- .../client/lib/lang/es_client_template.lng | 3 +- interface/web/client/lib/lang/es_reseller.lng | 3 +- interface/web/client/lib/lang/fi_client.lng | 3 +- .../client/lib/lang/fi_client_template.lng | 3 +- interface/web/client/lib/lang/fi_reseller.lng | 3 +- interface/web/client/lib/lang/fr_client.lng | 3 +- .../client/lib/lang/fr_client_template.lng | 3 +- interface/web/client/lib/lang/fr_reseller.lng | 3 +- interface/web/client/lib/lang/hr_client.lng | 3 +- .../client/lib/lang/hr_client_template.lng | 3 +- interface/web/client/lib/lang/hr_reseller.lng | 3 +- interface/web/client/lib/lang/hu_client.lng | 3 +- .../client/lib/lang/hu_client_template.lng | 3 +- interface/web/client/lib/lang/hu_reseller.lng | 3 +- interface/web/client/lib/lang/id_client.lng | 3 +- .../client/lib/lang/id_client_template.lng | 3 +- interface/web/client/lib/lang/id_reseller.lng | 3 +- interface/web/client/lib/lang/it_client.lng | 3 +- .../client/lib/lang/it_client_template.lng | 3 +- interface/web/client/lib/lang/it_reseller.lng | 3 +- interface/web/client/lib/lang/ja_client.lng | 3 +- .../client/lib/lang/ja_client_template.lng | 3 +- interface/web/client/lib/lang/ja_reseller.lng | 3 +- interface/web/client/lib/lang/nl_client.lng | 3 +- .../client/lib/lang/nl_client_template.lng | 3 +- interface/web/client/lib/lang/nl_reseller.lng | 3 +- interface/web/client/lib/lang/pl_client.lng | 3 +- .../client/lib/lang/pl_client_template.lng | 3 +- interface/web/client/lib/lang/pl_reseller.lng | 3 +- interface/web/client/lib/lang/pt_client.lng | 3 +- .../client/lib/lang/pt_client_template.lng | 3 +- interface/web/client/lib/lang/pt_reseller.lng | 3 +- interface/web/client/lib/lang/ro_client.lng | 3 +- .../client/lib/lang/ro_client_template.lng | 3 +- interface/web/client/lib/lang/ro_reseller.lng | 3 +- interface/web/client/lib/lang/ru_client.lng | 3 +- .../client/lib/lang/ru_client_template.lng | 3 +- interface/web/client/lib/lang/ru_reseller.lng | 3 +- interface/web/client/lib/lang/se_client.lng | 3 +- .../client/lib/lang/se_client_template.lng | 3 +- interface/web/client/lib/lang/se_reseller.lng | 3 +- interface/web/client/lib/lang/sk_client.lng | 3 +- .../client/lib/lang/sk_client_template.lng | 3 +- interface/web/client/lib/lang/sk_reseller.lng | 3 +- interface/web/client/lib/lang/tr_client.lng | 3 +- .../client/lib/lang/tr_client_template.lng | 3 +- interface/web/client/lib/lang/tr_reseller.lng | 3 +- .../client/templates/client_edit_limits.htm | 3 ++ .../templates/client_template_edit_limits.htm | 3 ++ .../client/templates/reseller_edit_limits.htm | 3 ++ interface/web/dashboard/dashlets/limits.php | 4 ++ .../web/mail/lib/lang/ar_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/ar_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/bg_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/bg_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/br_mail_blacklist.lng | 1 + .../web/mail/lib/lang/br_mail_whitelist.lng | 1 + .../web/mail/lib/lang/ca_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/ca_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/cz_mail_blacklist.lng | 1 + .../web/mail/lib/lang/cz_mail_whitelist.lng | 1 + .../web/mail/lib/lang/de_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/de_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/dk_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/dk_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/el_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/el_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/en_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/en_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/es_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/es_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/fi_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/fi_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/fr_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/fr_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/hr_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/hr_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/hu_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/hu_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/id_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/id_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/it_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/it_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/ja_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/ja_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/nl_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/nl_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/pl_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/pl_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/pt_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/pt_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/ro_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/ro_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/ru_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/ru_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/se_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/se_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/sk_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/sk_mail_whitelist.lng | 2 +- .../web/mail/lib/lang/tr_mail_blacklist.lng | 2 +- .../web/mail/lib/lang/tr_mail_whitelist.lng | 2 +- interface/web/mail/mail_blacklist_edit.php | 36 ++++++++++++++++-- interface/web/mail/mail_whitelist_edit.php | 37 +++++++++++++++++-- remoting_client/API-docs/client_add.html | 1 + remoting_client/API-docs/client_update.html | 1 + remoting_client/examples/client_add.php | 1 + 139 files changed, 329 insertions(+), 124 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 02a94fdc1a..13b1e1097e 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1 +1,4 @@ -ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ''; \ No newline at end of file +ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ''; + +ALTER TABLE `client` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; +ALTER TABLE `client_template` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index d4640ea47a..333a908a5a 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -178,6 +178,7 @@ CREATE TABLE `client` ( `limit_mailforward` int(11) NOT NULL DEFAULT '-1', `limit_mailcatchall` int(11) NOT NULL DEFAULT '-1', `limit_mailrouting` int(11) NOT NULL DEFAULT '0', + `limit_mail_wblist` int(11) NOT NULL DEFAULT '0', `limit_mailfilter` int(11) NOT NULL DEFAULT '-1', `limit_fetchmail` int(11) NOT NULL DEFAULT '-1', `limit_mailquota` int(11) NOT NULL DEFAULT '-1', @@ -309,6 +310,7 @@ CREATE TABLE `client_template` ( `limit_mailforward` int(11) NOT NULL default '-1', `limit_mailcatchall` int(11) NOT NULL default '-1', `limit_mailrouting` int(11) NOT NULL default '0', + `limit_mail_wblist` int(11) NOT NULL default '0', `limit_mailfilter` int(11) NOT NULL default '-1', `limit_fetchmail` int(11) NOT NULL default '-1', `limit_mailquota` int(11) NOT NULL default '-1', diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index 0801ae3515..7ad9aecac6 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -840,6 +840,20 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_wblist' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'ISINT', + 'errmsg'=> 'limit_mail_wblist_error_notint'), + ), + 'default' => '-1', + 'value' => '', + 'separator' => '', + 'width' => '10', + 'maxlength' => '10', + 'rows' => '', + 'cols' => '' + ), 'limit_mailfilter' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index 4a3405bbe5..5883cce56c 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -256,6 +256,20 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_wblist' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'ISINT', + 'errmsg'=> 'limit_mail_wblist_error_notint'), + ), + 'default' => '-1', + 'value' => '', + 'separator' => '', + 'width' => '10', + 'maxlength' => '10', + 'rows' => '', + 'cols' => '' + ), 'limit_mailfilter' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php index 3c559c78d6..8c94132b3b 100644 --- a/interface/web/client/form/reseller.tform.php +++ b/interface/web/client/form/reseller.tform.php @@ -838,6 +838,20 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_wblist' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'ISINT', + 'errmsg'=> 'limit_mail_wblist_error_notint'), + ), + 'default' => '-1', + 'value' => '', + 'separator' => '', + 'width' => '10', + 'maxlength' => '10', + 'rows' => '', + 'cols' => '' + ), 'limit_mailfilter' => array ( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng index 04a7c6d17f..fde7171aa2 100644 --- a/interface/web/client/lib/lang/ar_client.lng +++ b/interface/web/client/lib/lang/ar_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -68,6 +69,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'The email domain alias limit must b $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ar_client_template.lng b/interface/web/client/lib/lang/ar_client_template.lng index 0a88594a59..fe67603b19 100644 --- a/interface/web/client/lib/lang/ar_client_template.lng +++ b/interface/web/client/lib/lang/ar_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -37,6 +38,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'The email domain alias limit must b $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng index 512bc5cb23..afd557ab18 100644 --- a/interface/web/client/lib/lang/ar_reseller.lng +++ b/interface/web/client/lib/lang/ar_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng index d6effa66e0..d9e5c1de61 100644 --- a/interface/web/client/lib/lang/bg_client.lng +++ b/interface/web/client/lib/lang/bg_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Макс. брой email aliases'; $wb['limit_mailforward_txt'] = 'Макс. брой email forwarders'; $wb['limit_mailcatchall_txt'] = 'Макс. брой email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Макс. брой email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Макс. брой email filters'; $wb['limit_fetchmail_txt'] = 'Макс. брой fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Размер на пощенските кутии'; @@ -63,6 +64,7 @@ $wb['limit_mailalias_error_notint'] = ' The email alias трябва да е ч $wb['limit_mailforward_error_notint'] = 'The email forward трябва да е число'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall трябва да е число'; $wb['limit_mailrouting_error_notint'] = 'The email routing трябва да е число'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter трябва да е число'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail трябва да е число'; $wb['limit_mailquota_error_notint'] = 'Размерът на пощенските кутии трябва да е число.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/bg_client_template.lng b/interface/web/client/lib/lang/bg_client_template.lng index 75f89a0fea..0ca56504f1 100644 --- a/interface/web/client/lib/lang/bg_client_template.lng +++ b/interface/web/client/lib/lang/bg_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Макс. брой на email aliases'; $wb['limit_mailforward_txt'] = 'Макс. брой на email forwarders'; $wb['limit_mailcatchall_txt'] = 'Макс. брой на email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Макс. брой на email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Макс. брой на email filters'; $wb['limit_fetchmail_txt'] = 'Макс. брой на fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Квота на пощенската кутия'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias трябва да е чи $wb['limit_mailforward_error_notint'] = 'The email forward трябва да е число'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall трябва да е число'; $wb['limit_mailrouting_error_notint'] = 'The email routing трябва да е число'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter трябва да е число'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail трябва да е число'; $wb['limit_mailquota_error_notint'] = 'The email quota трябва да е число'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng index f749fa5519..d34dff83d6 100644 --- a/interface/web/client/lib/lang/bg_reseller.lng +++ b/interface/web/client/lib/lang/bg_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Квота на пощенската кутия'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias трябва да е чи $wb['limit_mailforward_error_notint'] = 'The email forward трябва да е число'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall трябва да е число'; $wb['limit_mailrouting_error_notint'] = 'The email routing трябва да е число'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter трябва да е число'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail трябва да е число'; $wb['limit_mailquota_error_notint'] = 'The email quota трябва да е число'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng index 2f9d3c2056..4d2928459d 100644 --- a/interface/web/client/lib/lang/br_client.lng +++ b/interface/web/client/lib/lang/br_client.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios'; $wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de email'; $wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo'; $wb['limit_mailrouting_txt'] = 'Limite de rotas de email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Limite de filtros de email'; $wb['limit_fetchmail_txt'] = 'Limite de contas de busca'; $wb['limit_mailquota_txt'] = 'Cota da conta de email'; @@ -73,6 +74,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios de e $wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos de email deve ser um número.'; $wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata tudo deve ser um número.'; $wb['limit_mailrouting_error_notint'] = 'O limite de rotas de email deve ser um número.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'O limite de filtros de email deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'O limite das cotas de email deve ser um número.'; diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng index bfafbeb823..3c866f48e7 100644 --- a/interface/web/client/lib/lang/br_client_template.lng +++ b/interface/web/client/lib/lang/br_client_template.lng @@ -12,6 +12,7 @@ $wb['limit_mailmailinglist_txt'] = 'Limite de listas de email'; $wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de email'; $wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo'; $wb['limit_mailrouting_txt'] = 'Limite de rotas de email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Limite de filtros de email'; $wb['limit_fetchmail_txt'] = 'Limite de contas de busca'; $wb['limit_mailquota_txt'] = 'Cota da conta de email'; @@ -47,6 +48,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'O limite de alias de domínios deve $wb['limit_mailforward_error_notint'] = 'O limite de encaminhamento de emails deve ser um número.'; $wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata tudo deve ser um número.'; $wb['limit_mailrouting_error_notint'] = 'O limite de rotas de email deve ser um número.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'O limite de filtros de email deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'O limite da cota de emails deve ser um número.'; diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng index 08941ffd88..9dacacda44 100644 --- a/interface/web/client/lib/lang/br_reseller.lng +++ b/interface/web/client/lib/lang/br_reseller.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Limite de alias de domínios'; $wb['limit_mailforward_txt'] = 'Limite de encaminhamentos de email'; $wb['limit_mailcatchall_txt'] = 'Limite de contas cata tudo'; $wb['limit_mailrouting_txt'] = 'Limite de rotas de email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Limite de filtros de email'; $wb['limit_fetchmail_txt'] = 'Limite de contas de busca'; $wb['limit_mailquota_txt'] = 'Cota de contas de email'; @@ -73,6 +74,7 @@ $wb['limit_mailalias_error_notint'] = 'O limite de alias de email deve ser um n $wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos deve ser um número.'; $wb['limit_mailcatchall_error_notint'] = 'O limite de contas cata tudo deve ser um número.'; $wb['limit_mailrouting_error_notint'] = 'O limite de rotas de email deve ser um número.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'O limite de filtros de email deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'O limite de contas de busca deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'O limite das cotas de email deve ser um número.'; diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng index e4cc2f2dbe..56b6718749 100644 --- a/interface/web/client/lib/lang/ca_client.lng +++ b/interface/web/client/lib/lang/ca_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d\'alias d\'email'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d\'email'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d\'email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d\'emails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur courriel'; $wb['limit_mailquota_txt'] = 'Quota des boites courriel'; @@ -61,6 +62,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d\'alias d\'email doit être un $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d\'email doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d\'email doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d\'email doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur courriel doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boites d\'email doit être un nombre.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ca_client_template.lng b/interface/web/client/lib/lang/ca_client_template.lng index aa51796744..c72d067822 100644 --- a/interface/web/client/lib/lang/ca_client_template.lng +++ b/interface/web/client/lib/lang/ca_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d\'alias d\'email'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d\'email'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d\'emails'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d\'emails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur courriel'; $wb['limit_mailquota_txt'] = 'Quota des boites courriel'; @@ -31,6 +32,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d\'alias d\'email doit être un $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d\'email doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d\'email doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d\'email doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur courriel doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boites d\'email doit être un nombre.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng index 411096ef54..de734d385b 100644 --- a/interface/web/client/lib/lang/ca_reseller.lng +++ b/interface/web/client/lib/lang/ca_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d\'alias d\'email'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d\'email'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d\'emails'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d\'emails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur courriel'; $wb['limit_mailquota_txt'] = 'Quota des boites courriel'; @@ -64,6 +65,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d\'alias d\'email doit être un $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d\'email doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d\'email doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d\'email doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur courriel doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boites d\'email doit être un nombre.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng index 372080507e..c6bc86a59d 100644 --- a/interface/web/client/lib/lang/cz_client.lng +++ b/interface/web/client/lib/lang/cz_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. počet doménových přezdívek'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových předavačů'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových košů'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových směrování'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrů'; $wb['limit_fetchmail_txt'] = 'Max. počet účtů externího získávání e-mailů'; $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; @@ -67,6 +68,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Limit pro e-mailové doménové ali $wb['limit_mailforward_error_notint'] = 'Limit pro e-mailové předávání musí být číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit pro e-mailové koše musí být číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit pro e-mailová směrování musí být číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit pro e-mailové filtry limit musí být číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit pro externí získávání e-mailů musí být číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit pro e-mailovou kvótu musí být číslo.'; diff --git a/interface/web/client/lib/lang/cz_client_template.lng b/interface/web/client/lib/lang/cz_client_template.lng index 8cb8b34a4e..812a8e2766 100644 --- a/interface/web/client/lib/lang/cz_client_template.lng +++ b/interface/web/client/lib/lang/cz_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. počet doménových přezdívek'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových předávání'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových košů'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových směrování'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrů'; $wb['limit_fetchmail_txt'] = 'Max. počet účtů externího získávání e-mailů'; $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; @@ -37,6 +38,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Limit pro e-mailové doménové ali $wb['limit_mailforward_error_notint'] = 'Limit pro e-mailové předávání musí být číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit pro e-mailové koše musí být číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit pro e-mailová směrování musí být číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit pro e-mailové filtry limit musí být číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit pro externí získávání e-mailů musí být číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit pro e-mailovou kvótu musí být číslo.'; diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng index 751afa6990..79888530b0 100644 --- a/interface/web/client/lib/lang/cz_reseller.lng +++ b/interface/web/client/lib/lang/cz_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. počet e-mailových aliasů'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových předávání'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových košů'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových směrování'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrů'; $wb['limit_fetchmail_txt'] = 'Max. počet účtů externího získávání e-mailů'; $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit pro e-mailové aliasy musí být č $wb['limit_mailforward_error_notint'] = 'Limit pro e-mailové předávání musí být číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit pro e-mailové koše musí být číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit pro e-mailová směrování musí být číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit pro e-mailové filtry limit musí být číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit pro externí získávání e-mailů musí být číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit pro e-mailovou kvótu musí být číslo.'; diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng index ca22ce638c..cce0b03b68 100644 --- a/interface/web/client/lib/lang/de_client.lng +++ b/interface/web/client/lib/lang/de_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. Anzahl an E-Mail Aliase'; $wb['limit_mailforward_txt'] = 'Max. Anzahl an E-Mail Weiterleitungen'; $wb['limit_mailcatchall_txt'] = 'Max. Anzahl an E-Mail Catchall Konten'; $wb['limit_mailrouting_txt'] = 'Max. Anzahl an E-Mail Routen'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. Anzahl an E-Mail Filter'; $wb['limit_fetchmail_txt'] = 'Max. Anzahl an Fetchmail Konten'; $wb['limit_mailquota_txt'] = 'E-Mail Konto Beschränkung'; @@ -64,6 +65,7 @@ $wb['limit_mailalias_error_notint'] = 'Das E-Mail Alias Limit muss eine Zahl sei $wb['limit_mailforward_error_notint'] = 'Das E-Mail Weiterleitung Limit muss eine Zahl sein.'; $wb['limit_mailcatchall_error_notint'] = 'Das E-Mail Catchall Limit muss eine Zahl sein.'; $wb['limit_mailrouting_error_notint'] = 'Das E-Mail Routing Limit muss eine Zahl sein.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Das E-Mail Filter Limit muss eine Zahl sein.'; $wb['limit_mailfetchmail_error_notint'] = 'Das Fetchmail Limit muss eine Zahl sein.'; $wb['limit_mailquota_error_notint'] = 'Das E-Mailbeschränkungs Limit muss eine Zahl sein.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/de_client_template.lng b/interface/web/client/lib/lang/de_client_template.lng index a8431a8187..aaf26f9996 100644 --- a/interface/web/client/lib/lang/de_client_template.lng +++ b/interface/web/client/lib/lang/de_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Max. Anzahl an E-Mail Aliasse'; $wb['limit_mailforward_txt'] = 'Max. Anzahl an E-Mail Weiterleitungen'; $wb['limit_mailcatchall_txt'] = 'Max. Anzahl an E-Mail Catchall Konten'; $wb['limit_mailrouting_txt'] = 'Max. Anzahl E-Mail Routen'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. Anzahl an E-Mail Filtern'; $wb['limit_fetchmail_txt'] = 'Max. Anzahl an E-Mail Sammeldienst Konten'; $wb['limit_mailquota_txt'] = 'E-Mail Konto Beschränkung'; @@ -34,6 +35,7 @@ $wb['limit_mailalias_error_notint'] = 'Das E-Mail Alias Limit muss eine Zahl sei $wb['limit_mailforward_error_notint'] = 'Das E-Mail Weiterleitung Limit muss eine Zahl sein.'; $wb['limit_mailcatchall_error_notint'] = 'Das E-Mail Catchall Limit muss eine Zahl sein.'; $wb['limit_mailrouting_error_notint'] = 'Das E-Mail Routing Limit muss eine Zahl sein.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Das E-Mail Filter Limit muss eine Zahl sein.'; $wb['limit_mailfetchmail_error_notint'] = 'Das E-Mail Sammeldienst Limit muss eine Zahl sein.'; $wb['limit_mailquota_error_notint'] = 'Das E-Mail Beschränkungs Limit muss eine Zahl sein.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Web-Server'; $wb['db_servers_txt'] = 'Datenbank-Server'; $wb['mail_servers_txt'] = 'Mail-Server'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng index 9f68b18cf5..5d6a8f134f 100644 --- a/interface/web/client/lib/lang/de_reseller.lng +++ b/interface/web/client/lib/lang/de_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. Anzahl an E-Mail Aliasse'; $wb['limit_mailforward_txt'] = 'Max. Anzahl an E-Mail Weiterleitungen'; $wb['limit_mailcatchall_txt'] = 'Max. Anzahl an E-Mail Catchall Konten'; $wb['limit_mailrouting_txt'] = 'Max. Anzahl an E-Mail Routen'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. Anzahl an E-Mail Filtern'; $wb['limit_fetchmail_txt'] = 'Max. Anzahl an Fetchmail Konten'; $wb['limit_mailquota_txt'] = 'E-Mail konten Beschränkung'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Das E-Mail Alias Limit muss eine Zahl sei $wb['limit_mailforward_error_notint'] = 'Das E-Mail Weiterleitungs Limit muss eine Zahl sein.'; $wb['limit_mailcatchall_error_notint'] = 'Das E-Mail Catchall Limit muss eine Zahl sein.'; $wb['limit_mailrouting_error_notint'] = 'Das E-Mail Routing Limit muss eine Zahl sein.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Das E-Mail Filter Limit muss eine Zahl sein.'; $wb['limit_mailfetchmail_error_notint'] = 'Das Fetchmail Limit muss eine Zahl sein.'; $wb['limit_mailquota_error_notint'] = 'Das E-Mail Beschräkungs Limit muss eine Zahl sein.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng index b1e549dd91..fc83620acb 100644 --- a/interface/web/client/lib/lang/dk_client.lng +++ b/interface/web/client/lib/lang/dk_client.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. antal af domæne aliaser'; $wb['limit_mailforward_txt'] = 'Max. antal af e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti'; $wb['limit_mailrouting_txt'] = 'Max. antal af e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. antal af e-mail filtere'; $wb['limit_fetchmail_txt'] = 'Max. antal af fetchmail konti'; $wb['limit_mailquota_txt'] = 'Postboks kvota'; @@ -70,6 +71,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'E-mail domæne alias grænse skal v $wb['limit_mailforward_error_notint'] = 'E-mail forward grænse skal være et tal.'; $wb['limit_mailcatchall_error_notint'] = 'E-mail catchall grænse skal være et tal.'; $wb['limit_mailrouting_error_notint'] = 'E-mail routing grænse skal være et tal.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-mail filter grænse skal være et tal.'; $wb['limit_mailfetchmail_error_notint'] = 'Fetchmail grænse skal være et tal.'; $wb['limit_mailquota_error_notint'] = 'E-mail kvote grænse skal være et tal.'; @@ -202,4 +204,3 @@ $wb['limit_directive_snippets_txt'] = 'Show web server config selection'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/dk_client_template.lng b/interface/web/client/lib/lang/dk_client_template.lng index 04acf57d64..fa9399197f 100644 --- a/interface/web/client/lib/lang/dk_client_template.lng +++ b/interface/web/client/lib/lang/dk_client_template.lng @@ -11,6 +11,7 @@ $wb['limit_mailmailinglist_txt'] = 'Max. antal af mailing lister'; $wb['limit_mailforward_txt'] = 'Max. antal af e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti'; $wb['limit_mailrouting_txt'] = 'Max. antal af e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. antal af e-mail filtere'; $wb['limit_fetchmail_txt'] = 'Max. antal af fetchmail konti'; $wb['limit_mailquota_txt'] = 'Postboks kvota'; @@ -42,6 +43,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'E-mail domæne alias grænse skal v $wb['limit_mailforward_error_notint'] = 'E-mail forward grænse skal være et tal.'; $wb['limit_mailcatchall_error_notint'] = 'E-mail catchall grænse skal være et tal.'; $wb['limit_mailrouting_error_notint'] = 'E-mail routing grænse skal være et tal.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-mail filter grænse skal være et tal.'; $wb['limit_mailfetchmail_error_notint'] = 'Fetchmail grænse skal være et tal.'; $wb['limit_mailquota_error_notint'] = 'E-mail kvote grænse skal være et tal.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng index 12004df761..19babe52d4 100644 --- a/interface/web/client/lib/lang/dk_reseller.lng +++ b/interface/web/client/lib/lang/dk_reseller.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. antal af domæne aliaser'; $wb['limit_mailforward_txt'] = 'Max. antal af e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. antal af e-mail catchall konti'; $wb['limit_mailrouting_txt'] = 'Max. antal af e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. antal af e-mail filtere'; $wb['limit_fetchmail_txt'] = 'Max. antal af fetchmail konti'; $wb['limit_mailquota_txt'] = 'Postboks kvota'; @@ -69,6 +70,7 @@ $wb['limit_mailalias_error_notint'] = 'E-mail alias grænse skal være et tal.'; $wb['limit_mailforward_error_notint'] = 'E-mail forward grænse skal være et tal.'; $wb['limit_mailcatchall_error_notint'] = 'E-mail catchall grænse skal være et tal.'; $wb['limit_mailrouting_error_notint'] = 'E-mail routing grænse skal være et tal.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-mail filter grænse skal være et tal.'; $wb['limit_mailfetchmail_error_notint'] = 'Fetchmail grænse skal være et tal.'; $wb['limit_mailquota_error_notint'] = 'E-mail kvote grænse skal være et tal.'; @@ -206,4 +208,3 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng index 144e632ef6..3d61198d3d 100644 --- a/interface/web/client/lib/lang/el_client.lng +++ b/interface/web/client/lib/lang/el_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Όριο ψευδωνύμων domain'; $wb['limit_mailforward_txt'] = 'Όριο email forwarders'; $wb['limit_mailcatchall_txt'] = 'Όριο λογαριασμών email catchall'; $wb['limit_mailrouting_txt'] = 'Όριο δρομολογήσεων των email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Όριο φίλτρων email'; $wb['limit_fetchmail_txt'] = 'Όριο λογαριασμών fetchmail'; $wb['limit_mailquota_txt'] = 'Όριο χώρου θυρίδας'; @@ -70,6 +71,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Το όριο των ψευδωνύ $wb['limit_mailforward_error_notint'] = 'Το όριο των email forward πρέπει να είναι αριθμός'; $wb['limit_mailcatchall_error_notint'] = 'Το όριο των email catchall πρέπει να είναι αριθμός'; $wb['limit_mailrouting_error_notint'] = 'Το όριο των δρομολογήσεων email πρέπει να είναι αριθμός'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Το όριο των email filter πρέπει να είναι αριθμός'; $wb['limit_mailfetchmail_error_notint'] = 'Το όριο των fetchmail πρέπει να είναι αριθμός'; $wb['limit_mailquota_error_notint'] = 'Το όριο μεγέθους των email πρέπει να είναι αριθμός'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/el_client_template.lng b/interface/web/client/lib/lang/el_client_template.lng index 91be0bcffd..7d05bd4cc8 100644 --- a/interface/web/client/lib/lang/el_client_template.lng +++ b/interface/web/client/lib/lang/el_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Όριο ψευδωνύμων domain'; $wb['limit_mailforward_txt'] = 'Όριο email forwarders'; $wb['limit_mailcatchall_txt'] = 'Όριο λογαριασμών email'; $wb['limit_mailrouting_txt'] = 'Όριο δρομολογήσεων email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Όριο φίλτρων email'; $wb['limit_fetchmail_txt'] = 'Όριο λογαριασμών fetchmail'; $wb['limit_mailquota_txt'] = 'Όριο θυρίδας'; @@ -39,6 +40,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Το όριο ψευδωνύμων $wb['limit_mailforward_error_notint'] = 'Το όριο email forward πρέπει να είναι αριθμός.'; $wb['limit_mailcatchall_error_notint'] = 'Το όριο email catchall πρέπει να είναι αριθμός.'; $wb['limit_mailrouting_error_notint'] = 'Το όριο των δρομολογήσεων email πρέπει να είναι αριθμός.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Το όριο φίλτρων email πρέπει να είναι αριθμός.'; $wb['limit_mailfetchmail_error_notint'] = 'Το όριο fetchmail πρέπει να είναι αριθμός.'; $wb['limit_mailquota_error_notint'] = 'Το όριο χώρου email πρέπει να είναι αριθμός.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng index 3a5e5159aa..9aa37a6333 100644 --- a/interface/web/client/lib/lang/el_reseller.lng +++ b/interface/web/client/lib/lang/el_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Όριο ψευδωνύμων email'; $wb['limit_mailforward_txt'] = 'Όριο email forwarders'; $wb['limit_mailcatchall_txt'] = 'Όριο λογαριασμών email catchall'; $wb['limit_mailrouting_txt'] = 'Όριο δρομολογήσεων email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Όριο φίλτρων email'; $wb['limit_fetchmail_txt'] = 'Όριο λογαριασμών fetchmail'; $wb['limit_mailquota_txt'] = 'Όριο θυρίδας'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'Το όριο ψευδωνύμων email $wb['limit_mailforward_error_notint'] = 'Το όριο email forward πρέπει να είναι αριθμός.'; $wb['limit_mailcatchall_error_notint'] = 'Το όριο email catchall πρέπει να είναι αριθμός.'; $wb['limit_mailrouting_error_notint'] = 'Το όριο δρομολογήσεων email πρέπει να είναι αριθμός.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Το όριο φίλτρων email πρέπει να είναι αριθμός.'; $wb['limit_mailfetchmail_error_notint'] = 'Το όριο fetchmail πρέπει να είναι αριθμός.'; $wb['limit_mailquota_error_notint'] = 'Το όριο χώρου email πρέπει να είναι αριθμός.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng index a5991260c5..ee5f3675bd 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -73,6 +74,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'The email domain alias limit must b $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -204,4 +206,3 @@ $wb['email_error_empty'] = 'Email is empty'; $wb['limit_directive_snippets_txt'] = 'Show web server config selection'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng index aa3dfdcb6e..bfccedcf1e 100644 --- a/interface/web/client/lib/lang/en_client_template.lng +++ b/interface/web/client/lib/lang/en_client_template.lng @@ -12,6 +12,7 @@ $wb['limit_mailmailinglist_txt'] = 'Max. number of mailing lists'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -47,6 +48,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'The email domain alias limit must b $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -125,4 +127,3 @@ $wb['xmpp_servers_txt'] = 'XMPP Servers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng index ec94cb0178..c2315c67b4 100644 --- a/interface/web/client/lib/lang/en_reseller.lng +++ b/interface/web/client/lib/lang/en_reseller.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -73,6 +74,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -210,4 +212,3 @@ $wb['limit_database_quota_error_notint'] = 'The database quota limit must be a n $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng index eae85315b6..645a533a51 100644 --- a/interface/web/client/lib/lang/es_client.lng +++ b/interface/web/client/lib/lang/es_client.lng @@ -105,6 +105,8 @@ $wb['limit_mailquota_error_notint'] = 'El límite de cuota de correo debe ser un $wb['limit_mailquota_txt'] = 'Cuota de buzones de correo'; $wb['limit_mailrouting_error_notint'] = 'El límite de enrutadores de correo debe ser un número.'; $wb['limit_mailrouting_txt'] = 'Cantidad máx. de enrutadores de correos'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_openvz_vm_error_notint'] = 'El límite de servidores virtuales debe ser un número.'; $wb['limit_openvz_vm_template_id_txt'] = 'Forzar plantilla para servidor virtual'; $wb['limit_openvz_vm_txt'] = 'Cantidad máxima de servidores virtuales'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng index 5c55b23f89..17c73de969 100644 --- a/interface/web/client/lib/lang/es_client_template.lng +++ b/interface/web/client/lib/lang/es_client_template.lng @@ -62,6 +62,8 @@ $wb['limit_mailquota_error_notint'] = 'El límite de cuota de correo debe ser un $wb['limit_mailquota_txt'] = 'Cuota de buzones de correo'; $wb['limit_mailrouting_error_notint'] = 'El límite de enrutadores de correo debe ser un número.'; $wb['limit_mailrouting_txt'] = 'Cantidad máx. de enrutadores de correos'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_openvz_vm_error_notint'] = 'El límite del servidor virtual debe ser un número.'; $wb['limit_openvz_vm_template_id_txt'] = 'Forzar plantilla de servidor virtual'; $wb['limit_openvz_vm_txt'] = 'Cantidad máx. de servidores virtuales'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng index 6830c56cb8..d2553ce83c 100644 --- a/interface/web/client/lib/lang/es_reseller.lng +++ b/interface/web/client/lib/lang/es_reseller.lng @@ -112,6 +112,8 @@ $wb['limit_mailquota_error_notint'] = 'El límite de cuota de correo debe ser un $wb['limit_mailquota_txt'] = 'Cuota de buzones de correo'; $wb['limit_mailrouting_error_notint'] = 'El límite de enrutadores de correo debe ser un número.'; $wb['limit_mailrouting_txt'] = 'Cantidad máx. de enrutadores de correos'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_openvz_vm_error_notint'] = 'El límite del servidor virtual debe ser un número.'; $wb['limit_openvz_vm_template_id_txt'] = 'Forzar plantilla de servidor virtual'; $wb['limit_openvz_vm_txt'] = 'Cantidad máx. de servidores virtuales'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng index 7769af8b99..c0c0a5ba3a 100644 --- a/interface/web/client/lib/lang/fi_client.lng +++ b/interface/web/client/lib/lang/fi_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Postisoitteiden aliastunnuksien määrä'; $wb['limit_mailforward_txt'] = 'Edelleenlähetysosoitteiden määrä'; $wb['limit_mailcatchall_txt'] = 'Postiverkkotunnuksien Catchall-tilien määrä'; $wb['limit_mailrouting_txt'] = 'Postireititysten määrä'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Roskapostisuodattimien määrä'; $wb['limit_fetchmail_txt'] = 'Noudettavien postilaatikoiden määrä'; $wb['limit_mailquota_txt'] = 'Postilaatikon enimmäiskoko'; @@ -62,6 +63,7 @@ $wb['limit_mailalias_error_notint'] = 'Postin aliastunnuksien raja-arvon pitää $wb['limit_mailforward_error_notint'] = 'Postin edelleenlähetysten raja-arvon pitää olla numero.'; $wb['limit_mailcatchall_error_notint'] = 'Postiverkkotunnuksien catchall-tunnuksien raja-arvon pitää olla numero.'; $wb['limit_mailrouting_error_notint'] = 'Postireititysten raja-arvon pitää olla numero.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Roskapostisuodattimien raja-arvon pitää olla numero.'; $wb['limit_mailfetchmail_error_notint'] = 'Noudettavien postilaatikoiden raja-arvon pitää olla numero.'; $wb['limit_mailquota_error_notint'] = 'Postilaatikon koon raja-arvon pitää olla numero.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fi_client_template.lng b/interface/web/client/lib/lang/fi_client_template.lng index 70d9069664..d24182806b 100644 --- a/interface/web/client/lib/lang/fi_client_template.lng +++ b/interface/web/client/lib/lang/fi_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Postialiaksien määrä'; $wb['limit_mailforward_txt'] = 'Edelleenlähetysosoitteiden määrä'; $wb['limit_mailcatchall_txt'] = 'Postiverkkotunnuksien Catchall-tilien määrä'; $wb['limit_mailrouting_txt'] = 'Postireititysten määrä'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Roskapostisuodattimien määrä'; $wb['limit_fetchmail_txt'] = 'Noudettavien postilaatikoiden määrä'; $wb['limit_mailquota_txt'] = 'Postilaatikon koko'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'Postialiaksien raja-arvon pitää olla nu $wb['limit_mailforward_error_notint'] = 'Edelleenlähetysosoitteiden raja-arvon pitää olla numero.'; $wb['limit_mailcatchall_error_notint'] = 'Catchall-tunnuksien raja-arvon pitää olla numero.'; $wb['limit_mailrouting_error_notint'] = 'Postireitityksien raja-arvon pitää olla numero.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Roskapostisuodattimien raja-arvon pitää olla numero.'; $wb['limit_mailfetchmail_error_notint'] = 'Noudettavien postilaatikoiden raja-arvon pitää olla numero.'; $wb['limit_mailquota_error_notint'] = 'Postilaatikon koon raja-arvon pitää olla numero.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng index fbd09f4b3e..06e2ef5fca 100644 --- a/interface/web/client/lib/lang/fi_reseller.lng +++ b/interface/web/client/lib/lang/fi_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Sähköpostin aliastunnuksien enimmäismäärä'; $wb['limit_mailforward_txt'] = 'Edelleenlähetettävien sähköpostitunnuksien enimmäismäärä'; $wb['limit_mailcatchall_txt'] = 'Sähköpostin catchall-tilien enimmäismäärä'; $wb['limit_mailrouting_txt'] = 'Sähköpostireitityksien enimmäismäärä'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Sähköpostisuodattimien enimmäismäärä'; $wb['limit_fetchmail_txt'] = 'Noudettavien sähköpotilaatikoiden enimmäismäärä'; $wb['limit_mailquota_txt'] = 'Sähköpostilaatikoiden levytila'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Sähköpostialiaksien rajan pitää olla $wb['limit_mailforward_error_notint'] = 'Sähköpostin edelleenlähetyksen rajan pitää olla numeerinen.'; $wb['limit_mailcatchall_error_notint'] = 'Catchall-tunnuksien rajan pitää olla numeerinen.'; $wb['limit_mailrouting_error_notint'] = 'Sähköpostireittien rajan pitää olla numeerinen.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Sähköpostisuodattimien rajan pitää olla numeerinen.'; $wb['limit_mailfetchmail_error_notint'] = 'Noudettavien laatikoiden rajan pitää olla numeerinen.'; $wb['limit_mailquota_error_notint'] = 'Sähköpostin levytilan rajan pitää olla numeerinen.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng index c3de724d93..4ef9a64eeb 100644 --- a/interface/web/client/lib/lang/fr_client.lng +++ b/interface/web/client/lib/lang/fr_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d’alias d’e-mail'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d’e-mail'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d’e-mail'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d’e-mails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur e-mail'; $wb['limit_mailquota_txt'] = 'Quota des boîtes aux lettres'; @@ -61,6 +62,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d’alias d’e-mail doit être $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d’e-mail doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d’e-mail doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d’e-mail doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur e-mail doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boîtes d’e-mail doit être un nombre.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fr_client_template.lng b/interface/web/client/lib/lang/fr_client_template.lng index b81788c0d4..e443eb7801 100644 --- a/interface/web/client/lib/lang/fr_client_template.lng +++ b/interface/web/client/lib/lang/fr_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d’alias d’e-mail'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d’e-mail'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d’e-mails'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d’e-mails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur e-mail'; $wb['limit_mailquota_txt'] = 'Quota des boîtes aux lettres'; @@ -31,6 +32,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d’alias d’e-mail doit être $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d’e-mail doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d’e-mail doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d’e-mail doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur e-mail doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boîtes d’e-mail doit être un nombre.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng index 76d44cb324..448a91ea39 100644 --- a/interface/web/client/lib/lang/fr_reseller.lng +++ b/interface/web/client/lib/lang/fr_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Nombre maximal d’alias d’e-mail'; $wb['limit_mailforward_txt'] = 'Nombre maximal de routeurs d’e-mail'; $wb['limit_mailcatchall_txt'] = 'Nombre maximal de comptes collecteurs'; $wb['limit_mailrouting_txt'] = 'Nombre maximal de routes d’e-mails'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Nombre maximal de filtres d’e-mails'; $wb['limit_fetchmail_txt'] = 'Nombre maximal de comptes récupérateur e-mail'; $wb['limit_mailquota_txt'] = 'Quota des boîtes aux lettres'; @@ -64,6 +65,7 @@ $wb['limit_mailalias_error_notint'] = 'La limite d’alias d’e-mail doit être $wb['limit_mailforward_error_notint'] = 'La limite de routeurs d’e-mail doit être un nombre.'; $wb['limit_mailcatchall_error_notint'] = 'La limite de comptes collecteurs doit être un nombre.'; $wb['limit_mailrouting_error_notint'] = 'La limite de routes d’e-mail doit être un nombre.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'La limite de filtres d’e-mail doit être un nombre.'; $wb['limit_mailfetchmail_error_notint'] = 'La limite de comptes récupérateur e-mail doit être un nombre.'; $wb['limit_mailquota_error_notint'] = 'La limite du quota des boîtes d’e-mail doit être un nombre.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng index 4d16bac0cb..aac50a2f2a 100644 --- a/interface/web/client/lib/lang/hr_client.lng +++ b/interface/web/client/lib/lang/hr_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Maksimalan broj aliasa email domena'; $wb['limit_mailforward_txt'] = 'Maksimalan broj email forwardera'; $wb['limit_mailcatchall_txt'] = 'Maksimalan broj email catchall računa'; $wb['limit_mailrouting_txt'] = 'Maksimalan broj email ruta'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksimalan broj email filtera'; $wb['limit_fetchmail_txt'] = 'Maksimalan broj fetchmail računa'; $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; @@ -70,6 +71,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Maksimalan broj email alias domena $wb['limit_mailforward_error_notint'] = 'Limit email forwarda mora biti znamenka.'; $wb['limit_mailcatchall_error_notint'] = 'Limit email catchalla mora biti znamenka.'; $wb['limit_mailrouting_error_notint'] = 'Limit email ruta mora biti znamenka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filtera mora biti znamenka.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmaila mora biti znamenka.'; $wb['limit_mailquota_error_notint'] = 'Veličina mailboxa mora biti znamenka.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hr_client_template.lng b/interface/web/client/lib/lang/hr_client_template.lng index 12fabbe723..4a2cd0500c 100644 --- a/interface/web/client/lib/lang/hr_client_template.lng +++ b/interface/web/client/lib/lang/hr_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Maksimalan broj aliasa email domena'; $wb['limit_mailforward_txt'] = 'Maksimalan broj email forwardera'; $wb['limit_mailcatchall_txt'] = 'Maksimalan broj email catchall računa'; $wb['limit_mailrouting_txt'] = 'Maksimalan broj email ruta'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksimalan broj email filtera'; $wb['limit_fetchmail_txt'] = 'Maksimalan broj fetchmail računa'; $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; @@ -39,6 +40,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Maksimalan broj email alias domena $wb['limit_mailforward_error_notint'] = 'Limit email forwarda mora biti znamenka.'; $wb['limit_mailcatchall_error_notint'] = 'Limit email catchalla mora biti znamenka.'; $wb['limit_mailrouting_error_notint'] = 'Limit email ruta mora biti znamenka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filtera mora biti znamenka.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmaila mora biti znamenka.'; $wb['limit_mailquota_error_notint'] = 'Veličina mailboxa mora biti znamenka.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng index d4b9f58eeb..9b01f30b2d 100644 --- a/interface/web/client/lib/lang/hr_reseller.lng +++ b/interface/web/client/lib/lang/hr_reseller.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Maksimalan broj aliasa email domena'; $wb['limit_mailforward_txt'] = 'Maksimalan broj email forwardera'; $wb['limit_mailcatchall_txt'] = 'Maksimalan broj email catchall računa'; $wb['limit_mailrouting_txt'] = 'Maksimalan broj email ruta'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksimalan broj email filtera'; $wb['limit_fetchmail_txt'] = 'Maksimalan broj fetchmail računa'; $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; @@ -69,6 +70,7 @@ $wb['limit_mailalias_error_notint'] = 'Maksimalan broj email aliasa mora biti zn $wb['limit_mailforward_error_notint'] = 'Limit email forwarda mora biti znamenka.'; $wb['limit_mailcatchall_error_notint'] = 'Limit email catchalla mora biti znamenka.'; $wb['limit_mailrouting_error_notint'] = 'Limit email ruta mora biti znamenka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filtera mora biti znamenka.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmaila mora biti znamenka.'; $wb['limit_mailquota_error_notint'] = 'Veličina mailboxa mora biti znamenka.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng index b11e03273e..402e5adf04 100644 --- a/interface/web/client/lib/lang/hu_client.lng +++ b/interface/web/client/lib/lang/hu_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Maximálisan létrehozható email alias-ok száma' $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox korlát'; @@ -62,6 +63,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hu_client_template.lng b/interface/web/client/lib/lang/hu_client_template.lng index 3df432a661..9300d945b6 100644 --- a/interface/web/client/lib/lang/hu_client_template.lng +++ b/interface/web/client/lib/lang/hu_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng index 76755a112b..5970b80d46 100644 --- a/interface/web/client/lib/lang/hu_reseller.lng +++ b/interface/web/client/lib/lang/hu_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng index df858ebdfa..c7b5cafa43 100644 --- a/interface/web/client/lib/lang/id_client.lng +++ b/interface/web/client/lib/lang/id_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Jumlah maks alias domain'; $wb['limit_mailforward_txt'] = 'Jumlah maks forwarder email'; $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email'; $wb['limit_mailrouting_txt'] = 'Jumlah maks rute email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Jumlah maks penyaringan email'; $wb['limit_fetchmail_txt'] = 'Jumlah maks akun fetchmail'; $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; @@ -67,6 +68,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Batasan alias domain email harus be $wb['limit_mailforward_error_notint'] = 'Batasan forward email harus berupa angka.'; $wb['limit_mailcatchall_error_notint'] = 'Batasan catchall email harus berupa angka.'; $wb['limit_mailrouting_error_notint'] = 'Batasan routing email harus berupa angka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Batasan penyaringan email harus berupa angka.'; $wb['limit_mailfetchmail_error_notint'] = 'Batasan fetchmail harus berupa angka.'; $wb['limit_mailquota_error_notint'] = 'Batasan kuota email harus berupa angka.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/id_client_template.lng b/interface/web/client/lib/lang/id_client_template.lng index 57c55be576..007b4af0da 100644 --- a/interface/web/client/lib/lang/id_client_template.lng +++ b/interface/web/client/lib/lang/id_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Jumlah maks alias domain'; $wb['limit_mailforward_txt'] = 'Jumlah maks forwarder email'; $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email'; $wb['limit_mailrouting_txt'] = 'Jumlah maks rute email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Jumlah maks filter email'; $wb['limit_fetchmail_txt'] = 'Jumlah maks akun fetchmail'; $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; @@ -36,6 +37,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Batasan alias domain email harus be $wb['limit_mailforward_error_notint'] = 'Batasan forward email harus berupa angka.'; $wb['limit_mailcatchall_error_notint'] = 'Batasan catchall email harus berupa angka.'; $wb['limit_mailrouting_error_notint'] = 'Batasan routing email harus berupa angka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Batasan penyaringan email harus berupa angka.'; $wb['limit_mailfetchmail_error_notint'] = 'Batasan fetchmail harus berupa angka.'; $wb['limit_mailquota_error_notint'] = 'Batasan kuota email harus berupa angka.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng index e639f4929e..11b0d95d74 100644 --- a/interface/web/client/lib/lang/id_reseller.lng +++ b/interface/web/client/lib/lang/id_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Jumlah maks alias email'; $wb['limit_mailforward_txt'] = 'Jumlah maks forwarder email'; $wb['limit_mailcatchall_txt'] = 'Jumlah maks akun catchall email'; $wb['limit_mailrouting_txt'] = 'Jumlah maks rute email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Jumlah maks penyaringan email'; $wb['limit_fetchmail_txt'] = 'Jumlah maks akun fetchmail'; $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Batasan alias email harus berupa angka.'; $wb['limit_mailforward_error_notint'] = 'Batasan forward email harus berupa angka.'; $wb['limit_mailcatchall_error_notint'] = 'Batasan catchall email harus berupa angka.'; $wb['limit_mailrouting_error_notint'] = 'Batasan routing email harus berupa angka.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Batasan penyaringan email harus berupa angka.'; $wb['limit_mailfetchmail_error_notint'] = 'Batasan fetchmail harus berupa angka.'; $wb['limit_mailquota_error_notint'] = 'Batasan kuota email harus berupa angka.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng index 8442ace734..6ad3f11a20 100644 --- a/interface/web/client/lib/lang/it_client.lng +++ b/interface/web/client/lib/lang/it_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Numero massimo di aliases di posta'; $wb['limit_mailforward_txt'] = 'Numero massimo di forwarders di posta'; $wb['limit_mailcatchall_txt'] = 'Numero massimo di catchall accounts'; $wb['limit_mailrouting_txt'] = 'Numero massimo di email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Numero massimo di email filters'; $wb['limit_fetchmail_txt'] = 'Numero massimo di fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Limite quota mailbox'; @@ -61,6 +62,7 @@ $wb['limit_mailalias_error_notint'] = 'Il limite di email alias deve essere un n $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/it_client_template.lng b/interface/web/client/lib/lang/it_client_template.lng index 40ef74de16..bc1f90052a 100644 --- a/interface/web/client/lib/lang/it_client_template.lng +++ b/interface/web/client/lib/lang/it_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Num. massimo alias email'; $wb['limit_mailforward_txt'] = 'Num. massimo inoltri email'; $wb['limit_mailcatchall_txt'] = 'Num. massimo account email catchall'; $wb['limit_mailrouting_txt'] = 'Num. massimo routes email'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Num. massimo filtri email'; $wb['limit_fetchmail_txt'] = 'Num. massimo account fetchmail'; $wb['limit_mailquota_txt'] = 'Quota caselle di posta'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'Il limite alias email devessere un numero $wb['limit_mailforward_error_notint'] = 'Il limite inoltro email devessere un numero.'; $wb['limit_mailcatchall_error_notint'] = 'Il limite catchall email devessere un numero.'; $wb['limit_mailrouting_error_notint'] = 'Il limite routing email devessere un numero .'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Il limite filtri email devessere un numero.'; $wb['limit_mailfetchmail_error_notint'] = 'Il limite fetchmail devessere un numero.'; $wb['limit_mailquota_error_notint'] = 'Il limite quota email devessere un numero.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng index 8b5d719427..a90a2d8078 100644 --- a/interface/web/client/lib/lang/it_reseller.lng +++ b/interface/web/client/lib/lang/it_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng index de4642d72d..be88a575cd 100644 --- a/interface/web/client/lib/lang/ja_client.lng +++ b/interface/web/client/lib/lang/ja_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'メールエイリアスの最大数'; $wb['limit_mailforward_txt'] = 'メールフォワードの最大数'; $wb['limit_mailcatchall_txt'] = 'キャッチオール・メールアカウントの最大数'; $wb['limit_mailrouting_txt'] = 'メール配送経路の最大数'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'メールフィルターの最大数'; $wb['limit_fetchmail_txt'] = 'fetchmailアカウントの最大数'; $wb['limit_mailquota_txt'] = 'メールボックスの容量'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'メールエイリアスの最大数は $wb['limit_mailforward_error_notint'] = 'メールフォワードの最大数は数字で指定してください。'; $wb['limit_mailcatchall_error_notint'] = 'キャッチオール・メールアドレスの最大数は数字で指定してください。'; $wb['limit_mailrouting_error_notint'] = 'メールの配送経路の最大数は数字で指定してください。'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'メールフィルターの最大数は数字で指定してください。'; $wb['limit_mailfetchmail_error_notint'] = 'fetchmailアカウントの最大数は数字で指定してください。'; $wb['limit_mailquota_error_notint'] = 'メールボックスの最大容量は数字で指定してください。'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ja_client_template.lng b/interface/web/client/lib/lang/ja_client_template.lng index 7381465d66..ca83bda97a 100644 --- a/interface/web/client/lib/lang/ja_client_template.lng +++ b/interface/web/client/lib/lang/ja_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'メールエイリアスの最大数'; $wb['limit_mailforward_txt'] = 'メールフォワードの最大数'; $wb['limit_mailcatchall_txt'] = 'キャッチオール・メールアカウントの最大数'; $wb['limit_mailrouting_txt'] = 'メール配送経路の最大数'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'メールフィルターの最大数'; $wb['limit_fetchmail_txt'] = 'fetchmailアカウントの最大数'; $wb['limit_mailquota_txt'] = 'メールボックスの容量'; @@ -35,6 +36,7 @@ $wb['limit_mailalias_error_notint'] = 'メールエイリアスの最大数は $wb['limit_mailforward_error_notint'] = 'メールフォワードの最大数は数字で指定してください。'; $wb['limit_mailcatchall_error_notint'] = 'キャッチオール・メールアドレスの最大数は数字で指定してください。'; $wb['limit_mailrouting_error_notint'] = 'メールの配送経路の最大数は数字で指定してください。'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'メールフィルターの最大数は数字で指定してください。'; $wb['limit_mailfetchmail_error_notint'] = 'fetchmailアカウントの最大数は数字で指定してください。'; $wb['limit_mailquota_error_notint'] = 'メールボックスの最大容量は数字で指定してください。'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng index a4df95b8b9..1b89262493 100644 --- a/interface/web/client/lib/lang/ja_reseller.lng +++ b/interface/web/client/lib/lang/ja_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'メールエイリアスの最大数'; $wb['limit_mailforward_txt'] = 'メールフォワードの最大数'; $wb['limit_mailcatchall_txt'] = 'キャッチオール・メールアカウントの最大数'; $wb['limit_mailrouting_txt'] = 'メール配送経路の最大数'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'メールフィルターの最大数'; $wb['limit_fetchmail_txt'] = 'Fetchmail アカウントの最大数'; $wb['limit_mailquota_txt'] = 'メールボックスの容量'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'メールエイリアスの最大数は $wb['limit_mailforward_error_notint'] = 'メールフォワードの最大数は数字で指定してください。'; $wb['limit_mailcatchall_error_notint'] = 'キャッチオール・メールアドレスの最大数は数字で指定してください。'; $wb['limit_mailrouting_error_notint'] = 'メールの配送経路の最大数は数字で指定してください。'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'メールフィルターの最大数は数字で指定してください。'; $wb['limit_mailfetchmail_error_notint'] = 'fetchmailアカウントの最大数は数字で指定してください。'; $wb['limit_mailquota_error_notint'] = 'メールボックスの最大容量は数字で指定してください。'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng index cd9f6e1742..1f4e5d70a1 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -6,6 +6,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. number of domain aliassen'; $wb['limit_mailforward_txt'] = 'Max. aantal e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. aantal email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. aantal e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. aantal e-mail filters'; $wb['limit_fetchmail_txt'] = 'Max. aantal fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -71,6 +72,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'De e-mail domein alias limiet moet $wb['limit_mailforward_error_notint'] = 'De e-mail forward limiet moet een numerieke waarde zijn.'; $wb['limit_mailcatchall_error_notint'] = 'De e-mail catchall limiet moet een numerieke waarde zijn.'; $wb['limit_mailrouting_error_notint'] = 'De em-ail routing limiet moet een numerieke waarde zijn.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'De e-mail filter limiet moet een numerieke waarde zijn.'; $wb['limit_mailfetchmail_error_notint'] = 'De fetchmail limiet moet een numerieke waarde zijn.'; $wb['limit_mailquota_error_notint'] = 'De e-mail quota limiet moet een numerieke waarde zijn.'; @@ -202,4 +204,3 @@ $wb['limit_directive_snippets_txt'] = 'Show web server config selection'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/nl_client_template.lng b/interface/web/client/lib/lang/nl_client_template.lng index da4721757d..423b4d7b94 100644 --- a/interface/web/client/lib/lang/nl_client_template.lng +++ b/interface/web/client/lib/lang/nl_client_template.lng @@ -8,6 +8,7 @@ $wb['limit_mailaliasdomain_txt'] = 'Max. aantal domein aliassen'; $wb['limit_mailforward_txt'] = 'Max.aantal e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. aantal e-mail catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. aantal e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. aantal e-mail filters'; $wb['limit_fetchmail_txt'] = 'Max. aantal fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -39,6 +40,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'De e-mail domain alias limiet moet $wb['limit_mailforward_error_notint'] = 'De e-mail forward limiet moet een numerieke waarde zijn.'; $wb['limit_mailcatchall_error_notint'] = 'De e-mail catchall limiet moet een numerieke waarde zijn.'; $wb['limit_mailrouting_error_notint'] = 'De e-mail routing limiet moet een numerieke waarde zijn.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'De e-mail filter limiet moet een numerieke waarde zijn.'; $wb['limit_mailfetchmail_error_notint'] = 'De fetchmail limiet moet een numerieke waarde zijn.'; $wb['limit_mailquota_error_notint'] = 'De e-mail quota limiet moet een numerieke waarde zijn.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng index e8df5f7ad8..637dddc65d 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. aantal e-mail aliassen'; $wb['limit_mailforward_txt'] = 'Max. aantal e-mail forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. aantal e-mail catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. aantal e-mail routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. aantal e-mail filters'; $wb['limit_fetchmail_txt'] = 'Max. aantal fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -67,6 +68,7 @@ $wb['limit_mailalias_error_notint'] = 'De e-mail alias limiet moet een numerieke $wb['limit_mailforward_error_notint'] = 'De e-mail forward limiet moet een numerieke waarde zijn.'; $wb['limit_mailcatchall_error_notint'] = 'De e-mail catchall limiet moet een numerieke waarde zijn.'; $wb['limit_mailrouting_error_notint'] = 'De e-mail routing limiet moet een numerieke waarde zijn.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'De e-mail filter limiet moet een numerieke waarde zijn.'; $wb['limit_mailfetchmail_error_notint'] = 'De fetchmail limiet moet een numerieke waarde zijn.'; $wb['limit_mailquota_error_notint'] = 'De email quota limiet moet een numerieke waarde zijn.'; @@ -206,4 +208,3 @@ $wb['limit_directive_snippets_txt'] = 'Show web server config selection'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng index 89fafa6776..c040e787ae 100644 --- a/interface/web/client/lib/lang/pl_client.lng +++ b/interface/web/client/lib/lang/pl_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Maksymalna ilość aliasów e-mail'; $wb['limit_mailforward_txt'] = 'Maksymalna ilość przekierowań e-mail'; $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall'; $wb['limit_mailrouting_txt'] = 'Maksymalna ilość ścieżek e-mail'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów e-mail'; $wb['limit_fetchmail_txt'] = 'Maksymalna ilość kont z fetchmail'; $wb['limit_mailquota_txt'] = 'Pojemność skrzynki'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit aliasów e-mail musi być liczbą.' $wb['limit_mailforward_error_notint'] = 'Limit przekierowań musi być liczbą.'; $wb['limit_mailcatchall_error_notint'] = 'Limit e-mail catchall musi być liczbą.'; $wb['limit_mailrouting_error_notint'] = 'Limit ścieżek e-mail musi być liczbą.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit filtrów e-mail musi być liczbą.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmail musi być liczbą.'; $wb['limit_mailquota_error_notint'] = 'Limit pojemności skrzynki musi być liczbą.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pl_client_template.lng b/interface/web/client/lib/lang/pl_client_template.lng index 3a878ec974..5945310d0c 100644 --- a/interface/web/client/lib/lang/pl_client_template.lng +++ b/interface/web/client/lib/lang/pl_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Maksymalna ilość aliasów e-mail'; $wb['limit_mailforward_txt'] = 'Maksymalna ilość przekierowań e-mail'; $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall'; $wb['limit_mailrouting_txt'] = 'Maksymalna ilość ścieżek e-mail'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów e-mail'; $wb['limit_fetchmail_txt'] = 'Maksymalna ilość kont z fetchmail'; $wb['limit_mailquota_txt'] = 'Pojemność skrzynki'; @@ -35,6 +36,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit aliasów musi być liczbą.'; $wb['limit_mailforward_error_notint'] = 'Limit przekierowań e-mail musi być liczbą.'; $wb['limit_mailcatchall_error_notint'] = 'Limit e-mail catchall musi być liczbą.'; $wb['limit_mailrouting_error_notint'] = 'Limit ścieżek e-mail musi być liczbą.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit filtrów e-mail musi być liczbą.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmail musi być liczbą.'; $wb['limit_mailquota_error_notint'] = 'Limit pojemności skrzynki musi być liczbą.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng index 71f5bcfa4b..2762ebc15b 100644 --- a/interface/web/client/lib/lang/pl_reseller.lng +++ b/interface/web/client/lib/lang/pl_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Maksymalna ilość aliasów e-mail'; $wb['limit_mailforward_txt'] = 'Maksymalna ilość przekierowań e-mail'; $wb['limit_mailcatchall_txt'] = 'Maksymalna ilość kont e-mail catchall'; $wb['limit_mailrouting_txt'] = 'Maksymalna ilość ścieżek e-mail'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów e-mail'; $wb['limit_fetchmail_txt'] = 'Maksymalna ilość kont fetchmail'; $wb['limit_mailquota_txt'] = 'Limit skrzynki pocztowej'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit aliasów e-mail musi być liczbą.' $wb['limit_mailforward_error_notint'] = 'Limit przekierowań e-mail musi być liczbą.'; $wb['limit_mailcatchall_error_notint'] = 'Limit kont e-mail catchall musi być liczbą.'; $wb['limit_mailrouting_error_notint'] = 'Limit ścieżek e-mail musi być liczbą.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit filtrów e-mail musi być liczbą.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit kont fetchmail musi być liczbą.'; $wb['limit_mailquota_error_notint'] = 'Limit pojemności konta e-mail musi być liczbą.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng index 9ce35235cd..8ce7235079 100644 --- a/interface/web/client/lib/lang/pt_client.lng +++ b/interface/web/client/lib/lang/pt_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Número máximo de aliases de correio'; $wb['limit_mailforward_txt'] = 'Número máximo de redireccionamento de correio'; $wb['limit_mailcatchall_txt'] = 'Número máximo de catchall de correio'; $wb['limit_mailrouting_txt'] = 'Número máximo de rotas de correio'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Número máximo de filtros de correio'; $wb['limit_fetchmail_txt'] = 'Número máximo de fetchmail de correio'; $wb['limit_mailquota_txt'] = 'Quota de Correio'; @@ -63,6 +64,7 @@ $wb['limit_mailalias_error_notint'] = 'Limite do alias de correio deve ser um n $wb['limit_mailforward_error_notint'] = 'Limite de redireccionamento de correio deve ser um número'; $wb['limit_mailcatchall_error_notint'] = 'Limite de catchall deve ser um número.'; $wb['limit_mailrouting_error_notint'] = 'Limite de rotas de correio deve ser um número.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limite de filtros de correio deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'Limite de fetchmail deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'A quota de correio deve ser um número'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pt_client_template.lng b/interface/web/client/lib/lang/pt_client_template.lng index 0c4a949d49..b774a8c410 100644 --- a/interface/web/client/lib/lang/pt_client_template.lng +++ b/interface/web/client/lib/lang/pt_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Limite Máximo de alias de correio'; $wb['limit_mailforward_txt'] = 'Limite Máximo de redireccionamentos de correio'; $wb['limit_mailcatchall_txt'] = 'Limite máximo de contas catchall'; $wb['limit_mailrouting_txt'] = 'Limite máximo de rotas de Correio'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Número Máximo de Filtros de Correio'; $wb['limit_fetchmail_txt'] = 'Número Máximo de Contas fetchmail'; $wb['limit_mailquota_txt'] = 'Espaço de Caixa de Correio'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'O limite do apelido de correio deve ser n $wb['limit_mailforward_error_notint'] = 'O limite de direccionamento de correio deve ser um número'; $wb['limit_mailcatchall_error_notint'] = 'O limite de catchall do domínio deve ser um número'; $wb['limit_mailrouting_error_notint'] = 'Limite de rota de correio deve ser um número'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'O limite de filtro de correio deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'Limite fetchmail deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'Cota de correio deve ser um número.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng index 6bd89a971a..965a446ffb 100644 --- a/interface/web/client/lib/lang/pt_reseller.lng +++ b/interface/web/client/lib/lang/pt_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Número máximo de aliases de correio'; $wb['limit_mailforward_txt'] = 'Número máximo de encaminhamentos de correio'; $wb['limit_mailcatchall_txt'] = 'Número máximo de contas catchall'; $wb['limit_mailrouting_txt'] = 'Número máximo de rotas de correio'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Número máximo de filtros de correio'; $wb['limit_fetchmail_txt'] = 'Número máximo de contas fetchmail '; $wb['limit_mailquota_txt'] = 'Quota de correio'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'O limite de aliases de correio deve ser u $wb['limit_mailforward_error_notint'] = 'O limite de encaminhamentos de correio deve ser um número.'; $wb['limit_mailcatchall_error_notint'] = 'O limite de contas catchall deve ser um número.'; $wb['limit_mailrouting_error_notint'] = 'O limite de rotas de correio deve ser um número.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'O filtro de correio deve ser um número.'; $wb['limit_mailfetchmail_error_notint'] = 'O limite de fetchmail deve ser um número.'; $wb['limit_mailquota_error_notint'] = 'O limite de quota de correio deve ser um número.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng index 3bc5e59d2a..5ee1d8aaf6 100644 --- a/interface/web/client/lib/lang/ro_client.lng +++ b/interface/web/client/lib/lang/ro_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Numar maxim de email alias-uri'; $wb['limit_mailforward_txt'] = 'Numar maxim de mail forward'; $wb['limit_mailcatchall_txt'] = 'numar maxim de mail catch all'; $wb['limit_mailrouting_txt'] = 'Numar maxim de mail rute'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Numar maxim de filtre mail'; $wb['limit_fetchmail_txt'] = 'Numar maxim de conturi fetchmail'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -63,6 +64,7 @@ $wb['limit_mailalias_error_notint'] = 'Numarul maxim de alias-uri email trebuie $wb['limit_mailforward_error_notint'] = 'Numarul limta de forward-uri email trebuie sa fie un numar intreg'; $wb['limit_mailcatchall_error_notint'] = 'numarul limta de email catch all trebuie sa fie un numar intreg'; $wb['limit_mailrouting_error_notint'] = 'numarul maxim de rute email trebuie sa fie un numar intreg'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'numarul maxim de filtre email trebuie sa fie un numar intreg'; $wb['limit_mailfetchmail_error_notint'] = 'numarul maxim de fetchmail trebuie sa fie un numar intreg'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ro_client_template.lng b/interface/web/client/lib/lang/ro_client_template.lng index 57cbe690dd..65e110c2ab 100644 --- a/interface/web/client/lib/lang/ro_client_template.lng +++ b/interface/web/client/lib/lang/ro_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng index 512bc5cb23..afd557ab18 100644 --- a/interface/web/client/lib/lang/ro_reseller.lng +++ b/interface/web/client/lib/lang/ro_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng index 080512f5b0..70456bd255 100644 --- a/interface/web/client/lib/lang/ru_client.lng +++ b/interface/web/client/lib/lang/ru_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Макс. количество почтовых а $wb['limit_mailforward_txt'] = 'Макс.чисо почтовых пересылок'; $wb['limit_mailcatchall_txt'] = 'Макс. количество учётных записей сводных почтовых ящиков'; $wb['limit_mailrouting_txt'] = 'Макс. количество почтовых маршрутов'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Макс. количество почтовых фильтров'; $wb['limit_fetchmail_txt'] = 'Макс. количество учётных записей сборщиков почты'; $wb['limit_mailquota_txt'] = 'Квота почтового ящика'; @@ -62,6 +63,7 @@ $wb['limit_mailalias_error_notint'] = 'Лимит почтовых алиасо $wb['limit_mailforward_error_notint'] = 'Лимит почтовых пересылок должен быть числом.'; $wb['limit_mailcatchall_error_notint'] = 'Лимит сводных почтовых ящиков должен быть числом.'; $wb['limit_mailrouting_error_notint'] = 'Лимит почтовых маршрутов должен быть числом.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Лимит почтовых фильтров должен быть числом.'; $wb['limit_mailfetchmail_error_notint'] = 'Лимит сборщиков почты должен быть числом.'; $wb['limit_mailquota_error_notint'] = 'Лимит почтовой квоты должен быть числом.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Клик для установки'; $wb['limit_dns_record_error_notint'] = 'Лимит вторичных DNS-зон должен быть числом.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Лимиты'; -?> diff --git a/interface/web/client/lib/lang/ru_client_template.lng b/interface/web/client/lib/lang/ru_client_template.lng index 46168e1ad5..e540984824 100644 --- a/interface/web/client/lib/lang/ru_client_template.lng +++ b/interface/web/client/lib/lang/ru_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Макс. количество почтовых а $wb['limit_mailforward_txt'] = 'Макс. количество почтовых пересылок'; $wb['limit_mailcatchall_txt'] = 'Макс. количество учётных записей сводных почтовых ящиков'; $wb['limit_mailrouting_txt'] = 'Макс. количество почтовых маршрутов'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Макс. количество почтовых фильтров'; $wb['limit_fetchmail_txt'] = 'Макс. количество учётных записей сборщиков почты'; $wb['limit_mailquota_txt'] = 'Квота почтового ящика'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'Лимит почтовых алиасо $wb['limit_mailforward_error_notint'] = 'Лимит почтовых пересылок должен быть числом.'; $wb['limit_mailcatchall_error_notint'] = 'Лимит сводных почтовых ящиков должен быть числом.'; $wb['limit_mailrouting_error_notint'] = 'Лимит почтовых маршрутов должен быть числом.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Лимит почтовых фильтров должен быть числом.'; $wb['limit_mailfetchmail_error_notint'] = 'Лимит сборщиков почты должен быть числом.'; $wb['limit_mailquota_error_notint'] = 'Лимит почтовой квоты должен быть числом.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Web-серверы'; $wb['db_servers_txt'] = 'Серверы баз данных'; $wb['mail_servers_txt'] = 'Серверы почты'; $wb['Limits'] = 'Лимиты'; -?> diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng index f5806377c3..4b90d0347a 100644 --- a/interface/web/client/lib/lang/ru_reseller.lng +++ b/interface/web/client/lib/lang/ru_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Макс. количество почтовых а $wb['limit_mailforward_txt'] = 'Макс. количество почтовых пересылок'; $wb['limit_mailcatchall_txt'] = 'Макс. количество учётных записей сводных почтовых ящиков'; $wb['limit_mailrouting_txt'] = 'Максимальное количество почтовых маршрутов'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Макс. количество почтовых фильтров'; $wb['limit_fetchmail_txt'] = 'Макс. количество учётных записей сборщиков почты'; $wb['limit_mailquota_txt'] = 'Квота ящика'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'Лимит почтовых алиасо $wb['limit_mailforward_error_notint'] = 'Лимит почтовых пересылок должен быть числом.'; $wb['limit_mailcatchall_error_notint'] = 'Лимит сводных почтовых ящиков должен быть числом.'; $wb['limit_mailrouting_error_notint'] = 'Лимит почтовых маршрутов должен быть числом.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Лимит почтовых фильтров должен быть числом.'; $wb['limit_mailfetchmail_error_notint'] = 'Лимит сборщиков почты должен быть числомм.'; $wb['limit_mailquota_error_notint'] = 'Лимит почтовой квоты должен быть числом.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Клик для установки'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Лимиты'; -?> diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng index feaee0e9c1..bf585054cd 100644 --- a/interface/web/client/lib/lang/se_client.lng +++ b/interface/web/client/lib/lang/se_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max antal epostalias'; $wb['limit_mailforward_txt'] = 'Max antal vidarebefordringar'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max antal epostrutter'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max antal epostfilter'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Kvot för epostkonton'; @@ -63,6 +64,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng index 46932c9e50..c9001e42e2 100644 --- a/interface/web/client/lib/lang/se_client_template.lng +++ b/interface/web/client/lib/lang/se_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -32,6 +33,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng index 512bc5cb23..afd557ab18 100644 --- a/interface/web/client/lib/lang/se_reseller.lng +++ b/interface/web/client/lib/lang/se_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. number of email aliases'; $wb['limit_mailforward_txt'] = 'Max. number of email forwarders'; $wb['limit_mailcatchall_txt'] = 'Max. number of email catchall accounts'; $wb['limit_mailrouting_txt'] = 'Max. number of email routes'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. number of email filters'; $wb['limit_fetchmail_txt'] = 'Max. number of fetchmail accounts'; $wb['limit_mailquota_txt'] = 'Mailbox quota'; @@ -66,6 +67,7 @@ $wb['limit_mailalias_error_notint'] = 'The email alias limit must be a number.'; $wb['limit_mailforward_error_notint'] = 'The email forward limit must be a number.'; $wb['limit_mailcatchall_error_notint'] = 'The email catchall limit must be a number.'; $wb['limit_mailrouting_error_notint'] = 'The email routing limit must be a number.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'The email filter limit must be a number.'; $wb['limit_mailfetchmail_error_notint'] = 'The fetchmail limit must be a number.'; $wb['limit_mailquota_error_notint'] = 'The email quota limit must be a number.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng index 542b4121d9..cfaced0561 100644 --- a/interface/web/client/lib/lang/sk_client.lng +++ b/interface/web/client/lib/lang/sk_client.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. počet e-mailových aliasov'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových preposielaní'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménových košov'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových smerovaní'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov'; $wb['limit_fetchmail_txt'] = 'Max. počet účtov fetchmail'; $wb['limit_mailquota_txt'] = 'Kvóta schránky'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit email alias musí byť číslo.'; $wb['limit_mailforward_error_notint'] = 'Limit email preposielaní musí byť číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit doménových košov musí byť číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit email smerovaní musí byť číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filter musí byť číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmail musí byť číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit email kvót musí byť číslo.'; @@ -202,4 +204,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['limit_dns_record_error_notint'] = 'The dns record limit must be a number.'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/sk_client_template.lng b/interface/web/client/lib/lang/sk_client_template.lng index e3cb788bdd..9a602da093 100644 --- a/interface/web/client/lib/lang/sk_client_template.lng +++ b/interface/web/client/lib/lang/sk_client_template.lng @@ -7,6 +7,7 @@ $wb['limit_mailalias_txt'] = 'Max. počet e-mailových aliasov'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových prenose'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménový košov'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových smerovaní'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov'; $wb['limit_fetchmail_txt'] = 'Max. počet účtov fetchmail'; $wb['limit_mailquota_txt'] = 'Kvóta schránky'; @@ -34,6 +35,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit email aliasov musí byť číslo.'; $wb['limit_mailforward_error_notint'] = 'Limit emailpreposielaní musí byť číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit email doménových košov musí byť číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit email smerovaní musí byť číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filter musí byť číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmail musí byť číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit email kvôta musí byť číslo.'; @@ -122,4 +124,3 @@ $wb['web_servers_txt'] = 'Webservers'; $wb['db_servers_txt'] = 'Database servers'; $wb['mail_servers_txt'] = 'Mailservers'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng index 82b289df2b..47dbd4f64c 100644 --- a/interface/web/client/lib/lang/sk_reseller.lng +++ b/interface/web/client/lib/lang/sk_reseller.lng @@ -5,6 +5,7 @@ $wb['limit_mailalias_txt'] = 'Max. počet e-mailových aliasov'; $wb['limit_mailforward_txt'] = 'Max. počet e-mailových preposielaní'; $wb['limit_mailcatchall_txt'] = 'Max. počet e-mailových doménových košov'; $wb['limit_mailrouting_txt'] = 'Max. počet e-mailových smerovaní'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov'; $wb['limit_fetchmail_txt'] = 'Max. počet účtov fetchmail'; $wb['limit_mailquota_txt'] = 'Kvóta schránky'; @@ -65,6 +66,7 @@ $wb['limit_mailalias_error_notint'] = 'Limit Email alias musí byť číslo.'; $wb['limit_mailforward_error_notint'] = 'Limit E-mail preposielanie musí byť číslo.'; $wb['limit_mailcatchall_error_notint'] = 'Limit E-mail doménový kôš musí byť číslo.'; $wb['limit_mailrouting_error_notint'] = 'Limit E-mail smerovania musí byť číslo.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'Limit email filter musí byť číslo.'; $wb['limit_mailfetchmail_error_notint'] = 'Limit fetchmail musí byť číslo.'; $wb['limit_mailquota_error_notint'] = 'Limit email kvóta musí byť číslo.'; @@ -206,4 +208,3 @@ $wb['password_click_to_set_txt'] = 'Click to set'; $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Limits'; -?> diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng index d87fe26da9..a922525b67 100644 --- a/interface/web/client/lib/lang/tr_client.lng +++ b/interface/web/client/lib/lang/tr_client.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı'; $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirme Sayısı'; $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı'; $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı'; $wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı'; $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; @@ -73,6 +74,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'E-posta takma etki alanı sınırı $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.'; $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.'; $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.'; $wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.'; $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.'; @@ -204,4 +206,3 @@ $wb['email_error_empty'] = 'E-posta boş olamaz.'; $wb['limit_directive_snippets_txt'] = 'Web Sunucu Yapılandırma Seçimi Görüntülensin'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Sınırlar'; -?> diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng index 8ae0954db5..64b54bb30e 100644 --- a/interface/web/client/lib/lang/tr_client_template.lng +++ b/interface/web/client/lib/lang/tr_client_template.lng @@ -12,6 +12,7 @@ $wb['limit_mailmailinglist_txt'] = 'En Fazla E-posta Listesi Sayısı'; $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı'; $wb['limit_mailcatchall_txt'] = 'En Fazla Tümünü Al Hesabı Sayısı'; $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı'; $wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı'; $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; @@ -47,6 +48,7 @@ $wb['limit_mailaliasdomain_error_notint'] = 'Takma e-posta etki alanı sınırı $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirme sınırı bir sayı olmalıdır.'; $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al sınırı bir sayı olmalıdır.'; $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.'; $wb['limit_mailfetchmail_error_notint'] = 'E-posta alma sınırı bir sayı olmalıdır.'; $wb['limit_mailquota_error_notint'] = 'E-posta kotası sınırı bir sayı olmalıdır.'; @@ -125,4 +127,3 @@ $wb['xmpp_servers_txt'] = 'XMPP Sunucuları'; $wb['db_servers_txt'] = 'Veritabanı Sunucuları'; $wb['mail_servers_txt'] = 'E-posta Sunucuları'; $wb['Limits'] = 'Sınırlar'; -?> diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng index d7bc06429e..023bc08197 100644 --- a/interface/web/client/lib/lang/tr_reseller.lng +++ b/interface/web/client/lib/lang/tr_reseller.lng @@ -7,6 +7,7 @@ $wb['limit_mailaliasdomain_txt'] = 'En Fazla Takma Etki Alanı Sayısı'; $wb['limit_mailforward_txt'] = 'En Fazla E-posta Yönlendirici Sayısı'; $wb['limit_mailcatchall_txt'] = 'En Fazla E-posta Tümünü Al Hesabı Sayısı'; $wb['limit_mailrouting_txt'] = 'En Fazla E-posta Yöneltici Sayısı'; +$wb['limit_mail_wblist_txt'] = 'Max. number of email white / blacklist entries'; $wb['limit_mailfilter_txt'] = 'En Fazla E-posta Süzgeci Sayısı'; $wb['limit_fetchmail_txt'] = 'En Fazla E-posta Alma Hesabı Sayısı'; $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; @@ -73,6 +74,7 @@ $wb['limit_mailalias_error_notint'] = 'Takma e-posta sınırı bir sayı olmalı $wb['limit_mailforward_error_notint'] = 'E-posta yönlendirici sınırı bir sayı olmalıdır.'; $wb['limit_mailcatchall_error_notint'] = 'E-posta tümünü al hesabı sınırı bir sayı olmalıdır.'; $wb['limit_mailrouting_error_notint'] = 'E-posta yöneltici sınırı bir sayı olmalıdır.'; +$wb['limit_mail_wblist_error_notint'] = 'The email white / blacklist limit must be a number.'; $wb['limit_mailfilter_error_notint'] = 'E-posta süzgeci sınırı bir sayı olmalıdır.'; $wb['limit_mailfetchmail_error_notint'] = 'E-posta alıcısı sınırı bir sayı olmalıdır.'; $wb['limit_mailquota_error_notint'] = 'E-posta kota sınırı bir sayı olmalıdır.'; @@ -210,4 +212,3 @@ $wb['limit_database_quota_error_notint'] = 'Veritabanı kotası sınırı bir sa $wb['Reseller'] = 'Reseller'; $wb['Address'] = 'Address'; $wb['Limits'] = 'Sınırlar'; -?> diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 1f0a855eef..39512208b4 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -212,6 +212,9 @@
+
+ +
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm index 005db0724a..4573e4b0d6 100644 --- a/interface/web/client/templates/client_template_edit_limits.htm +++ b/interface/web/client/templates/client_template_edit_limits.htm @@ -169,6 +169,9 @@
+
+ +
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm index e1e69d4a14..ff185ce9a4 100644 --- a/interface/web/client/templates/reseller_edit_limits.htm +++ b/interface/web/client/templates/reseller_edit_limits.htm @@ -213,6 +213,9 @@
+
+ +
diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php index a299bbcaf3..e5a8cc459f 100644 --- a/interface/web/dashboard/dashlets/limits.php +++ b/interface/web/dashboard/dashlets/limits.php @@ -47,6 +47,10 @@ class dashlet_limits 'db_table' => 'mail_transport', 'db_where' => ""); + $limits[] = array('field' => 'limit_mail_wblist', + 'db_table' => 'mail_access', + 'db_where' => ""); + $limits[] = array('field' => 'limit_mailfilter', 'db_table' => 'mail_user_filter', 'db_where' => ""); diff --git a/interface/web/mail/lib/lang/ar_mail_blacklist.lng b/interface/web/mail/lib/lang/ar_mail_blacklist.lng index 5b2815c0d0..6173df6a07 100644 --- a/interface/web/mail/lib/lang/ar_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ar_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ar_mail_whitelist.lng b/interface/web/mail/lib/lang/ar_mail_whitelist.lng index 92c365ba2b..1cdc15564d 100644 --- a/interface/web/mail/lib/lang/ar_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ar_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/bg_mail_blacklist.lng b/interface/web/mail/lib/lang/bg_mail_blacklist.lng index e250039e2e..9b04dc85ba 100644 --- a/interface/web/mail/lib/lang/bg_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/bg_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Активен'; $wb['source_error_notempty'] = 'Полето с адреса е празно.'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максималният брой за емайл филтри в твоят профил е достигнат.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/bg_mail_whitelist.lng b/interface/web/mail/lib/lang/bg_mail_whitelist.lng index 35c892add4..b17ee61002 100644 --- a/interface/web/mail/lib/lang/bg_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/bg_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Активен'; $wb['source_error_notempty'] = 'Полето с адреса е празно.'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максималният брой на емаил филтри за твоя акаунт е достигнат.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/br_mail_blacklist.lng b/interface/web/mail/lib/lang/br_mail_blacklist.lng index 516946ce19..b72ea94ff3 100644 --- a/interface/web/mail/lib/lang/br_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/br_mail_blacklist.lng @@ -6,3 +6,4 @@ $wb['active_txt'] = 'Ativo'; $wb['source_error_notempty'] = 'Destinatário está vazio.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O limite de filtros de email para esta conta foi alcançado.'; +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/br_mail_whitelist.lng b/interface/web/mail/lib/lang/br_mail_whitelist.lng index e62e5a778e..4af2d198b0 100644 --- a/interface/web/mail/lib/lang/br_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/br_mail_whitelist.lng @@ -6,3 +6,4 @@ $wb['active_txt'] = 'Ativo'; $wb['source_error_notempty'] = 'Endereço de email está vazio.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O limite de filtros de email para esta conta foi alcançado.'; +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ca_mail_blacklist.lng b/interface/web/mail/lib/lang/ca_mail_blacklist.lng index 3f5f9709e8..20d7f65ad2 100644 --- a/interface/web/mail/lib/lang/ca_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ca_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actif'; $wb['source_error_notempty'] = 'L\'adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres d\'email pour votre compte a été atteint.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ca_mail_whitelist.lng b/interface/web/mail/lib/lang/ca_mail_whitelist.lng index 0d621c95f3..b78c665a10 100644 --- a/interface/web/mail/lib/lang/ca_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ca_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actif'; $wb['source_error_notempty'] = 'L\'adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres à mails pour votre compte a été atteint.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/cz_mail_blacklist.lng b/interface/web/mail/lib/lang/cz_mail_blacklist.lng index 250d3a7ffa..7348b738af 100644 --- a/interface/web/mail/lib/lang/cz_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/cz_mail_blacklist.lng @@ -6,3 +6,4 @@ $wb['active_txt'] = 'Aktivní'; $wb['source_error_notempty'] = 'Adresa je prázdná.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Byl dosažen maximální počet e-mail filtrů pro Váš účet.'; +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/cz_mail_whitelist.lng b/interface/web/mail/lib/lang/cz_mail_whitelist.lng index c96f21909a..3db1076231 100644 --- a/interface/web/mail/lib/lang/cz_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/cz_mail_whitelist.lng @@ -6,3 +6,4 @@ $wb['active_txt'] = 'Aktivní'; $wb['source_error_notempty'] = 'Adresa je prázdná.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Byl dosažen maximální počet e-mail filtrů pro Váš účet.'; +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/de_mail_blacklist.lng b/interface/web/mail/lib/lang/de_mail_blacklist.lng index 4611dadd06..42f1da41d7 100644 --- a/interface/web/mail/lib/lang/de_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/de_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktiv'; $wb['source_error_notempty'] = 'Adresse ist leer.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Die maximale Anzahl an E-Mail Filter für Ihr Konto wurde erreicht.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/de_mail_whitelist.lng b/interface/web/mail/lib/lang/de_mail_whitelist.lng index 1506deba3f..fac0efcb8e 100644 --- a/interface/web/mail/lib/lang/de_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/de_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktiv'; $wb['source_error_notempty'] = 'E-Mail Adresse ist leer.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Die maximale Anzahl an E-Mail Filtern für Ihr Konto wurde erreicht.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/dk_mail_blacklist.lng b/interface/web/mail/lib/lang/dk_mail_blacklist.lng index 2830319b06..79ff300aed 100644 --- a/interface/web/mail/lib/lang/dk_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/dk_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktiv'; $wb['source_error_notempty'] = 'Adresse er tom.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Max. antal af e-mail filtere for din konto er nået.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/dk_mail_whitelist.lng b/interface/web/mail/lib/lang/dk_mail_whitelist.lng index a05c234f94..bb671d84f0 100644 --- a/interface/web/mail/lib/lang/dk_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/dk_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktiv'; $wb['source_error_notempty'] = 'Adresse er tom.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Max. antal af email filtere for din konto er nået.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/el_mail_blacklist.lng b/interface/web/mail/lib/lang/el_mail_blacklist.lng index 479a3deb01..003f7462c7 100644 --- a/interface/web/mail/lib/lang/el_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/el_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Ενεργή'; $wb['source_error_notempty'] = 'Η διεύθυνση είναι κενή.'; $wb['type_txt'] = 'Τύπος'; $wb['limit_mailfilter_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των φίλτρων email για τον λογαριασμό σας.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/el_mail_whitelist.lng b/interface/web/mail/lib/lang/el_mail_whitelist.lng index 6c477f60c2..5c3a095a24 100644 --- a/interface/web/mail/lib/lang/el_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/el_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Ενεργή'; $wb['source_error_notempty'] = 'Η διεύθυνση είναι κενή'; $wb['type_txt'] = 'Τύπος'; $wb['limit_mailfilter_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των φίλτρων email για τον λογαριασμό σας.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/en_mail_blacklist.lng b/interface/web/mail/lib/lang/en_mail_blacklist.lng index 8bae57d6b0..6173df6a07 100644 --- a/interface/web/mail/lib/lang/en_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/en_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> \ No newline at end of file +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/en_mail_whitelist.lng b/interface/web/mail/lib/lang/en_mail_whitelist.lng index f7e4ab881f..d765aad6a1 100644 --- a/interface/web/mail/lib/lang/en_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/en_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> \ No newline at end of file +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/es_mail_blacklist.lng b/interface/web/mail/lib/lang/es_mail_blacklist.lng index 81ae71c575..29353365d6 100644 --- a/interface/web/mail/lib/lang/es_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/es_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['server_id_txt'] = 'Servidor'; $wb['source_error_notempty'] = 'La dirección está vacía.'; $wb['source_txt'] = 'Dirección en la lista negra'; $wb['type_txt'] = 'Tipo'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/es_mail_whitelist.lng b/interface/web/mail/lib/lang/es_mail_whitelist.lng index e92979f13c..8cf5323098 100644 --- a/interface/web/mail/lib/lang/es_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/es_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Habilitado'; $wb['source_error_notempty'] = 'La dirección está vacía.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'Ha alcanzado en su cuenta el número máx. de filtros de correo.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/fi_mail_blacklist.lng b/interface/web/mail/lib/lang/fi_mail_blacklist.lng index 66cb93004e..59aa88bb7e 100644 --- a/interface/web/mail/lib/lang/fi_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/fi_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Käytössä'; $wb['source_error_notempty'] = 'Estetty osoite on tyhjä'; $wb['type_txt'] = 'Tyyppi'; $wb['limit_mailfilter_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä suodattimia.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/fi_mail_whitelist.lng b/interface/web/mail/lib/lang/fi_mail_whitelist.lng index abd8e85f2b..b0d7cfe270 100644 --- a/interface/web/mail/lib/lang/fi_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/fi_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Käytössä'; $wb['source_error_notempty'] = 'Osoite on tyhjä'; $wb['type_txt'] = 'Tyyppi'; $wb['limit_mailfilter_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä suodattimia.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/fr_mail_blacklist.lng b/interface/web/mail/lib/lang/fr_mail_blacklist.lng index 161acd632d..035c228bc6 100644 --- a/interface/web/mail/lib/lang/fr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/fr_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actif'; $wb['source_error_notempty'] = 'L’adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres d’e-mail pour votre compte a été atteint.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/fr_mail_whitelist.lng b/interface/web/mail/lib/lang/fr_mail_whitelist.lng index f11d0b76a7..ec11e6c674 100644 --- a/interface/web/mail/lib/lang/fr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/fr_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actif'; $wb['source_error_notempty'] = 'L’adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres à mails pour votre compte a été atteint.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/hr_mail_blacklist.lng b/interface/web/mail/lib/lang/hr_mail_blacklist.lng index dbce8de10d..6842348ef7 100644 --- a/interface/web/mail/lib/lang/hr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/hr_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktivno'; $wb['source_error_notempty'] = 'Adresa je prazna'; $wb['type_txt'] = 'Vrsta'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/hr_mail_whitelist.lng b/interface/web/mail/lib/lang/hr_mail_whitelist.lng index a43e8eef46..54879fc79c 100644 --- a/interface/web/mail/lib/lang/hr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/hr_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktivno'; $wb['source_error_notempty'] = 'Adresa je prazna'; $wb['type_txt'] = 'Vrsta'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/hu_mail_blacklist.lng b/interface/web/mail/lib/lang/hu_mail_blacklist.lng index 1d2f0e014e..e183910f78 100644 --- a/interface/web/mail/lib/lang/hu_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/hu_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktív'; $wb['source_error_notempty'] = 'Cím üres.'; $wb['type_txt'] = 'Típus'; $wb['limit_mailfilter_txt'] = 'Nincs több szűrő lehetőség.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/hu_mail_whitelist.lng b/interface/web/mail/lib/lang/hu_mail_whitelist.lng index 71c3cf39bb..7cda150e54 100644 --- a/interface/web/mail/lib/lang/hu_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/hu_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktív'; $wb['source_error_notempty'] = 'Cím mező üres.'; $wb['type_txt'] = 'Típus'; $wb['limit_mailfilter_txt'] = 'Nincs több szűrő lehetőség.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/id_mail_blacklist.lng b/interface/web/mail/lib/lang/id_mail_blacklist.lng index 4454a33c24..2271836a3f 100644 --- a/interface/web/mail/lib/lang/id_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/id_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktif'; $wb['source_error_notempty'] = 'Alamat kosong.'; $wb['type_txt'] = 'Tipe'; $wb['limit_mailfilter_txt'] = 'Jumlah maks penyaringan email untuk akun Anda telah tercapai.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/id_mail_whitelist.lng b/interface/web/mail/lib/lang/id_mail_whitelist.lng index 52dd134271..d73c11c39c 100644 --- a/interface/web/mail/lib/lang/id_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/id_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktif'; $wb['source_error_notempty'] = 'Alamat kosong.'; $wb['type_txt'] = 'Tipe'; $wb['limit_mailfilter_txt'] = 'Jumlah maks filter email untuk akun Anda telah tercapai.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/it_mail_blacklist.lng b/interface/web/mail/lib/lang/it_mail_blacklist.lng index 169015d658..bb0c21459b 100644 --- a/interface/web/mail/lib/lang/it_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/it_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Attivo'; $wb['source_error_notempty'] = 'Address vuoto.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/it_mail_whitelist.lng b/interface/web/mail/lib/lang/it_mail_whitelist.lng index c63f5759f4..e4b151310b 100644 --- a/interface/web/mail/lib/lang/it_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/it_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Attivo'; $wb['source_error_notempty'] = 'Address vuoto.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ja_mail_blacklist.lng b/interface/web/mail/lib/lang/ja_mail_blacklist.lng index 9007f6bb03..a012e29b16 100644 --- a/interface/web/mail/lib/lang/ja_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ja_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = '有効'; $wb['source_error_notempty'] = 'アドレスを指定してください'; $wb['type_txt'] = '種別'; $wb['limit_mailfilter_txt'] = 'メールフィルターが最大数に達したため、これ以上追加できません。'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ja_mail_whitelist.lng b/interface/web/mail/lib/lang/ja_mail_whitelist.lng index 74d51da927..6e903201df 100644 --- a/interface/web/mail/lib/lang/ja_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ja_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = '有効'; $wb['source_error_notempty'] = 'アドレスを指定してください'; $wb['type_txt'] = '種別'; $wb['limit_mailfilter_txt'] = 'メールフィルターが最大数に達したため、これ以上追加できません。'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/nl_mail_blacklist.lng b/interface/web/mail/lib/lang/nl_mail_blacklist.lng index baa7b1ebba..1e4f986b60 100644 --- a/interface/web/mail/lib/lang/nl_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/nl_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actief'; $wb['source_error_notempty'] = 'Adres is niet ingvuld.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/nl_mail_whitelist.lng b/interface/web/mail/lib/lang/nl_mail_whitelist.lng index 604110edd5..25b594dba3 100644 --- a/interface/web/mail/lib/lang/nl_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/nl_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Actief'; $wb['source_error_notempty'] = 'Adres is niet ingvuld.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/pl_mail_blacklist.lng b/interface/web/mail/lib/lang/pl_mail_blacklist.lng index 528f2f741a..5558e5f78f 100644 --- a/interface/web/mail/lib/lang/pl_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/pl_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktywny'; $wb['source_error_notempty'] = 'Adres jest pusty.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów dla Twojego konta została przekroczona.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/pl_mail_whitelist.lng b/interface/web/mail/lib/lang/pl_mail_whitelist.lng index 203c5bae73..9e4f6f686c 100644 --- a/interface/web/mail/lib/lang/pl_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/pl_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktywny'; $wb['source_error_notempty'] = 'Adres jest pusty.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów e-mail dla Twojego konta zosała przekroczona.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/pt_mail_blacklist.lng b/interface/web/mail/lib/lang/pt_mail_blacklist.lng index b7be9be477..b51b784e0a 100644 --- a/interface/web/mail/lib/lang/pt_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/pt_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Activo'; $wb['source_error_notempty'] = 'Endereço em branco.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O número máximo de filtros de correio para a conta foi atingido..'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/pt_mail_whitelist.lng b/interface/web/mail/lib/lang/pt_mail_whitelist.lng index 92cc78d80d..f82845095f 100644 --- a/interface/web/mail/lib/lang/pt_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/pt_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Activo'; $wb['source_error_notempty'] = 'Endereço em Branco.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O número máximo de filtros para a conta foi atingido.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ro_mail_blacklist.lng b/interface/web/mail/lib/lang/ro_mail_blacklist.lng index a0feb78262..cd76a87313 100644 --- a/interface/web/mail/lib/lang/ro_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ro_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Address este goala'; $wb['type_txt'] = 'Tip'; $wb['limit_mailfilter_txt'] = 'Numarul maxim de filtre pentru contul dumneavoastra'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ro_mail_whitelist.lng b/interface/web/mail/lib/lang/ro_mail_whitelist.lng index 7a3f9f515c..8eab139b00 100644 --- a/interface/web/mail/lib/lang/ro_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ro_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Active'; $wb['source_error_notempty'] = 'Addresa e necompletata'; $wb['type_txt'] = 'Tip'; $wb['limit_mailfilter_txt'] = 'numarul maxim de filtre pe contul dumneavoastra a fost atins'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ru_mail_blacklist.lng b/interface/web/mail/lib/lang/ru_mail_blacklist.lng index 986935386e..8c022b693e 100644 --- a/interface/web/mail/lib/lang/ru_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ru_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Активно'; $wb['source_error_notempty'] = 'Адрес пустой!'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/ru_mail_whitelist.lng b/interface/web/mail/lib/lang/ru_mail_whitelist.lng index bd8a1ae06b..5a32140a83 100644 --- a/interface/web/mail/lib/lang/ru_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ru_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Активно'; $wb['source_error_notempty'] = 'Адрес пустой!'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/se_mail_blacklist.lng b/interface/web/mail/lib/lang/se_mail_blacklist.lng index 34b1f76db9..08b62e1e7c 100644 --- a/interface/web/mail/lib/lang/se_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/se_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['recipient_txt'] = 'Mottagare'; $wb['source_error_notempty'] = 'Adressfältet är tomt.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/se_mail_whitelist.lng b/interface/web/mail/lib/lang/se_mail_whitelist.lng index 7ce682ff6b..3f78c08817 100644 --- a/interface/web/mail/lib/lang/se_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/se_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['recipient_txt'] = 'Mottagare'; $wb['source_error_notempty'] = 'Adressen är tom.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maximala antalet epostfilter för ditt konto är uppnått.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/sk_mail_blacklist.lng b/interface/web/mail/lib/lang/sk_mail_blacklist.lng index d5775a6642..d3b5c0cfe5 100644 --- a/interface/web/mail/lib/lang/sk_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/sk_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktívne'; $wb['source_error_notempty'] = 'Adresa je prázdna.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov pre váš účet je dosiahnutý.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/sk_mail_whitelist.lng b/interface/web/mail/lib/lang/sk_mail_whitelist.lng index 6e2107a0d8..43ce09e77e 100644 --- a/interface/web/mail/lib/lang/sk_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/sk_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Aktívne'; $wb['source_error_notempty'] = 'Adresa je prázdna.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov pre váš účet je dosiahnutý.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist.lng b/interface/web/mail/lib/lang/tr_mail_blacklist.lng index 381a11fa98..b59a9b8b42 100644 --- a/interface/web/mail/lib/lang/tr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/tr_mail_blacklist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Etkin'; $wb['source_error_notempty'] = 'Adres boş olamaz.'; $wb['type_txt'] = 'Tür'; $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist.lng b/interface/web/mail/lib/lang/tr_mail_whitelist.lng index c6272a9ede..1667809c3e 100644 --- a/interface/web/mail/lib/lang/tr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/tr_mail_whitelist.lng @@ -6,4 +6,4 @@ $wb['active_txt'] = 'Etkin'; $wb['source_error_notempty'] = 'Adres boş olamaz.'; $wb['type_txt'] = 'Tür'; $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.'; -?> +$wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php index 1ad8d6affd..3c8acb505d 100644 --- a/interface/web/mail/mail_blacklist_edit.php +++ b/interface/web/mail/mail_blacklist_edit.php @@ -52,6 +52,21 @@ class page_action extends tform_actions { protected $client_allowed_types = array( 'recipient', 'sender' ); + function onShowNew() { + global $app; + + if($_SESSION["s"]["user"]["typ"] != 'admin') { + if(!$app->tform->checkClientLimit('limit_mail_wblist')) { + $app->error($app->tform->wordbook["limit_mail_wblist_txt"]); + } + if(!$app->tform->checkResellerLimit('limit_mail_wblist')) { + $app->error('Reseller: '.$app->tform->wordbook["limit_mail_wblist_txt"]); + } + } + + parent::onShowNew(); + } + function onBeforeUpdate() { global $app, $conf; @@ -70,23 +85,37 @@ class page_action extends tform_actions { // Non-admin checks if($_SESSION["s"]["user"]["typ"] != 'admin') { - // Non-admin can only use type 'sender' or 'recipient' and address must belong to the client's domains + // Non-admin can only use type 'sender' or 'recipient' if(! in_array($this->dataRecord["type"], $this->client_allowed_types)) { $app->tform->errorMessage .= $app->lng('Blacklist type requires admin permissions'); } - // address must be valid email + + // Address must be valid email if(! filter_var( $this->dataRecord["source"], FILTER_VALIDATE_EMAIL )) { $app->tform->errorMessage .= $app->lng('Invalid address: must be a valid email address'); } + + // Address must belong to the client's domains $tmp = explode('@', $this->dataRecord["source"]); $domain = trim( array_pop($tmp) ); $AUTHSQL = $app->tform->getAuthSQL('r'); $rec = $app->db->queryOneRecord("SELECT domain_id from mail_domain WHERE ${AUTHSQL} AND domain = ?", $domain); - // address must belong to the client's domains if(! (is_array($rec) && isset($rec['domain_id']) && is_numeric($rec['domain_id']))) { $app->tform->errorMessage .= $app->lng('Invalid address: you have no permission for this domain.'); } unset($rec); + + // Check the client limits + $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); + $client = $app->db->queryOneRecord("SELECT limit_mail_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + if($this->id == 0 && $client["limit_mail_wblist"] >= 0) { + $TYPES_LIST = "('" . join("', '", $this->client_allowed_types) . "')"; + $tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE ${AUTHSQL} AND type in ${TYPES_LIST}"); + if($tmp["number"] >= $client["limit_mail_wblist"]) { + $app->tform->errorMessage .= $app->tform->wordbook["limit_mail_wblist_txt"]."
"; + } + unset($tmp); + } } if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); @@ -99,5 +128,4 @@ class page_action extends tform_actions { $app->tform_actions = new page_action; $app->tform_actions->onLoad(); - ?> diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php index 52106c1882..bfabbe64d2 100644 --- a/interface/web/mail/mail_whitelist_edit.php +++ b/interface/web/mail/mail_whitelist_edit.php @@ -52,6 +52,21 @@ class page_action extends tform_actions { protected $client_allowed_types = array( 'recipient', 'sender' ); + function onShowNew() { + global $app; + + if($_SESSION["s"]["user"]["typ"] != 'admin') { + if(!$app->tform->checkClientLimit('limit_mail_wblist')) { + $app->error($app->tform->wordbook["limit_mail_wblist_txt"]); + } + if(!$app->tform->checkResellerLimit('limit_mail_wblist')) { + $app->error('Reseller: '.$app->tform->wordbook["limit_mail_wblist_txt"]); + } + } + + parent::onShowNew(); + } + function onBeforeUpdate() { global $app, $conf; @@ -70,25 +85,40 @@ class page_action extends tform_actions { // Non-admin checks if($_SESSION["s"]["user"]["typ"] != 'admin') { - // Non-admin can only use type 'sender' or 'recipient' and address must belong to the client's domains + // Non-admin can only use type 'sender' or 'recipient' if(! in_array($this->dataRecord["type"], $this->client_allowed_types)) { $app->tform->errorMessage .= $app->lng('Whitelist type requires admin permissions'); } - // address must be valid email + + // Address must be valid email if(! filter_var( $this->dataRecord["source"], FILTER_VALIDATE_EMAIL )) { $app->tform->errorMessage .= $app->lng('Invalid address: must be a valid email address'); } + + // Address must belong to the client's domains $tmp = explode('@', $this->dataRecord["source"]); $domain = trim( array_pop($tmp) ); $AUTHSQL = $app->tform->getAuthSQL('r'); $rec = $app->db->queryOneRecord("SELECT domain_id from mail_domain WHERE ${AUTHSQL} AND domain = ?", $domain); - // address must belong to the client's domains if(! (is_array($rec) && isset($rec['domain_id']) && is_numeric($rec['domain_id']))) { $app->tform->errorMessage .= $app->lng('Invalid address: you have no permission for this domain.'); } unset($rec); + + // Check the client limits + $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); + $client = $app->db->queryOneRecord("SELECT limit_mail_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + if($this->id == 0 && $client["limit_mail_wblist"] >= 0) { + $TYPES_LIST = "('" . join("', '", $this->client_allowed_types) . "')"; + $tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE ${AUTHSQL} AND type in ${TYPES_LIST}"); + if($tmp["number"] >= $client["limit_mail_wblist"]) { + $app->tform->errorMessage .= $app->tform->wordbook["limit_mail_wblist_txt"]."
"; + } + unset($tmp); + } } + if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); parent::onSubmit(); @@ -99,5 +129,4 @@ class page_action extends tform_actions { $app->tform_actions = new page_action; $app->tform_actions->onLoad(); - ?> diff --git a/remoting_client/API-docs/client_add.html b/remoting_client/API-docs/client_add.html index 0e9e9cd9c6..a9390900e6 100644 --- a/remoting_client/API-docs/client_add.html +++ b/remoting_client/API-docs/client_add.html @@ -43,6 +43,7 @@

limit_mailforward  (int(11))

limit_mailcatchall  (int(11))

limit_mailrouting  (int(11))

+

limit_mail_wblist  (int(11))

limit_mailfilter  (int(11))

limit_fetchmail  (int(11))

limit_mailquota  (int(11))

diff --git a/remoting_client/API-docs/client_update.html b/remoting_client/API-docs/client_update.html index 9cbdcd2f33..b38ecb8a67 100644 --- a/remoting_client/API-docs/client_update.html +++ b/remoting_client/API-docs/client_update.html @@ -43,6 +43,7 @@

limit_mailforward  (int(11))

limit_mailcatchall  (int(11))

limit_mailrouting  (int(11))

+

limit_mail_wblist  (int(11))

limit_mailfilter  (int(11))

limit_fetchmail  (int(11))

limit_mailquota  (int(11))

diff --git a/remoting_client/examples/client_add.php b/remoting_client/examples/client_add.php index 6d5b5934d7..7be7493e94 100644 --- a/remoting_client/examples/client_add.php +++ b/remoting_client/examples/client_add.php @@ -41,6 +41,7 @@ try { 'limit_mailforward' => -1, 'limit_mailcatchall' => -1, 'limit_mailrouting' => 0, + 'limit_mail_wblist' => 0, 'limit_mailfilter' => -1, 'limit_fetchmail' => -1, 'limit_mailquota' => -1, -- GitLab From fac5423a46f33bbcadf2c39650c58042ff1adf05 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 14 Jan 2021 14:21:28 -0700 Subject: [PATCH 139/403] reject_unlisted_senders in smtpd_sender_restrictions --- install/tpl/debian_postfix.conf.master | 4 ++-- install/tpl/fedora_postfix.conf.master | 4 ++-- install/tpl/gentoo_postfix.conf.master | 4 ++-- install/tpl/opensuse_postfix.conf.master | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 03077cbe7d..9db5317029 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -27,8 +27,8 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re -smtpd_reject_unlisted_sender = yes +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index fb284e4885..60450357cf 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -23,8 +23,8 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re -smtpd_reject_unlisted_sender = yes +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 8a50cce3cd..523b7604ec 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -22,8 +22,8 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re -smtpd_reject_unlisted_sender = yes +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 8186c2ad8a..4fb341fa08 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -25,8 +25,8 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re -smtpd_reject_unlisted_sender = yes +smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit -- GitLab From 8b853398d5b2e95a135a0a487b29739de9b45348 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 15 Jan 2021 16:22:43 -0700 Subject: [PATCH 140/403] fix Type column in whitelist/blacklist list --- interface/web/mail/list/mail_blacklist.list.php | 4 ++-- interface/web/mail/list/mail_whitelist.list.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/web/mail/list/mail_blacklist.list.php b/interface/web/mail/list/mail_blacklist.list.php index 6f92c0465f..d51f31a7d8 100644 --- a/interface/web/mail/list/mail_blacklist.list.php +++ b/interface/web/mail/list/mail_blacklist.list.php @@ -88,9 +88,9 @@ $liste["item"][] = array( 'field' => "source", if ($app->auth->is_admin()) { - $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); + $type_values = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); } else { - $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender'); + $type_values = array('recipient' => 'Recipient', 'sender' => 'Sender'); } $liste["item"][] = array( 'field' => "type", 'datatype' => "VARCHAR", diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php index e8a345c10e..b4c97f493f 100644 --- a/interface/web/mail/list/mail_whitelist.list.php +++ b/interface/web/mail/list/mail_whitelist.list.php @@ -88,9 +88,9 @@ $liste["item"][] = array( 'field' => "source", if ($app->auth->is_admin()) { - $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); + $type_values = array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client'); } else { - $type_values[] = array('recipient' => 'Recipient', 'sender' => 'Sender'); + $type_values = array('recipient' => 'Recipient', 'sender' => 'Sender'); } $liste["item"][] = array( 'field' => "type", 'datatype' => "VARCHAR", -- GitLab From 72fbddab131af72c2b2c4eec7beb548b777de879 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 15 Jan 2021 16:32:21 -0700 Subject: [PATCH 141/403] postfix server plugin: reject_unlisted_senders in smtpd_sender_restrictions --- server/plugins-available/postfix_server_plugin.inc.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php index b3e453be55..1818373637 100644 --- a/server/plugins-available/postfix_server_plugin.inc.php +++ b/server/plugins-available/postfix_server_plugin.inc.php @@ -161,9 +161,10 @@ class postfix_server_plugin { if ($mail_config['reject_sender_login_mismatch'] == 'y') { array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch')); + // insert before permit_sasl_authenticated for ($i = 0; isset($new_options[$i]); $i++) { - if ($new_options[$i] == 'permit_mynetworks') { - array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch')); + if ($new_options[$i] == 'permit_sasl_authenticated') { + array_splice($new_options, $i, 0, array('reject_sender_login_mismatch')); break; } } @@ -358,7 +359,8 @@ class postfix_server_plugin { exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'"); exec("postconf -e 'milter_default_action = accept'"); - exec("postconf -e 'smtpd_sender_restrictions = ${raslm} permit_mynetworks, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf'"); + exec("postconf -e 'smtpd_sender_restrictions = ${raslm} permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender'"); + $new_options = array(); $options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions")); @@ -397,7 +399,7 @@ class postfix_server_plugin { exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'"); // fixme: should read this from conf templates - exec("postconf -e 'smtpd_sender_restrictions = ${raslm} check_sender_access regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:/etc/postfix/tag_as_foreign.re, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf'"); + exec("postconf -e 'smtpd_sender_restrictions = ${raslm} check_sender_access regexp:/etc/postfix/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:/etc/postfix/mysql-virtual_sender.cf, ${rslm} permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:/etc/postfix/tag_as_foreign.re'"); } } -- GitLab From 0dfa506057a11bb6f773b8e8dae0bc31c99431c4 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 15 Jan 2021 16:45:41 -0700 Subject: [PATCH 142/403] installer: reject_unlisted_senders in smtpd_sender_restrictions --- install/lib/installer_base.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 50376e455e..357aa7abeb 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1798,9 +1798,10 @@ class installer_base { if ($mail_config['reject_sender_login_mismatch'] == 'y') { array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch')); + // insert before permit_sasl_authenticated for ($i = 0; isset($new_options[$i]); $i++) { - if ($new_options[$i] == 'permit_mynetworks') { - array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch')); + if ($new_options[$i] == 'permit_sasl_authenticated') { + array_splice($new_options, $i, 0, array('reject_sender_login_mismatch')); break; } } -- GitLab From 10e8ecc2bf807db371cbb743f817947afbd1f18c Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Mon, 18 Jan 2021 08:28:22 +0100 Subject: [PATCH 143/403] fix typo from last commit --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index d0e2363983..5a73582422 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -34,7 +34,7 @@ class installer_base { var $language = 'en'; var $db; public $install_ispconfig_interface = true; - public $is_update = false; // true if it is an update, falsi if it is a new install + public $is_update = false; // true if it is an update, false if it is a new install protected $mailman_group = 'list'; @@ -650,7 +650,7 @@ class installer_base { $query = "GRANT SELECT, INSERT ON ?? TO ?@?"; if ($verbose){ echo $query ."\n"; - + } if(!$this->dbmaster->query($query, $value['db'] . '.sys_log', $value['user'], $host)) { $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); } -- GitLab From 9503aeff4608570c6e4d7a7dd09d55de54a68ad9 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Mon, 18 Jan 2021 08:39:50 +0100 Subject: [PATCH 144/403] use idn_decode for mailuser and login fails for mail-users with IDN domains (Fixes #6021) --- interface/web/login/index.php | 4 ++-- interface/web/mailuser/index.php | 6 ++++-- interface/web/mailuser/mail_user_cc_edit.php | 2 +- interface/web/mailuser/mail_user_password_edit.php | 2 +- interface/web/mailuser/mail_user_spamfilter_edit.php | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/interface/web/login/index.php b/interface/web/login/index.php index d820e917c9..58456dea0e 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -58,7 +58,7 @@ if($app->is_under_maintenance()) { if(count($_POST) > 0) { //** Check variables - if(!preg_match("/^[\w\.\-\_\@]{1,128}$/", $_POST['username'])) $error = $app->lng('user_regex_error'); + if(!preg_match("/^[\w\.\-\_\@]{1,128}$/", $app->functions->idn_encode($_POST['username']))) $error = $app->lng('user_regex_error'); if(!preg_match("/^.{1,256}$/i", $_POST['password'])) $error = $app->lng('pw_error_length'); //** importing variables @@ -152,7 +152,7 @@ if(count($_POST) > 0) { if(stristr($username, '@')) { //* mailuser login $sql = "SELECT * FROM mail_user WHERE login = ? or email = ?"; - $mailuser = $app->db->queryOneRecord($sql, $username, $username); + $mailuser = $app->db->queryOneRecord($sql, $username, $app->functions->idn_encode($username)); $user = false; if($mailuser) { $saved_password = stripslashes($mailuser['password']); diff --git a/interface/web/mailuser/index.php b/interface/web/mailuser/index.php index c9541df2bd..77f5c207aa 100644 --- a/interface/web/mailuser/index.php +++ b/interface/web/mailuser/index.php @@ -5,7 +5,7 @@ require_once '../../lib/app.inc.php'; //* Check permissions for module $app->auth->check_module_permissions('mailuser'); -$app->uses('tpl'); +$app->uses('tpl, functions'); $app->tpl->newTemplate('form.tpl.htm'); $app->tpl->setInclude('content_tpl', 'templates/index.htm'); @@ -28,8 +28,10 @@ if($rec['quota'] == 0) { if($rec['cc'] == '') $rec['cc'] = $wb['none_txt']; -$app->tpl->setVar($rec); +$rec['email'] = $app->functions->idn_decode($rec['email']); +$rec['login'] = $app->functions->idn_decode($rec['login']); +$app->tpl->setVar($rec); $sql2 = "SELECT * FROM server WHERE server_id = ?"; $rec2 = $app->db->queryOneRecord($sql2, $rec['server_id']); diff --git a/interface/web/mailuser/mail_user_cc_edit.php b/interface/web/mailuser/mail_user_cc_edit.php index 778be781ec..9a63b2d953 100644 --- a/interface/web/mailuser/mail_user_cc_edit.php +++ b/interface/web/mailuser/mail_user_cc_edit.php @@ -75,7 +75,7 @@ class page_action extends tform_actions { global $app, $conf; $rec = $app->tform->getDataRecord($this->id); - $app->tpl->setVar("email", $rec['email'], true); + $app->tpl->setVar("email", $app->functions->idn_decode($rec['email']), true); parent::onShowEnd(); } diff --git a/interface/web/mailuser/mail_user_password_edit.php b/interface/web/mailuser/mail_user_password_edit.php index 5c5706177a..10a8e75e7e 100644 --- a/interface/web/mailuser/mail_user_password_edit.php +++ b/interface/web/mailuser/mail_user_password_edit.php @@ -63,7 +63,7 @@ class page_action extends tform_actions { global $app, $conf; $rec = $app->tform->getDataRecord($_SESSION['s']['user']['mailuser_id']); - $app->tpl->setVar("email", $rec['email'], true); + $app->tpl->setVar("email", $app->functions->idn_decode($rec['email']), true); parent::onShowEnd(); } diff --git a/interface/web/mailuser/mail_user_spamfilter_edit.php b/interface/web/mailuser/mail_user_spamfilter_edit.php index 75649b5a70..8d1e70ba20 100644 --- a/interface/web/mailuser/mail_user_spamfilter_edit.php +++ b/interface/web/mailuser/mail_user_spamfilter_edit.php @@ -112,7 +112,7 @@ class page_action extends tform_actions { global $app, $conf; $rec = $app->tform->getDataRecord($this->id); - $app->tpl->setVar("email", $rec['email'], true); + $app->tpl->setVar("email", $app->functions->idn_decode($rec['email']), true); // Get the spamfilter policys for the user $tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", $rec['email']); -- GitLab From 7a3d491c09d4e6a368a280d6b5f8e74b22cdb87d Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Tue, 19 Jan 2021 07:43:15 +0100 Subject: [PATCH 145/403] wrong server-id in admin/server_config_edit.php (Fixes #6022) --- interface/web/admin/server_config_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php index 9a54c9fb16..1fd1921b84 100644 --- a/interface/web/admin/server_config_edit.php +++ b/interface/web/admin/server_config_edit.php @@ -57,7 +57,7 @@ class page_action extends tform_actions { // get the config $app->uses('getconf'); - $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); + $web_config = $app->getconf->get_server_config($this->id, 'web'); if($web_config['server_type'] == 'nginx'){ unset($app->tform->formDef["tabs"]["fastcgi"]); -- GitLab From 27d07a12478bcfe5024434657e2e15df203d837d Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 20 Jan 2021 09:52:15 -0700 Subject: [PATCH 146/403] postfix: reject_invalid_helo_hostname after permit_sasl_authentication --- install/tpl/debian_postfix.conf.master | 2 +- install/tpl/fedora_postfix.conf.master | 2 +- install/tpl/gentoo_postfix.conf.master | 2 +- install/tpl/opensuse_postfix.conf.master | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 9db5317029..7a32434737 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -26,7 +26,7 @@ relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes -smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit +smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 60450357cf..017c2f2d69 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -22,7 +22,7 @@ relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes -smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit +smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 523b7604ec..8cb78eba49 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -21,7 +21,7 @@ relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes -smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit +smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 4fb341fa08..c469112403 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -24,7 +24,7 @@ relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes -smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit +smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit -- GitLab From 04b43daf05306ce480f4444741e5a860159b38e8 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 20 Jan 2021 15:14:26 -0700 Subject: [PATCH 147/403] postfix: sender whitelist as first option --- install/lib/installer_base.lib.php | 8 +++++++- install/sql/incremental/upd_dev_collection.sql | 5 +++++ install/sql/ispconfig3.sql | 2 +- install/tpl/debian_postfix.conf.master | 2 +- install/tpl/fedora_postfix.conf.master | 2 +- install/tpl/gentoo_postfix.conf.master | 2 +- install/tpl/opensuse_postfix.conf.master | 2 +- server/plugins-available/postfix_server_plugin.inc.php | 8 +++++++- 8 files changed, 24 insertions(+), 7 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 357aa7abeb..fa80911058 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1796,7 +1796,13 @@ class installer_base { $new_options[] = $value; } if ($mail_config['reject_sender_login_mismatch'] == 'y') { - array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch')); + // insert before permit_mynetworks + for ($i = 0; isset($new_options[$i]); $i++) { + if ($new_options[$i] == 'permit_mynetworks') { + array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch')); + break; + } + } // insert before permit_sasl_authenticated for ($i = 0; isset($new_options[$i]); $i++) { diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 13b1e1097e..90f8139c60 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -2,3 +2,8 @@ ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ALTER TABLE `client` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; ALTER TABLE `client_template` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; + +ALTER TABLE mail_access DROP CONSTRAINT `server_id`; +SET SESSION old_alter_table=1; +ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`); +SET SESSION old_alter_table=0; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 333a908a5a..baeb079219 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -822,7 +822,7 @@ CREATE TABLE `mail_access` ( `type` set('recipient','sender','client') NOT NULL DEFAULT 'recipient', `active` enum('n','y') NOT NULL default 'y', PRIMARY KEY (`access_id`), - KEY `server_id` (`server_id`,`source`) + UNIQUE KEY `unique_source` (`server_id`,`source`,`type`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 7a32434737..24b1e154cf 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -27,7 +27,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 017c2f2d69..04690bff70 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -23,7 +23,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 8cb78eba49..7ee0c83568 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -22,7 +22,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index c469112403..8ee01580be 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -25,7 +25,7 @@ smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_ma proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit -smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_reject_unlisted_sender = no smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks, permit_sasl_authenticated{rbl_list}, reject_unauth_pipelining {reject_unknown_client_hostname}, permit smtpd_etrn_restrictions = permit_mynetworks, reject diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php index 1818373637..8cdb95066b 100644 --- a/server/plugins-available/postfix_server_plugin.inc.php +++ b/server/plugins-available/postfix_server_plugin.inc.php @@ -159,7 +159,13 @@ class postfix_server_plugin { } if ($mail_config['reject_sender_login_mismatch'] == 'y') { - array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch')); + // insert before permit_mynetworks + for ($i = 0; isset($new_options[$i]); $i++) { + if ($new_options[$i] == 'permit_mynetworks') { + array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch')); + break; + } + } // insert before permit_sasl_authenticated for ($i = 0; isset($new_options[$i]); $i++) { -- GitLab From 731a9ecc30ff125f59d04e44be587dd837fe9bdf Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 25 Jan 2021 16:10:11 -0700 Subject: [PATCH 148/403] enforce unique mail_access source/type --- interface/web/mail/form/mail_blacklist.tform.php | 2 +- interface/web/mail/form/mail_whitelist.tform.php | 2 +- interface/web/mail/lib/lang/ar_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/ar_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/bg_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/bg_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/br_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/br_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/ca_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/ca_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/cz_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/cz_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/de_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/de_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/dk_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/dk_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/el_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/el_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/en_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/en_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/es_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/es_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/fi_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/fi_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/fr_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/fr_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/hr_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/hr_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/hu_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/hu_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/id_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/id_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/it_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/it_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/ja_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/ja_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/nl_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/nl_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/pl_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/pl_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/pt_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/pt_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/ro_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/ro_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/ru_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/ru_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/se_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/se_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/sk_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/sk_mail_whitelist.lng | 3 +++ interface/web/mail/lib/lang/tr_mail_blacklist.lng | 3 +++ interface/web/mail/lib/lang/tr_mail_whitelist.lng | 3 +++ interface/web/mail/mail_blacklist_edit.php | 10 ++++++++-- interface/web/mail/mail_whitelist_edit.php | 7 ++++++- 54 files changed, 166 insertions(+), 5 deletions(-) diff --git a/interface/web/mail/form/mail_blacklist.tform.php b/interface/web/mail/form/mail_blacklist.tform.php index df29fbd6d9..35272e4cd4 100644 --- a/interface/web/mail/form/mail_blacklist.tform.php +++ b/interface/web/mail/form/mail_blacklist.tform.php @@ -98,7 +98,7 @@ $form["tabs"]['blacklist'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => 'y', - 'value' => array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client') + 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt', 'client' => 'client_txt') ), 'active' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php index 8b570e449d..01f3d5dab7 100644 --- a/interface/web/mail/form/mail_whitelist.tform.php +++ b/interface/web/mail/form/mail_whitelist.tform.php @@ -104,7 +104,7 @@ $form["tabs"]['whitelist'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => 'y', - 'value' => array('recipient' => 'Recipient', 'sender' => 'Sender', 'client' => 'Client') + 'value' => array('recipient' => 'recipient_txt', 'sender' => 'sender_txt', 'client' => 'client_txt') ), 'active' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/mail/lib/lang/ar_mail_blacklist.lng b/interface/web/mail/lib/lang/ar_mail_blacklist.lng index 6173df6a07..81a1b6d279 100644 --- a/interface/web/mail/lib/lang/ar_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ar_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ar_mail_whitelist.lng b/interface/web/mail/lib/lang/ar_mail_whitelist.lng index 1cdc15564d..f6fda2d6d4 100644 --- a/interface/web/mail/lib/lang/ar_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ar_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/bg_mail_blacklist.lng b/interface/web/mail/lib/lang/bg_mail_blacklist.lng index 9b04dc85ba..7886cb6fa6 100644 --- a/interface/web/mail/lib/lang/bg_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/bg_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Полето с адреса е празно.'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максималният брой за емайл филтри в твоят профил е достигнат.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/bg_mail_whitelist.lng b/interface/web/mail/lib/lang/bg_mail_whitelist.lng index b17ee61002..deef7ae356 100644 --- a/interface/web/mail/lib/lang/bg_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/bg_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Полето с адреса е празно.'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максималният брой на емаил филтри за твоя акаунт е достигнат.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/br_mail_blacklist.lng b/interface/web/mail/lib/lang/br_mail_blacklist.lng index b72ea94ff3..d33aa6c138 100644 --- a/interface/web/mail/lib/lang/br_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/br_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Destinatário está vazio.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O limite de filtros de email para esta conta foi alcançado.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/br_mail_whitelist.lng b/interface/web/mail/lib/lang/br_mail_whitelist.lng index 4af2d198b0..f458dbbfb2 100644 --- a/interface/web/mail/lib/lang/br_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/br_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Endereço de email está vazio.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O limite de filtros de email para esta conta foi alcançado.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ca_mail_blacklist.lng b/interface/web/mail/lib/lang/ca_mail_blacklist.lng index 20d7f65ad2..b423203321 100644 --- a/interface/web/mail/lib/lang/ca_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ca_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'L\'adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres d\'email pour votre compte a été atteint.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ca_mail_whitelist.lng b/interface/web/mail/lib/lang/ca_mail_whitelist.lng index b78c665a10..a85c7939c3 100644 --- a/interface/web/mail/lib/lang/ca_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ca_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'L\'adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres à mails pour votre compte a été atteint.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/cz_mail_blacklist.lng b/interface/web/mail/lib/lang/cz_mail_blacklist.lng index 7348b738af..e95a23a3de 100644 --- a/interface/web/mail/lib/lang/cz_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/cz_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prázdná.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Byl dosažen maximální počet e-mail filtrů pro Váš účet.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/cz_mail_whitelist.lng b/interface/web/mail/lib/lang/cz_mail_whitelist.lng index 3db1076231..e775902fa8 100644 --- a/interface/web/mail/lib/lang/cz_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/cz_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prázdná.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Byl dosažen maximální počet e-mail filtrů pro Váš účet.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/de_mail_blacklist.lng b/interface/web/mail/lib/lang/de_mail_blacklist.lng index 42f1da41d7..7cb69f74bc 100644 --- a/interface/web/mail/lib/lang/de_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/de_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresse ist leer.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Die maximale Anzahl an E-Mail Filter für Ihr Konto wurde erreicht.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/de_mail_whitelist.lng b/interface/web/mail/lib/lang/de_mail_whitelist.lng index fac0efcb8e..04719f2479 100644 --- a/interface/web/mail/lib/lang/de_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/de_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'E-Mail Adresse ist leer.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Die maximale Anzahl an E-Mail Filtern für Ihr Konto wurde erreicht.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/dk_mail_blacklist.lng b/interface/web/mail/lib/lang/dk_mail_blacklist.lng index 79ff300aed..708b10fcb4 100644 --- a/interface/web/mail/lib/lang/dk_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/dk_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresse er tom.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Max. antal af e-mail filtere for din konto er nået.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/dk_mail_whitelist.lng b/interface/web/mail/lib/lang/dk_mail_whitelist.lng index bb671d84f0..2efac1cfa4 100644 --- a/interface/web/mail/lib/lang/dk_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/dk_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresse er tom.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Max. antal af email filtere for din konto er nået.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/el_mail_blacklist.lng b/interface/web/mail/lib/lang/el_mail_blacklist.lng index 003f7462c7..d7b27ff7d7 100644 --- a/interface/web/mail/lib/lang/el_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/el_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Η διεύθυνση είναι κενή.'; $wb['type_txt'] = 'Τύπος'; $wb['limit_mailfilter_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των φίλτρων email για τον λογαριασμό σας.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/el_mail_whitelist.lng b/interface/web/mail/lib/lang/el_mail_whitelist.lng index 5c3a095a24..601a53434f 100644 --- a/interface/web/mail/lib/lang/el_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/el_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Η διεύθυνση είναι κενή'; $wb['type_txt'] = 'Τύπος'; $wb['limit_mailfilter_txt'] = 'Έχετε φτάσει το μέγιστο πλήθος των φίλτρων email για τον λογαριασμό σας.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/en_mail_blacklist.lng b/interface/web/mail/lib/lang/en_mail_blacklist.lng index 6173df6a07..81a1b6d279 100644 --- a/interface/web/mail/lib/lang/en_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/en_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/en_mail_whitelist.lng b/interface/web/mail/lib/lang/en_mail_whitelist.lng index d765aad6a1..351a0574d3 100644 --- a/interface/web/mail/lib/lang/en_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/en_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address is empty.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/es_mail_blacklist.lng b/interface/web/mail/lib/lang/es_mail_blacklist.lng index 29353365d6..0956e6f5e4 100644 --- a/interface/web/mail/lib/lang/es_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/es_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'La dirección está vacía.'; $wb['source_txt'] = 'Dirección en la lista negra'; $wb['type_txt'] = 'Tipo'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/es_mail_whitelist.lng b/interface/web/mail/lib/lang/es_mail_whitelist.lng index 8cf5323098..af5362d2e0 100644 --- a/interface/web/mail/lib/lang/es_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/es_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'La dirección está vacía.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'Ha alcanzado en su cuenta el número máx. de filtros de correo.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/fi_mail_blacklist.lng b/interface/web/mail/lib/lang/fi_mail_blacklist.lng index 59aa88bb7e..f24d79d80f 100644 --- a/interface/web/mail/lib/lang/fi_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/fi_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Estetty osoite on tyhjä'; $wb['type_txt'] = 'Tyyppi'; $wb['limit_mailfilter_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä suodattimia.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/fi_mail_whitelist.lng b/interface/web/mail/lib/lang/fi_mail_whitelist.lng index b0d7cfe270..c5d317a42c 100644 --- a/interface/web/mail/lib/lang/fi_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/fi_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Osoite on tyhjä'; $wb['type_txt'] = 'Tyyppi'; $wb['limit_mailfilter_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä suodattimia.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/fr_mail_blacklist.lng b/interface/web/mail/lib/lang/fr_mail_blacklist.lng index 035c228bc6..649d94c1dc 100644 --- a/interface/web/mail/lib/lang/fr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/fr_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'L’adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres d’e-mail pour votre compte a été atteint.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/fr_mail_whitelist.lng b/interface/web/mail/lib/lang/fr_mail_whitelist.lng index ec11e6c674..bc768e77a1 100644 --- a/interface/web/mail/lib/lang/fr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/fr_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'L’adresse est vide.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Le nombre maximal de filtres à mails pour votre compte a été atteint.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/hr_mail_blacklist.lng b/interface/web/mail/lib/lang/hr_mail_blacklist.lng index 6842348ef7..3a542e2a82 100644 --- a/interface/web/mail/lib/lang/hr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/hr_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prazna'; $wb['type_txt'] = 'Vrsta'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/hr_mail_whitelist.lng b/interface/web/mail/lib/lang/hr_mail_whitelist.lng index 54879fc79c..4d4643e6da 100644 --- a/interface/web/mail/lib/lang/hr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/hr_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prazna'; $wb['type_txt'] = 'Vrsta'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters for your account is reached.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/hu_mail_blacklist.lng b/interface/web/mail/lib/lang/hu_mail_blacklist.lng index e183910f78..8b97aa868d 100644 --- a/interface/web/mail/lib/lang/hu_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/hu_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Cím üres.'; $wb['type_txt'] = 'Típus'; $wb['limit_mailfilter_txt'] = 'Nincs több szűrő lehetőség.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/hu_mail_whitelist.lng b/interface/web/mail/lib/lang/hu_mail_whitelist.lng index 7cda150e54..9db70ac0eb 100644 --- a/interface/web/mail/lib/lang/hu_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/hu_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Cím mező üres.'; $wb['type_txt'] = 'Típus'; $wb['limit_mailfilter_txt'] = 'Nincs több szűrő lehetőség.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/id_mail_blacklist.lng b/interface/web/mail/lib/lang/id_mail_blacklist.lng index 2271836a3f..4416ce17e4 100644 --- a/interface/web/mail/lib/lang/id_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/id_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Alamat kosong.'; $wb['type_txt'] = 'Tipe'; $wb['limit_mailfilter_txt'] = 'Jumlah maks penyaringan email untuk akun Anda telah tercapai.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/id_mail_whitelist.lng b/interface/web/mail/lib/lang/id_mail_whitelist.lng index d73c11c39c..7eff21f47c 100644 --- a/interface/web/mail/lib/lang/id_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/id_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Alamat kosong.'; $wb['type_txt'] = 'Tipe'; $wb['limit_mailfilter_txt'] = 'Jumlah maks filter email untuk akun Anda telah tercapai.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/it_mail_blacklist.lng b/interface/web/mail/lib/lang/it_mail_blacklist.lng index bb0c21459b..0b4f16a7c4 100644 --- a/interface/web/mail/lib/lang/it_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/it_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address vuoto.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/it_mail_whitelist.lng b/interface/web/mail/lib/lang/it_mail_whitelist.lng index e4b151310b..fbc9980fed 100644 --- a/interface/web/mail/lib/lang/it_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/it_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address vuoto.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'The max. number of email filters raggiunto per il tuo account.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ja_mail_blacklist.lng b/interface/web/mail/lib/lang/ja_mail_blacklist.lng index a012e29b16..f20f0377a7 100644 --- a/interface/web/mail/lib/lang/ja_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ja_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'アドレスを指定してください'; $wb['type_txt'] = '種別'; $wb['limit_mailfilter_txt'] = 'メールフィルターが最大数に達したため、これ以上追加できません。'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ja_mail_whitelist.lng b/interface/web/mail/lib/lang/ja_mail_whitelist.lng index 6e903201df..40d9ac32a3 100644 --- a/interface/web/mail/lib/lang/ja_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ja_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'アドレスを指定してください'; $wb['type_txt'] = '種別'; $wb['limit_mailfilter_txt'] = 'メールフィルターが最大数に達したため、これ以上追加できません。'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/nl_mail_blacklist.lng b/interface/web/mail/lib/lang/nl_mail_blacklist.lng index 1e4f986b60..e5a16aa6e0 100644 --- a/interface/web/mail/lib/lang/nl_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/nl_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres is niet ingvuld.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/nl_mail_whitelist.lng b/interface/web/mail/lib/lang/nl_mail_whitelist.lng index 25b594dba3..c91e095768 100644 --- a/interface/web/mail/lib/lang/nl_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/nl_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres is niet ingvuld.'; $wb['type_txt'] = 'Type'; $wb['limit_mailfilter_txt'] = 'Het max. aantal e-mail filters voor uw account is bereikt.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/pl_mail_blacklist.lng b/interface/web/mail/lib/lang/pl_mail_blacklist.lng index 5558e5f78f..28eba8e32a 100644 --- a/interface/web/mail/lib/lang/pl_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/pl_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres jest pusty.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów dla Twojego konta została przekroczona.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/pl_mail_whitelist.lng b/interface/web/mail/lib/lang/pl_mail_whitelist.lng index 9e4f6f686c..f18521fe7f 100644 --- a/interface/web/mail/lib/lang/pl_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/pl_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres jest pusty.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maksymalna ilość filtrów e-mail dla Twojego konta zosała przekroczona.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/pt_mail_blacklist.lng b/interface/web/mail/lib/lang/pt_mail_blacklist.lng index b51b784e0a..40fc089e0d 100644 --- a/interface/web/mail/lib/lang/pt_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/pt_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Endereço em branco.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O número máximo de filtros de correio para a conta foi atingido..'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/pt_mail_whitelist.lng b/interface/web/mail/lib/lang/pt_mail_whitelist.lng index f82845095f..678fb82570 100644 --- a/interface/web/mail/lib/lang/pt_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/pt_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Endereço em Branco.'; $wb['type_txt'] = 'Tipo'; $wb['limit_mailfilter_txt'] = 'O número máximo de filtros para a conta foi atingido.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ro_mail_blacklist.lng b/interface/web/mail/lib/lang/ro_mail_blacklist.lng index cd76a87313..6416e190fe 100644 --- a/interface/web/mail/lib/lang/ro_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ro_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Address este goala'; $wb['type_txt'] = 'Tip'; $wb['limit_mailfilter_txt'] = 'Numarul maxim de filtre pentru contul dumneavoastra'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ro_mail_whitelist.lng b/interface/web/mail/lib/lang/ro_mail_whitelist.lng index 8eab139b00..b5ec3d1e92 100644 --- a/interface/web/mail/lib/lang/ro_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ro_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Addresa e necompletata'; $wb['type_txt'] = 'Tip'; $wb['limit_mailfilter_txt'] = 'numarul maxim de filtre pe contul dumneavoastra a fost atins'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ru_mail_blacklist.lng b/interface/web/mail/lib/lang/ru_mail_blacklist.lng index 8c022b693e..33ef780ebd 100644 --- a/interface/web/mail/lib/lang/ru_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/ru_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Адрес пустой!'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/ru_mail_whitelist.lng b/interface/web/mail/lib/lang/ru_mail_whitelist.lng index 5a32140a83..0e7a8f95b3 100644 --- a/interface/web/mail/lib/lang/ru_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/ru_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Адрес пустой!'; $wb['type_txt'] = 'Тип'; $wb['limit_mailfilter_txt'] = 'Максимальное число почтовых фильтров достигнуто.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/se_mail_blacklist.lng b/interface/web/mail/lib/lang/se_mail_blacklist.lng index 08b62e1e7c..82dc7e3fdc 100644 --- a/interface/web/mail/lib/lang/se_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/se_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adressfältet är tomt.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/se_mail_whitelist.lng b/interface/web/mail/lib/lang/se_mail_whitelist.lng index 3f78c08817..d312ec9470 100644 --- a/interface/web/mail/lib/lang/se_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/se_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adressen är tom.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Maximala antalet epostfilter för ditt konto är uppnått.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/sk_mail_blacklist.lng b/interface/web/mail/lib/lang/sk_mail_blacklist.lng index d3b5c0cfe5..277a7bf1ec 100644 --- a/interface/web/mail/lib/lang/sk_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/sk_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prázdna.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov pre váš účet je dosiahnutý.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/sk_mail_whitelist.lng b/interface/web/mail/lib/lang/sk_mail_whitelist.lng index 43ce09e77e..77e44841fd 100644 --- a/interface/web/mail/lib/lang/sk_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/sk_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adresa je prázdna.'; $wb['type_txt'] = 'Typ'; $wb['limit_mailfilter_txt'] = 'Max. počet e-mailových filtrov pre váš účet je dosiahnutý.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/tr_mail_blacklist.lng b/interface/web/mail/lib/lang/tr_mail_blacklist.lng index b59a9b8b42..7712ca086d 100644 --- a/interface/web/mail/lib/lang/tr_mail_blacklist.lng +++ b/interface/web/mail/lib/lang/tr_mail_blacklist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres boş olamaz.'; $wb['type_txt'] = 'Tür'; $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Blacklist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/lib/lang/tr_mail_whitelist.lng b/interface/web/mail/lib/lang/tr_mail_whitelist.lng index 1667809c3e..8159b11edd 100644 --- a/interface/web/mail/lib/lang/tr_mail_whitelist.lng +++ b/interface/web/mail/lib/lang/tr_mail_whitelist.lng @@ -7,3 +7,6 @@ $wb['source_error_notempty'] = 'Adres boş olamaz.'; $wb['type_txt'] = 'Tür'; $wb['limit_mailfilter_txt'] = 'Hesabınıza ekleyebileceğiniz en fazla e-posta süzgeci sayısına ulaştınız.'; $wb['limit_mail_wblist_txt'] = 'The max. number of email white / blacklist for your account is reached.'; +$wb['mail_access_unique'] = 'Whitelist Address already in use.'; +$wb['client_txt'] = 'Client'; +$wb['sender_txt'] = 'Sender'; diff --git a/interface/web/mail/mail_blacklist_edit.php b/interface/web/mail/mail_blacklist_edit.php index 3c8acb505d..e1cb2de66b 100644 --- a/interface/web/mail/mail_blacklist_edit.php +++ b/interface/web/mail/mail_blacklist_edit.php @@ -117,9 +117,15 @@ class page_action extends tform_actions { unset($tmp); } } - + if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); - + + $rec = $app->db->queryOneRecord("SELECT access_id from mail_access WHERE server_id = ? AND source = ? and type = ?", $this->dataRecord["server_id"], $this->dataRecord["source"], $this->dataRecord["type"]); + if(is_array($rec) && isset($rec['access_id'])) { + $app->tform->errorMessage .= $app->tform->wordbook["mail_access_unique"]."
"; + } + unset($rec); + parent::onSubmit(); } diff --git a/interface/web/mail/mail_whitelist_edit.php b/interface/web/mail/mail_whitelist_edit.php index bfabbe64d2..81a5d15274 100644 --- a/interface/web/mail/mail_whitelist_edit.php +++ b/interface/web/mail/mail_whitelist_edit.php @@ -118,9 +118,14 @@ class page_action extends tform_actions { } } - if(substr($this->dataRecord['source'], 0, 1) === '@') $this->dataRecord['source'] = substr($this->dataRecord['source'], 1); + $rec = $app->db->queryOneRecord("SELECT access_id from mail_access WHERE server_id = ? AND source = ? and type = ?", $this->dataRecord["server_id"], $this->dataRecord["source"], $this->dataRecord["type"]); + if(is_array($rec) && isset($rec['access_id'])) { + $app->tform->errorMessage .= $app->tform->wordbook["mail_access_unique"]."
"; + } + unset($rec); + parent::onSubmit(); } -- GitLab From 37c37f749ff10e85b885cfdd90eb88f88f8e5ba5 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 26 Jan 2021 12:21:54 +0100 Subject: [PATCH 149/403] - added acme.sh installation to installer - fixed wrong certificate path on acme.sh in installer --- install/lib/installer_base.lib.php | 44 +++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 50376e455e..fc60889356 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -43,6 +43,15 @@ class installer_base { global $conf; //TODO: maybe $conf should be passed to constructor } + private function install_acme() { + $install_cmd = 'wget -O - https://get.acme.sh | sh'; + $ret = null; + $val = 0; + exec($install_cmd . ' 2>&1', $ret, $val); + + return ($val == 0 ? true : false); + } + //: TODO Implement the translation function and language files for the installer. public function lng($text) { return $text; @@ -2946,6 +2955,21 @@ class installer_base { $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); $acme = reset($acme); + if((!$acme || !is_executable($acme)) && (!$le_client || !is_executable($le_client))) { + $success = $this->install_acme(); + if(!$success) { + swriteln('Failed installing acme.sh. Will not be able to issue certificate during install.'); + } else { + $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); + $acme = reset($acme); + if($acme && is_executable($acme)) { + swriteln('Installed acme.sh and using it for certificate creation during install.'); + } else { + swriteln('Failed installing acme.sh. Will not be able to issue certificate during install.'); + } + } + } + $restore_conf_symlink = false; // we only need this for apache, so use fixed conf index @@ -2976,15 +3000,21 @@ class installer_base { $issued_successfully = false; // Backup existing ispserver ssl files - if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) - rename($ssl_crt_file, $ssl_crt_file.'-temporary.bak'); - if(file_exists($ssl_key_file) || is_link($ssl_key_file)) - rename($ssl_key_file, $ssl_key_file.'-temporary.bak'); - if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) - rename($ssl_pem_file, $ssl_pem_file.'-temporary.bak'); + if(file_exists($ssl_crt_file) || is_link($ssl_crt_file)) { + rename($ssl_crt_file, $ssl_crt_file . '-temporary.bak'); + } + if(file_exists($ssl_key_file) || is_link($ssl_key_file)) { + rename($ssl_key_file, $ssl_key_file . '-temporary.bak'); + } + if(file_exists($ssl_pem_file) || is_link($ssl_pem_file)) { + rename($ssl_pem_file, $ssl_pem_file . '-temporary.bak'); + } // Attempt to use Neilpang acme.sh first, as it is now the preferred LE client if (is_executable($acme)) { + $acme_cert_dir = dirname($acme) . '/' . $hostname; + + swriteln('acme.sh is installed, overriding certificate path to use ' . $acme_cert_dir); $out = null; $ret = null; @@ -3082,7 +3112,7 @@ class installer_base { rename($ssl_key_file.'-temporary.bak', $ssl_key_file); if(file_exists($ssl_pem_file.'-temporary.bak') || is_link($ssl_pem_file.'-temporary.bak')) rename($ssl_pem_file.'-temporary.bak', $ssl_pem_file); - + } } else { swriteln('Did not find any valid acme client (acme.sh or certbot)'); -- GitLab From 20a0c4409bda5b135a2532b57403c1cf94ab1668 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 26 Jan 2021 13:23:37 +0100 Subject: [PATCH 150/403] - add default setting for unused spam tag method --- server/conf/rspamd_users.inc.conf.master | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master index 96ba9f0838..85cb19a944 100644 --- a/server/conf/rspamd_users.inc.conf.master +++ b/server/conf/rspamd_users.inc.conf.master @@ -38,9 +38,11 @@ actions { "rewrite subject" = ; + "add header" = null "add header" = ; + "rewrite subject" = null reject = ; -- GitLab From 733b16868d68c634241f84deccce5b33bc387b2a Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Tue, 26 Jan 2021 13:24:44 +0100 Subject: [PATCH 151/403] - missing semicolon --- server/conf/rspamd_users.inc.conf.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master index 85cb19a944..83dd5b2764 100644 --- a/server/conf/rspamd_users.inc.conf.master +++ b/server/conf/rspamd_users.inc.conf.master @@ -38,11 +38,11 @@ actions { "rewrite subject" = ; - "add header" = null + "add header" = null; "add header" = ; - "rewrite subject" = null + "rewrite subject" = null; reject = ; -- GitLab From 023477271e06b4a3b7769adc442878cdc4aa7154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LEVEILLE=20C=C3=A9dric?= Date: Thu, 28 Jan 2021 12:15:35 -0500 Subject: [PATCH 152/403] Add API event support to mail_domain_*, mail_user_*, mail_alias_*, mail_forward_* --- interface/lib/classes/remote.d/mail.inc.php | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php index c4582c634e..04a022c06e 100644 --- a/interface/lib/classes/remote.d/mail.inc.php +++ b/interface/lib/classes/remote.d/mail.inc.php @@ -60,7 +60,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php', $client_id, $params); + $primary_id = $this->insertQuery('../mail/form/mail_domain.tform.php', $client_id, $params, 'mail:mail_domain:on_after_insert'); return $primary_id; } @@ -71,7 +71,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params); + $affected_rows = $this->updateQuery('../mail/form/mail_domain.tform.php', $client_id, $primary_id, $params, 'mail:mail_domain:on_after_update'); return $affected_rows; } @@ -82,7 +82,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id); + $affected_rows = $this->deleteQuery('../mail/form/mail_domain.tform.php', $primary_id, 'mail:mail_domain:on_after_delete'); return $affected_rows; } @@ -222,7 +222,7 @@ class remoting_mail extends remoting { if (!isset($params['gid'])) $params['gid'] = -1; if (!isset($params['maildir_format'])) $params['maildir_format'] = 'maildir'; - $mailuser_id = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params); + $mailuser_id = $this->insertQuery('../mail/form/mail_user.tform.php', $client_id, $params, 'mail:mail_user:on_after_insert'); return $mailuser_id; } @@ -245,7 +245,7 @@ class remoting_mail extends remoting { return false; } - $affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params); + $affected_rows = $this->updateQuery('../mail/form/mail_user.tform.php', $client_id, $primary_id, $params, 'mail:mail_user:on_after_update'); return $affected_rows; } @@ -258,7 +258,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id); + $affected_rows = $this->deleteQuery('../mail/form/mail_user.tform.php', $primary_id, 'mail:mail_user:on_after_delete'); return $affected_rows; } @@ -413,7 +413,7 @@ class remoting_mail extends remoting { } unset($tmp); - $affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params); + $affected_rows = $this->insertQuery('../mail/form/mail_alias.tform.php', $client_id, $params, 'mail:mail_alias:on_after_insert'); return $affected_rows; } @@ -435,7 +435,7 @@ class remoting_mail extends remoting { } unset($tmp); - $affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params); + $affected_rows = $this->updateQuery('../mail/form/mail_alias.tform.php', $client_id, $primary_id, $params, 'mail:mail_alias:on_after_update'); return $affected_rows; } @@ -446,7 +446,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id); + $affected_rows = $this->deleteQuery('../mail/form/mail_alias.tform.php', $primary_id, 'mail:mail_alias:on_after_delete'); return $affected_rows; } @@ -472,7 +472,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params); + $affected_rows = $this->insertQuery('../mail/form/mail_forward.tform.php', $client_id, $params, 'mail:mail_forward:on_after_insert'); return $affected_rows; } @@ -484,7 +484,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params); + $affected_rows = $this->updateQuery('../mail/form/mail_forward.tform.php', $client_id, $primary_id, $params, 'mail:mail_forward:on_after_update'); return $affected_rows; } @@ -496,7 +496,7 @@ class remoting_mail extends remoting { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id); + $affected_rows = $this->deleteQuery('../mail/form/mail_forward.tform.php', $primary_id, 'mail:mail_forward:on_after_delete'); return $affected_rows; } -- GitLab From 99c8771891811dc35ac915866271d4422c94177f Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Thu, 28 Jan 2021 20:16:46 +0100 Subject: [PATCH 153/403] Use password form after resetting password --- interface/web/login/password_reset.php | 1 + interface/web/login/templates/index.htm | 3 +++ 2 files changed, 4 insertions(+) diff --git a/interface/web/login/password_reset.php b/interface/web/login/password_reset.php index 2e1d5e6aad..db4ad71c22 100644 --- a/interface/web/login/password_reset.php +++ b/interface/web/login/password_reset.php @@ -153,6 +153,7 @@ if(isset($_POST['username']) && is_string($_POST['username']) && $_POST['usernam if($send_result !== false) { $app->tpl->setVar("msg", $wb['pw_reset']); + $app->tpl->setInclude('content_tpl', 'templates/index.htm'); } else { $app->tpl->setVar("error", $wb['pw_reset_error_smtp_connection']); } diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm index e03e58f1f1..64b1825073 100644 --- a/interface/web/login/templates/index.htm +++ b/interface/web/login/templates/index.htm @@ -1,3 +1,6 @@ + + + -- GitLab From 31199e18782daf4083bb6877cb7c1dd39f085bcd Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 12 Jan 2021 16:41:09 -0700 Subject: [PATCH 154/403] implement per-domain mail relaying --- install/dist/lib/fedora.lib.php | 56 ++----------------- install/dist/lib/gentoo.lib.php | 3 + install/dist/lib/opensuse.lib.php | 53 ++---------------- install/lib/installer_base.lib.php | 56 ++----------------- .../sql/incremental/upd_dev_collection.sql | 4 ++ install/sql/ispconfig3.sql | 3 + install/tpl/debian_postfix.conf.master | 8 ++- install/tpl/fedora_postfix.conf.master | 8 ++- install/tpl/gentoo_postfix.conf.master | 8 ++- .../mysql-virtual_sender-relayauth.cf.master | 10 ++++ .../mysql-virtual_sender-relayhost.cf.master | 10 ++++ install/tpl/opensuse_postfix.conf.master | 8 ++- interface/web/mail/form/mail_domain.tform.php | 24 ++++++++ .../web/mail/lib/lang/ar_mail_domain.lng | 6 +- .../web/mail/lib/lang/bg_mail_domain.lng | 4 +- .../web/mail/lib/lang/br_mail_domain.lng | 3 + .../web/mail/lib/lang/ca_mail_domain.lng | 4 +- .../web/mail/lib/lang/cz_mail_domain.lng | 3 + .../web/mail/lib/lang/de_mail_domain.lng | 4 +- .../web/mail/lib/lang/dk_mail_domain.lng | 4 +- .../web/mail/lib/lang/el_mail_domain.lng | 4 +- .../web/mail/lib/lang/en_mail_domain.lng | 4 +- .../web/mail/lib/lang/es_mail_domain.lng | 4 +- .../web/mail/lib/lang/fi_mail_domain.lng | 4 +- .../web/mail/lib/lang/fr_mail_domain.lng | 4 +- .../web/mail/lib/lang/hr_mail_domain.lng | 4 +- .../web/mail/lib/lang/hu_mail_domain.lng | 4 +- .../web/mail/lib/lang/id_mail_domain.lng | 4 +- .../web/mail/lib/lang/it_mail_domain.lng | 4 +- .../web/mail/lib/lang/ja_mail_domain.lng | 4 +- .../web/mail/lib/lang/nl_mail_domain.lng | 4 +- .../web/mail/lib/lang/pl_mail_domain.lng | 4 +- .../web/mail/lib/lang/pt_mail_domain.lng | 4 +- .../web/mail/lib/lang/ro_mail_domain.lng | 4 +- .../web/mail/lib/lang/ru_mail_domain.lng | 4 +- .../web/mail/lib/lang/se_mail_domain.lng | 4 +- .../web/mail/lib/lang/sk_mail_domain.lng | 4 +- .../web/mail/lib/lang/tr_mail_domain.lng | 4 +- interface/web/mail/mail_domain_edit.php | 7 +++ .../web/mail/templates/mail_domain_edit.htm | 18 ++++++ 40 files changed, 198 insertions(+), 178 deletions(-) create mode 100644 install/tpl/mysql-virtual_sender-relayauth.cf.master create mode 100644 install/tpl/mysql-virtual_sender-relayhost.cf.master diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 9620bf3561..fdb6c2e717 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -57,58 +57,12 @@ class installer_dist extends installer_base { $this->error("The postfix configuration directory '$config_dir' does not exist."); } - //* mysql-virtual_domains.cf - $this->process_postfix_config('mysql-virtual_domains.cf'); - - //* mysql-virtual_forwardings.cf - $this->process_postfix_config('mysql-virtual_forwardings.cf'); - - //* mysql-virtual_alias_domains.cf - $this->process_postfix_config('mysql-virtual_alias_domains.cf'); - - //* mysql-virtual_alias_maps.cf - $this->process_postfix_config('mysql-virtual_alias_maps.cf'); - - //* mysql-virtual_mailboxes.cf - $this->process_postfix_config('mysql-virtual_mailboxes.cf'); - - //* mysql-virtual_email2email.cf - $this->process_postfix_config('mysql-virtual_email2email.cf'); - - //* mysql-virtual_transports.cf - $this->process_postfix_config('mysql-virtual_transports.cf'); - - //* mysql-virtual_recipient.cf - $this->process_postfix_config('mysql-virtual_recipient.cf'); - - //* mysql-virtual_sender.cf - $this->process_postfix_config('mysql-virtual_sender.cf'); - - //* mysql-virtual_sender_login_maps.cf - $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); - - //* mysql-virtual_client.cf - $this->process_postfix_config('mysql-virtual_client.cf'); - - //* mysql-virtual_relaydomains.cf - $this->process_postfix_config('mysql-virtual_relaydomains.cf'); - - //* 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'); - - //* mysql-virtual_gids.cf.master - $this->process_postfix_config('mysql-virtual_gids.cf'); - - //* mysql-virtual_uids.cf - $this->process_postfix_config('mysql-virtual_uids.cf'); + //* Install virtual mappings + foreach (glob('tpl/mysql-virtual_*.master') as $filename) { + $this->process_postfix_config( basename($filename, '.master') ); + } - //* mysql-virtual_alias_domains.cf + //* mysql-verify_recipients.cf $this->process_postfix_config('mysql-verify_recipients.cf'); //* postfix-dkim diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index f719fbee38..1bd58e0c38 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -63,6 +63,9 @@ class installer extends installer_base $this->process_postfix_config( basename($filename, '.master') ); } + //* mysql-verify_recipients.cf + $this->process_postfix_config('mysql-verify_recipients.cf'); + //* Changing mode and group of the new created config files. caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null', __FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed'); diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index b9e3a1c575..7332db1699 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -57,55 +57,12 @@ class installer_dist extends installer_base { $this->error("The postfix configuration directory '$config_dir' does not exist."); } - //* mysql-virtual_domains.cf - $this->process_postfix_config('mysql-virtual_domains.cf'); - - //* mysql-virtual_forwardings.cf - $this->process_postfix_config('mysql-virtual_forwardings.cf'); - - //* mysql-virtual_alias_domains.cf - $this->process_postfix_config('mysql-virtual_alias_domains.cf'); - - //* mysql-virtual_alias_maps.cf - $this->process_postfix_config('mysql-virtual_alias_maps.cf'); - - //* mysql-virtual_mailboxes.cf - $this->process_postfix_config('mysql-virtual_mailboxes.cf'); - - //* mysql-virtual_email2email.cf - $this->process_postfix_config('mysql-virtual_email2email.cf'); - - //* mysql-virtual_transports.cf - $this->process_postfix_config('mysql-virtual_transports.cf'); - - //* mysql-virtual_recipient.cf - $this->process_postfix_config('mysql-virtual_recipient.cf'); - - //* mysql-virtual_sender.cf - $this->process_postfix_config('mysql-virtual_sender.cf'); - - //* mysql-virtual_sender_login_maps.cf - $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); - - //* mysql-virtual_client.cf - $this->process_postfix_config('mysql-virtual_client.cf'); - - //* mysql-virtual_relaydomains.cf - $this->process_postfix_config('mysql-virtual_relaydomains.cf'); - - //* mysql-virtual_relayrecipientmaps.cf - $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf'); - - //* mysql-virtual_policy_greylist.cf - $this->process_postfix_config('mysql-virtual_policy_greylist.cf'); - - //* mysql-virtual_gids.cf.master - $this->process_postfix_config('mysql-virtual_gids.cf'); - - //* mysql-virtual_uids.cf - $this->process_postfix_config('mysql-virtual_uids.cf'); + //* Install virtual mappings + foreach (glob('tpl/mysql-virtual_*.master') as $filename) { + $this->process_postfix_config( basename($filename, '.master') ); + } - //* mysql-virtual_alias_domains.cf + //* mysql-verify_recipients.cf $this->process_postfix_config('mysql-verify_recipients.cf'); //* postfix-dkim diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 688fd32a83..16fe665fca 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1060,58 +1060,12 @@ class installer_base { $postfix_version = preg_replace('/.*=\s*/', '', $out[0]); unset($out); - //* mysql-virtual_domains.cf - $this->process_postfix_config('mysql-virtual_domains.cf'); - - //* mysql-virtual_forwardings.cf - $this->process_postfix_config('mysql-virtual_forwardings.cf'); - - //* mysql-virtual_alias_domains.cf - $this->process_postfix_config('mysql-virtual_alias_domains.cf'); - - //* mysql-virtual_alias_maps.cf - $this->process_postfix_config('mysql-virtual_alias_maps.cf'); - - //* mysql-virtual_mailboxes.cf - $this->process_postfix_config('mysql-virtual_mailboxes.cf'); - - //* mysql-virtual_email2email.cf - $this->process_postfix_config('mysql-virtual_email2email.cf'); - - //* mysql-virtual_transports.cf - $this->process_postfix_config('mysql-virtual_transports.cf'); - - //* mysql-virtual_recipient.cf - $this->process_postfix_config('mysql-virtual_recipient.cf'); - - //* mysql-virtual_sender.cf - $this->process_postfix_config('mysql-virtual_sender.cf'); - - //* mysql-virtual_sender_login_maps.cf - $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); - - //* mysql-virtual_client.cf - $this->process_postfix_config('mysql-virtual_client.cf'); - - //* mysql-virtual_relaydomains.cf - $this->process_postfix_config('mysql-virtual_relaydomains.cf'); - - //* 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'); - - //* mysql-virtual_gids.cf.master - $this->process_postfix_config('mysql-virtual_gids.cf'); - - //* mysql-virtual_uids.cf - $this->process_postfix_config('mysql-virtual_uids.cf'); + //* Install virtual mappings + foreach (glob('tpl/mysql-virtual_*.master') as $filename) { + $this->process_postfix_config( basename($filename, '.master') ); + } - //* mysql-virtual_alias_domains.cf + //* mysql-verify_recipients.cf $this->process_postfix_config('mysql-verify_recipients.cf'); // test if lmtp if available diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 90f8139c60..02a588cc88 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -7,3 +7,7 @@ ALTER TABLE mail_access DROP CONSTRAINT `server_id`; SET SESSION old_alter_table=1; ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`); SET SESSION old_alter_table=0; + +ALTER TABLE mail_domain ADD COLUMN `relay_host` varchar(255) NOT NULL default '' AFTER `dkim_public`, + ADD COLUMN `relay_user` varchar(255) NOT NULL default '' AFTER `relay_host`, + ADD COLUMN `relay_pass` varchar(255) NOT NULL default '' AFTER `relay_user`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index baeb079219..587df55382 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -884,6 +884,9 @@ CREATE TABLE `mail_domain` ( `dkim_selector` varchar(63) NOT NULL DEFAULT 'default', `dkim_private` mediumtext NULL, `dkim_public` mediumtext NULL, + `relay_host` varchar(255) NOT NULL DEFAULT '', + `relay_user` varchar(255) NOT NULL DEFAULT '', + `relay_pass` varchar(255) NOT NULL DEFAULT '', `active` enum('n','y') NOT NULL DEFAULT 'n', PRIMARY KEY (`domain_id`), KEY `server_id` (`server_id`,`domain`), diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 24b1e154cf..42bb3f1510 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -24,7 +24,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re @@ -53,3 +53,9 @@ tls_preempt_cipherlist = yes address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes +sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sender_dependent_authentication = yes +smtp_sasl_auth_enable = yes +smtp_sasl_security_options = noanonymous, noplaintext +smtp_sasl_tls_security_options = noanonymous diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 04690bff70..dd232b6d6d 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -20,7 +20,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re @@ -49,3 +49,9 @@ tls_preempt_cipherlist = yes address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes +sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sender_dependent_authentication = yes +smtp_sasl_auth_enable = yes +smtp_sasl_security_options = noanonymous, noplaintext +smtp_sasl_tls_security_options = noanonymous diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 7ee0c83568..7c337bbb5d 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -19,7 +19,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re @@ -48,3 +48,9 @@ tls_preempt_cipherlist = yes address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes +sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sender_dependent_authentication = yes +smtp_sasl_auth_enable = yes +smtp_sasl_security_options = noanonymous, noplaintext +smtp_sasl_tls_security_options = noanonymous diff --git a/install/tpl/mysql-virtual_sender-relayauth.cf.master b/install/tpl/mysql-virtual_sender-relayauth.cf.master new file mode 100644 index 0000000000..413607c763 --- /dev/null +++ b/install/tpl/mysql-virtual_sender-relayauth.cf.master @@ -0,0 +1,10 @@ +user = {mysql_server_ispconfig_user} +password = {mysql_server_ispconfig_password} +dbname = {mysql_server_database} +hosts = {mysql_server_ip} +query = SELECT CONCAT(relay_user,':',relay_pass) as credential + FROM mail_domain + WHERE domain = '%d' + AND active = 'y' + AND concat(relay_host,relay_user,relay_pass) != '' + AND server_id = {server_id} diff --git a/install/tpl/mysql-virtual_sender-relayhost.cf.master b/install/tpl/mysql-virtual_sender-relayhost.cf.master new file mode 100644 index 0000000000..3bb4c81330 --- /dev/null +++ b/install/tpl/mysql-virtual_sender-relayhost.cf.master @@ -0,0 +1,10 @@ +user = {mysql_server_ispconfig_user} +password = {mysql_server_ispconfig_password} +dbname = {mysql_server_database} +hosts = {mysql_server_ip} +query = SELECT relay_host as relayhost + FROM mail_domain + WHERE domain = '%d' + AND active = 'y' + AND concat(relay_host,relay_user,relay_pass) != '' + AND server_id = {server_id} diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 8ee01580be..c7c282ca14 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -22,7 +22,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re @@ -51,3 +51,9 @@ tls_preempt_cipherlist = yes address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes +sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sender_dependent_authentication = yes +smtp_sasl_auth_enable = yes +smtp_sasl_security_options = noanonymous, noplaintext +smtp_sasl_tls_security_options = noanonymous diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php index 5c8fa0185a..6e768193e0 100644 --- a/interface/web/mail/form/mail_domain.tform.php +++ b/interface/web/mail/form/mail_domain.tform.php @@ -136,6 +136,30 @@ $form["tabs"]['domain'] = array ( 'errmsg'=> 'dkim_selector_error'), ), ), + 'relay_host' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'relay_user' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'relay_pass' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), 'active' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/mail/lib/lang/ar_mail_domain.lng b/interface/web/mail/lib/lang/ar_mail_domain.lng index 4d99d0fb5e..e53c5d9ec2 100644 --- a/interface/web/mail/lib/lang/ar_mail_domain.lng +++ b/interface/web/mail/lib/lang/ar_mail_domain.lng @@ -19,5 +19,7 @@ $wb['dkim_private_key_error'] = 'Invalid DKIM-Private key'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; -$wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this accounte'; +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/bg_mail_domain.lng b/interface/web/mail/lib/lang/bg_mail_domain.lng index 6e30a26494..f2d329a62e 100644 --- a/interface/web/mail/lib/lang/bg_mail_domain.lng +++ b/interface/web/mail/lib/lang/bg_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['policy_txt'] = 'Спамфилтър'; $wb['no_policy'] = '- не е разрешен -'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/br_mail_domain.lng b/interface/web/mail/lib/lang/br_mail_domain.lng index 8cf2cdce65..7371f51894 100644 --- a/interface/web/mail/lib/lang/br_mail_domain.lng +++ b/interface/web/mail/lib/lang/br_mail_domain.lng @@ -20,3 +20,6 @@ $wb['no_policy'] = '-desabilitado-'; $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido para esta conta.'; $wb['dkim_selector_txt'] = 'Seletor DKIM'; $wb['dkim_selector_error'] = 'Seletor DKIM é inválido. Utilize apenas caracteres alfanuméricos em minúsculas (a-z ou 0-9) e no máximo 63 caracteres.'; +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/ca_mail_domain.lng b/interface/web/mail/lib/lang/ca_mail_domain.lng index 65d664cf3a..0b701a16c3 100644 --- a/interface/web/mail/lib/lang/ca_mail_domain.lng +++ b/interface/web/mail/lib/lang/ca_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/cz_mail_domain.lng b/interface/web/mail/lib/lang/cz_mail_domain.lng index 2d1adc0343..0c648a68f3 100644 --- a/interface/web/mail/lib/lang/cz_mail_domain.lng +++ b/interface/web/mail/lib/lang/cz_mail_domain.lng @@ -20,3 +20,6 @@ $wb['dkim_selector_error'] = 'Neplatný DKIM selektor. Používejte pouze malá $wb['policy_txt'] = 'Spamový filtr'; $wb['no_policy'] = '- nepovoleno -'; $wb['error_not_allowed_server_id'] = 'Zvolený server není povolen pro tento účet.'; +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/de_mail_domain.lng b/interface/web/mail/lib/lang/de_mail_domain.lng index 13aac42c79..1a64a44231 100644 --- a/interface/web/mail/lib/lang/de_mail_domain.lng +++ b/interface/web/mail/lib/lang/de_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Ungültiger DKIM-Selector. Verwenden Sie nur max. 63 alphanumerische Zeichen (a-z oder 0-9)'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/dk_mail_domain.lng b/interface/web/mail/lib/lang/dk_mail_domain.lng index f37b81d65e..fcced58e1a 100644 --- a/interface/web/mail/lib/lang/dk_mail_domain.lng +++ b/interface/web/mail/lib/lang/dk_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/el_mail_domain.lng b/interface/web/mail/lib/lang/el_mail_domain.lng index 3973746dfd..3909576a3c 100644 --- a/interface/web/mail/lib/lang/el_mail_domain.lng +++ b/interface/web/mail/lib/lang/el_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/en_mail_domain.lng b/interface/web/mail/lib/lang/en_mail_domain.lng index 0190c0ab06..39e22f75b6 100644 --- a/interface/web/mail/lib/lang/en_mail_domain.lng +++ b/interface/web/mail/lib/lang/en_mail_domain.lng @@ -20,4 +20,6 @@ $wb['no_policy'] = '- not enabled -'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/es_mail_domain.lng b/interface/web/mail/lib/lang/es_mail_domain.lng index 36c5ae5763..bd23b94191 100644 --- a/interface/web/mail/lib/lang/es_mail_domain.lng +++ b/interface/web/mail/lib/lang/es_mail_domain.lng @@ -20,4 +20,6 @@ $wb['no_policy'] = '- no habilitado -'; $wb['policy_txt'] = 'Filtro de spam'; $wb['server_id_txt'] = 'Servidor'; $wb['type_txt'] = 'Tipo'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/fi_mail_domain.lng b/interface/web/mail/lib/lang/fi_mail_domain.lng index 088c768091..d77fe32500 100644 --- a/interface/web/mail/lib/lang/fi_mail_domain.lng +++ b/interface/web/mail/lib/lang/fi_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/fr_mail_domain.lng b/interface/web/mail/lib/lang/fr_mail_domain.lng index eebbdc02b1..56efb88aae 100644 --- a/interface/web/mail/lib/lang/fr_mail_domain.lng +++ b/interface/web/mail/lib/lang/fr_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/hr_mail_domain.lng b/interface/web/mail/lib/lang/hr_mail_domain.lng index eb91862b31..2f53c694c8 100644 --- a/interface/web/mail/lib/lang/hr_mail_domain.lng +++ b/interface/web/mail/lib/lang/hr_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/hu_mail_domain.lng b/interface/web/mail/lib/lang/hu_mail_domain.lng index 431beb8a01..96a5dc03a5 100644 --- a/interface/web/mail/lib/lang/hu_mail_domain.lng +++ b/interface/web/mail/lib/lang/hu_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/id_mail_domain.lng b/interface/web/mail/lib/lang/id_mail_domain.lng index c13968dde8..2979773e8c 100644 --- a/interface/web/mail/lib/lang/id_mail_domain.lng +++ b/interface/web/mail/lib/lang/id_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/it_mail_domain.lng b/interface/web/mail/lib/lang/it_mail_domain.lng index 46089adb90..88e2c146df 100644 --- a/interface/web/mail/lib/lang/it_mail_domain.lng +++ b/interface/web/mail/lib/lang/it_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/ja_mail_domain.lng b/interface/web/mail/lib/lang/ja_mail_domain.lng index 787937668c..a96faaa367 100644 --- a/interface/web/mail/lib/lang/ja_mail_domain.lng +++ b/interface/web/mail/lib/lang/ja_mail_domain.lng @@ -20,4 +20,6 @@ $wb['no_policy'] = '使わない'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/nl_mail_domain.lng b/interface/web/mail/lib/lang/nl_mail_domain.lng index c4fe53c718..0e8a912a71 100644 --- a/interface/web/mail/lib/lang/nl_mail_domain.lng +++ b/interface/web/mail/lib/lang/nl_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/pl_mail_domain.lng b/interface/web/mail/lib/lang/pl_mail_domain.lng index e4483a0d64..7ff3c297ff 100644 --- a/interface/web/mail/lib/lang/pl_mail_domain.lng +++ b/interface/web/mail/lib/lang/pl_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/pt_mail_domain.lng b/interface/web/mail/lib/lang/pt_mail_domain.lng index 224a38a2e1..092f83f1ca 100644 --- a/interface/web/mail/lib/lang/pt_mail_domain.lng +++ b/interface/web/mail/lib/lang/pt_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/ro_mail_domain.lng b/interface/web/mail/lib/lang/ro_mail_domain.lng index ede56e351e..e0543f36ec 100644 --- a/interface/web/mail/lib/lang/ro_mail_domain.lng +++ b/interface/web/mail/lib/lang/ro_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_txt'] = 'DKIM-Selector'; $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanumeric characters (a-z or 0-9) up to 63 chars'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/ru_mail_domain.lng b/interface/web/mail/lib/lang/ru_mail_domain.lng index adc1ac74cb..7567e3c670 100644 --- a/interface/web/mail/lib/lang/ru_mail_domain.lng +++ b/interface/web/mail/lib/lang/ru_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['dkim_selector_txt'] = 'DKIM-селектор'; $wb['dkim_selector_error'] = 'Некорректный DKIM-селектор. Используйте только строчные буквенно-цифровые символы (a-z или 0-9) до 63 символов'; $wb['error_not_allowed_server_id'] = 'Выбранный сервер не доступен для этой учетной записи.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/se_mail_domain.lng b/interface/web/mail/lib/lang/se_mail_domain.lng index fcd87813ba..7f192224e6 100644 --- a/interface/web/mail/lib/lang/se_mail_domain.lng +++ b/interface/web/mail/lib/lang/se_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_selector_error'] = 'Invalid DKIM-Selector. Use only lower-case alphanu $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['no_policy'] = '- ej aktiverat -'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/sk_mail_domain.lng b/interface/web/mail/lib/lang/sk_mail_domain.lng index dfe8ce8899..ed67d20044 100644 --- a/interface/web/mail/lib/lang/sk_mail_domain.lng +++ b/interface/web/mail/lib/lang/sk_mail_domain.lng @@ -20,4 +20,6 @@ $wb['no_policy'] = '- Nie je aktivovaný -'; $wb['dkim_settings_txt'] = 'DomainKeys Identified Mail (DKIM)'; $wb['error_not_allowed_server_id'] = 'Chosen server is not allowed for this account.'; $wb['dkim_selector_txt'] = 'DKIM-Selector'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/lib/lang/tr_mail_domain.lng b/interface/web/mail/lib/lang/tr_mail_domain.lng index 3e7d9cc412..802fdcf94b 100644 --- a/interface/web/mail/lib/lang/tr_mail_domain.lng +++ b/interface/web/mail/lib/lang/tr_mail_domain.lng @@ -20,4 +20,6 @@ $wb['dkim_settings_txt'] = 'DomainKeys Tanımlı E-posta (DKIM)'; $wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz.'; $wb['dkim_selector_txt'] = 'DKIM Seçici'; $wb['dkim_selector_error'] = 'DKIM seçici geçersiz. En fazla 63 karakter uzunluğunda, yalnız küçük İngilizce harf ve rakamları kullanın (a-z ya da 0-9)'; -?> +$wb['relayhost_txt'] = 'Relayhost'; +$wb['relayhost_user_txt'] = 'Relayhost User'; +$wb['relayhost_password_txt'] = 'Relayhost Password'; diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index 7409bf0c7c..3ea60c08f9 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -215,6 +215,13 @@ class page_action extends tform_actions { $app->tpl->setVar("edit_disabled", 0); } + // load relayhost-values + $sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?"; + $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); + $app->tpl->setVar('relay_host', $rec['relay_host'], true); + $app->tpl->setVar('relay_user', $rec['relay_user'], true); + $app->tpl->setVar('relay_pass', $rec['relay_pass'], true); + // load dkim-values $sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?"; $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm index cb462c9819..676e55f9dc 100644 --- a/interface/web/mail/templates/mail_domain_edit.htm +++ b/interface/web/mail/templates/mail_domain_edit.htm @@ -75,6 +75,24 @@ {tmpl_var name='policy'}
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
-- GitLab From 83246e6892f216319567960d7a40969a088b5f92 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 29 Jan 2021 09:29:17 -0700 Subject: [PATCH 155/403] set umask before calling acme.sh --- install/lib/installer_base.lib.php | 6 ++++++ server/lib/classes/letsencrypt.inc.php | 3 +++ 2 files changed, 9 insertions(+) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 688fd32a83..dabbfd6d79 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -3023,6 +3023,9 @@ class installer_base { swriteln('acme.sh is installed, overriding certificate path to use ' . $acme_cert_dir); + # acme.sh does not set umask, resulting in incorrect permissions (ispconfig issue #6015) + $old_umask = umask(0022); + $out = null; $ret = null; if($conf['nginx']['installed'] == true || $conf['apache']['installed'] == true) { @@ -3044,6 +3047,7 @@ class installer_base { $acme_chain = "--fullchain-file " . escapeshellarg($ssl_crt_file); exec("$acme --install-cert -d " . escapeshellarg($hostname) . " $acme_key $acme_chain"); $issued_successfully = true; + umask($old_umask); // Make temporary backup of self-signed certs permanent if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) @@ -3056,6 +3060,8 @@ class installer_base { } else { swriteln('Issuing certificate via acme.sh failed. Please check that your hostname can be verified by letsencrypt'); + umask($old_umask); + // Restore temporary backup of self-signed certs if(file_exists($ssl_crt_file.'-temporary.bak') || is_link($ssl_crt_file.'-temporary.bak')) rename($ssl_crt_file.'-temporary.bak', $ssl_crt_file); diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index a118d55769..17bc37826c 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -399,11 +399,13 @@ class letsencrypt { $this->certbot_use_certcommand = false; $letsencrypt_cmd = ''; $allow_return_codes = null; + $old_umask = umask(0022); # work around acme.sh permission bug, see #6015 if($use_acme) { $letsencrypt_cmd = $this->get_acme_command($temp_domains, $key_file, $bundle_file, $crt_file, $server_type); $allow_return_codes = array(2); } else { $letsencrypt_cmd = $this->get_certbot_command($temp_domains); + umask($old_umask); } $success = false; @@ -420,6 +422,7 @@ class letsencrypt { } if($use_acme === true) { + umask($old_umask); if(!$success) { $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN); $app->log($letsencrypt_cmd, LOGLEVEL_WARN); -- GitLab From 12fe2f6a39b46ec7bab55f5b4a03c6e1ec550055 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 29 Jan 2021 09:51:13 -0700 Subject: [PATCH 156/403] set use_acme flag after install --- server/lib/classes/letsencrypt.inc.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 17bc37826c..880aa06a21 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -319,6 +319,9 @@ class letsencrypt { } elseif(!$this->get_certbot_script()) { // acme and le missing $this->install_acme(); + if($this->get_acme_script()) { + $use_acme = true; + } } $tmp = $app->letsencrypt->get_website_certificate_paths($data); -- GitLab From 76647e89177058d4dfb003822c23695915768444 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 29 Jan 2021 09:58:29 -0700 Subject: [PATCH 157/403] report error if no Let's Encrypt client --- server/lib/classes/letsencrypt.inc.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 880aa06a21..a2e6a5c380 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -317,10 +317,14 @@ class letsencrypt { if($this->get_acme_script()) { $use_acme = true; } elseif(!$this->get_certbot_script()) { + $app->log("Unable to find Let's Encrypt client, installing acme.sh.", LOGLEVEL_DEBUG); // acme and le missing $this->install_acme(); if($this->get_acme_script()) { $use_acme = true; + } else { + $app->log("Unable to install acme.sh. Cannot proceed, no Let's Encrypt client found.", LOGLEVEL_WARN); + return false; } } -- GitLab From 194edf99c9baad556f111ea8475951496e0c4c38 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 31 Jan 2021 21:41:10 +0100 Subject: [PATCH 158/403] Use standard_index.html as filename for the template index file (#5897) --- install/tpl/apache_ispconfig.conf.master | 1 + server/conf/nginx_vhost.conf.master | 2 +- server/plugins-available/apache2_plugin.inc.php | 16 ++++++++-------- server/plugins-available/nginx_plugin.inc.php | 16 +++++++++------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master index b1de2a1676..2a7ac0662e 100644 --- a/install/tpl/apache_ispconfig.conf.master +++ b/install/tpl/apache_ispconfig.conf.master @@ -3,6 +3,7 @@ ################################################ ServerTokens ProductOnly ServerSignature Off +DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm standard_index.html ################################################ # ISPConfig Logfile configuration for vlogger diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index f2b3e0f833..a3b14a58fa 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -79,7 +79,7 @@ server { - index index.html index.htm index.php index.cgi index.pl index.xhtml; + index index.html index.htm index.php index.cgi index.pl index.xhtml standard_index.html; location ~ \.shtml$ { diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 26cd14fd36..45594da5f1 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -953,11 +953,11 @@ class apache2_plugin { $app->system->exec_safe('chmod -R a+r ?', $error_page_path); } - //* Copy the web skeleton files only when there is no index.ph or index.html file yet - if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) { + //* Copy the web skeleton files only when there is no index.php, standard_index.html or index.html file yet + if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/standard_index.html')) { if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) { - if(!file_exists($data['new']['document_root'] . '/' . $web_folder . '/index.html')) { - $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_' . substr($conf['language'], 0, 2), $data['new']['document_root'] . '/' . $web_folder . '/index.html'); + if(!file_exists($data['new']['document_root'] . '/' . $web_folder . '/standard_index.html')) { + $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_' . substr($conf['language'], 0, 2), $data['new']['document_root'] . '/' . $web_folder . '/standard_index.html'); } if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) { @@ -968,13 +968,13 @@ class apache2_plugin { } } else { if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) { - if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html'); + if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/standard_index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/standard_index.html'); } else { - if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html'); - if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){ + if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/standard_index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/standard_index.html'); + if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')) { if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/'); } - if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){ + if(is_file($conf['rootpath'] . '/conf/index/robots.txt')) { if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/'); } } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 73e788ed43..62a618ce7f 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -791,10 +791,12 @@ class nginx_plugin { $app->system->exec_safe('chmod -R a+r ?', $error_page_path); } - //* Copy the web skeleton files only when there is no index.ph or index.html file yet - if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php')) { + //* Copy the web skeleton files only when there is no index.php, standard_index.html or index.html file yet + if(!file_exists($data['new']['document_root'].'/'.$web_folder.'/index.html') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/index.php') && !file_exists($data['new']['document_root'].'/'.$web_folder.'/standard_index.html')) { if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2))) { - if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html'); + if(!file_exists($data['new']['document_root'] . '/' . $web_folder . '/standard_index.html')) { + $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html_' . substr($conf['language'], 0, 2), $data['new']['document_root'] . '/' . $web_folder . '/standard_index.html'); + } if(is_file($conf['rootpath'] . '/conf-custom/index/favicon.ico')) { if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/'); @@ -804,13 +806,13 @@ class nginx_plugin { } } else { if (file_exists($conf['rootpath'] . '/conf-custom/index/standard_index.html')) { - if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/index.html'); + if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/standard_index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf-custom/index/standard_index.html', $data['new']['document_root'].'/' . $web_folder . '/standard_index.html'); } else { - if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/index.html'); - if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')){ + if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/standard_index.html')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/standard_index.html_'.substr($conf['language'], 0, 2), $data['new']['document_root'].'/' . $web_folder . '/standard_index.html'); + if(is_file($conf['rootpath'] . '/conf/index/favicon.ico')) { if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/favicon.ico')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/favicon.ico', $data['new']['document_root'].'/' . $web_folder . '/'); } - if(is_file($conf['rootpath'] . '/conf/index/robots.txt')){ + if(is_file($conf['rootpath'] . '/conf/index/robots.txt')) { if(!file_exists($data['new']['document_root'].'/' . $web_folder . '/robots.txt')) $app->system->exec_safe('cp ? ?', $conf['rootpath'] . '/conf/index/robots.txt', $data['new']['document_root'].'/' . $web_folder . '/'); } } -- GitLab From 41d5645e72e04fa0357d119af6aef411afbfa96b Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Mon, 1 Feb 2021 14:36:34 +0100 Subject: [PATCH 159/403] Disable per_user learning for bayes rspamd --- install/tpl/rspamd_classifier-bayes.conf.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master index 1688d57e21..dcda4a6391 100644 --- a/install/tpl/rspamd_classifier-bayes.conf.master +++ b/install/tpl/rspamd_classifier-bayes.conf.master @@ -1,3 +1,3 @@ autolearn = [-0.01, 5.00]; -per_user = true; -per_language = true; \ No newline at end of file +per_user = false; +per_language = true; -- GitLab From fa0db0b9deeda3a9fae328e2ba50490bd7aee5f1 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Feb 2021 08:45:23 -0700 Subject: [PATCH 160/403] jailkit: remove extraneous + chars in jk_init.ini --- install/tpl/jk_init.ini.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index b84aab95b6..9f34d5090d 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -149,8 +149,8 @@ paths_w_setuid = /bin/ping #paths = /usr/bin/X11/xterm, /usr/share/terminfo, /etc/terminfo #devices = /dev/pts/0, /dev/pts/1, /dev/pts/2, /dev/pts/3, /dev/pts/4, /dev/ptyb4, /dev/ptya4, /dev/tty, /dev/tty0, /dev/tty4 -+# coreutils from: -+# (echo -ne '\n[coreutils]\ncomment = non-sbin progs from coreutils\npaths = '; dpkg --listfiles coreutils | grep -E '^/bin/|/usr/bin/' | xargs -n1 -i@ echo -n "@, " | sed -e 's/, *$/\n/g' -e 's|/usr/bin/||g' -e 's|/bin/||g') >> /etc/jailkit/jk_init.ini +# coreutils from: +# (echo -ne '\n[coreutils]\ncomment = non-sbin progs from coreutils\npaths = '; dpkg --listfiles coreutils | grep -E '^/bin/|/usr/bin/' | xargs -n1 -i@ echo -n "@, " | sed -e 's/, *$/\n/g' -e 's|/usr/bin/||g' -e 's|/bin/||g') >> /etc/jailkit/jk_init.ini [coreutils] comment = non-sbin progs from coreutils -- GitLab From f0203e44f6b10c85e89d335f05c374dbbd74413d Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Feb 2021 08:45:45 -0700 Subject: [PATCH 161/403] jailkit: add php8_0 section --- install/tpl/jk_init.ini.master | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 9f34d5090d..e835d2701d 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -225,3 +225,8 @@ includesections = php_common comment = php version 7.4 paths = /usr/bin/php7.4, /usr/lib/php/7.4/, /usr/lib/php/20190902/, /usr/share/php/7.4/, /etc/php/7.4/cli/, /etc/php/7.4/mods-available/ includesections = php_common + +[php8_0] +comment = php version 8.0 +paths = /usr/bin/php8.0, /usr/lib/php/8.0/, /usr/lib/php/20200930/, /usr/share/php/8.0/, /etc/php/8.0/cli/, /etc/php/8.0/mods-available/ +includesections = php_common -- GitLab From 072be2252c5cad71dc3f8aa44693ad7be8f1cf76 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Feb 2021 15:11:05 -0700 Subject: [PATCH 162/403] jailkit: fix bash test (closes #6042) --- server/lib/classes/cron.d/600-jailkit_maintenance.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php index 547b7caa1a..4ef5835e67 100644 --- a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php +++ b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php @@ -114,7 +114,8 @@ class cronjob_jailkit_maintenance extends cronjob { if (is_file( $rec['document_root']."/bin/bash" )) { # test that /bin/bash functions in the jail print "chroot --userspec ".$rec['system_user'].":".$rec['system_group']." ".$rec['document_root']." /bin/bash -c true 2>/dev/null\n"; - if (! $app->system->exec_safe("chroot --userspec ?:? ? /bin/bash -c true 2>/dev/null", $rec['system_user'], $rec['system_group'], $rec['document_root'])) { + $app->system->exec_safe("chroot --userspec ?:? ? /bin/bash -c true 2>/dev/null", $rec['system_user'], $rec['system_group'], $rec['document_root']); + if ($app->system->last_exec_retcode()) { # return 0 means success print "/bin/bash test failed, forcing update\n"; $options[] = 'force'; # bogus hash will not match, triggering an update -- GitLab From 783d34c17dbe5a14aaa23199cddf9159438dc451 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Feb 2021 16:13:29 -0700 Subject: [PATCH 163/403] jailkit: enabling due to php_fpm_chroot requires php in use (closes #6040) --- 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 45594da5f1..cf69b38818 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -788,15 +788,15 @@ class apache2_plugin { $last_updated = array_unique($last_updated, SORT_REGULAR); sort($last_updated, SORT_STRING); $update_hash = hash('md5', implode(' ', $last_updated)); + $check_for_jailkit_updates=false; // Create jailkit chroot when enabling php_fpm_chroot - if($data['new']['php_fpm_chroot'] == 'y' && $data['old']['php_fpm_chroot'] != 'y') { + if($data['new']['php_fpm_chroot'] == 'y' && $data['old']['php_fpm_chroot'] != 'y' && $data['new']['php'] != 'no') { $website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $data['new']['domain_id']); $this->website = array_merge($website, $data['new'], array('new_jailkit_hash' => $update_hash)); $this->jailkit_config = $jailkit_config; $this->_setup_jailkit_chroot(); $this->_add_jailkit_user(); - $check_for_jailkit_updates=false; // else delete if unused } elseif ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') { $check_for_jailkit_updates=false; diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 62a618ce7f..6ba24ead07 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -626,15 +626,15 @@ class nginx_plugin { $last_updated = array_unique($last_updated, SORT_REGULAR); sort($last_updated, SORT_STRING); $update_hash = hash('md5', implode(' ', $last_updated)); + $check_for_jailkit_updates=false; // Create jailkit chroot when enabling php_fpm_chroot - if($data['new']['php_fpm_chroot'] == 'y' && $data['old']['php_fpm_chroot'] != 'y') { + if($data['new']['php_fpm_chroot'] == 'y' && $data['old']['php_fpm_chroot'] != 'y' && $data['new']['php'] != 'no') { $website = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ?', $data['new']['domain_id']); $this->website = array_merge($website, $data['new'], array('new_jailkit_hash' => $update_hash)); $this->jailkit_config = $jailkit_config; $this->_setup_jailkit_chroot(); $this->_add_jailkit_user(); - $check_for_jailkit_updates=false; // else delete if unused } elseif ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') { $check_for_jailkit_updates=false; -- GitLab From 17c4a07e54f2e81635844ea125a3c0f2b153e8c0 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Feb 2021 17:19:29 -0700 Subject: [PATCH 164/403] jailkit: fix php warnings (closes #6036) --- server/lib/classes/system.inc.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index a26707b0ae..5a99bbda20 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -2412,6 +2412,7 @@ class system{ public function create_jailkit_chroot($home_dir, $app_sections = array(), $options = array()) { global $app; +$app->log("create_jailkit_chroot: called for home_dir $home_dir with options: " . print_r($options, true), LOGLEVEL_DEBUG); // Disallow operating on root directory if(realpath($home_dir) == '/') { @@ -2428,6 +2429,9 @@ class system{ } elseif(is_string($app_sections)) { $app_sections = preg_split('/[\s,]+/', $app_sections); } + if(! is_array($options)) { + $options = (is_string($options) ? preg_split('/[\s,]+/', $options) : array()); + } // Change ownership of the chroot directory to root $this->chown($home_dir, 'root'); @@ -2485,6 +2489,7 @@ class system{ public function create_jailkit_programs($home_dir, $programs = array(), $options = array()) { global $app; +$app->log("create_jailkit_programs: called for home_dir $home_dir with options: " . print_r($options, true), LOGLEVEL_DEBUG); // Disallow operating on root directory if(realpath($home_dir) == '/') { @@ -2501,6 +2506,9 @@ class system{ } elseif(is_string($programs)) { $programs = preg_split('/[\s,]+/', $programs); } + if(! is_array($options)) { + $options = (is_string($options) ? preg_split('/[\s,]+/', $options) : array()); + } # prohibit ill-advised copying paths known to be sensitive/problematic # (easy to bypass if needed, eg. use /./etc) -- GitLab From 1070f878c2d6375762bb9217904dadc3837e6b80 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 3 Feb 2021 09:50:34 -0700 Subject: [PATCH 165/403] jailkit: disable php should clean up jailkit (closes #6041) --- 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 cf69b38818..170f8b1b72 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -798,7 +798,8 @@ class apache2_plugin { $this->_setup_jailkit_chroot(); $this->_add_jailkit_user(); // else delete if unused - } elseif ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') { + } elseif (($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') || + ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php'] == 'no')) { $check_for_jailkit_updates=false; $this->_delete_jailkit_if_unused($data['new']['domain_id']); if(is_dir($data['new']['document_root'].'/etc/jailkit')) { @@ -3820,7 +3821,7 @@ class apache2_plugin { } // chroot is used by php-fpm - if (isset($parent_domain['php_fpm_chroot']) && $parent_domain['php_fpm_chroot'] == 'y') { + if (isset($parent_domain['php_fpm_chroot']) && $parent_domain['php_fpm_chroot'] == 'y' && $parent_domain['php'] != 'no') { return; } diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 6ba24ead07..bec59fddc4 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -636,7 +636,8 @@ class nginx_plugin { $this->_setup_jailkit_chroot(); $this->_add_jailkit_user(); // else delete if unused - } elseif ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') { + } elseif (($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php_fpm_chroot'] != 'y') || + ($data['new']['delete_unused_jailkit'] == 'y' && $data['new']['php'] == 'no')) { $check_for_jailkit_updates=false; $this->_delete_jailkit_if_unused($data['new']['domain_id']); if(is_dir($data['new']['document_root'].'/etc/jailkit')) { @@ -3599,7 +3600,7 @@ class nginx_plugin { } // chroot is used by php-fpm - if (isset($parent_domain['php_fpm_chroot']) && $parent_domain['php_fpm_chroot'] == 'y') { + if (isset($parent_domain['php_fpm_chroot']) && $parent_domain['php_fpm_chroot'] == 'y' && $parent_domain['php'] != 'no') { return; } -- GitLab From eb7d9ed5ff3f8b589c1c25ff8be4bea42fb9fd68 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 3 Feb 2021 12:41:18 -0700 Subject: [PATCH 166/403] 'Enable receiving' should check disablesmtp --- install/tpl/mysql-virtual_email2email.cf.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master index 1ae7f9addc..f420a104d9 100644 --- a/install/tpl/mysql-virtual_email2email.cf.master +++ b/install/tpl/mysql-virtual_email2email.cf.master @@ -2,8 +2,8 @@ user = {mysql_server_ispconfig_user} password = {mysql_server_ispconfig_password} dbname = {mysql_server_database} hosts = {mysql_server_ip} -query = SELECT email FROM mail_user WHERE email = '%s' AND forward_in_lda = 'n' AND disabledeliver = 'n' AND postfix = 'y' AND server_id = {server_id} +query = SELECT email FROM mail_user WHERE email = '%s' AND forward_in_lda = 'n' AND disabledeliver = 'n' AND disablesmtp = 'n' AND server_id = {server_id} AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id}) UNION - SELECT cc AS email FROM mail_user WHERE email = '%s' AND cc != '' AND (forward_in_lda = 'n' OR disabledeliver = 'y') AND postfix = 'y' AND server_id = {server_id} + SELECT cc AS email FROM mail_user WHERE email = '%s' AND cc != '' AND (forward_in_lda = 'n' OR disabledeliver = 'y') AND disablesmtp = 'n' AND server_id = {server_id} AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id}) -- GitLab From 8945b60b8dfc7b666da734112efb23d43bd90d93 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 4 Feb 2021 08:25:17 +0100 Subject: [PATCH 167/403] Update openvz_plugin.inc.php --- server/plugins-available/openvz_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/openvz_plugin.inc.php b/server/plugins-available/openvz_plugin.inc.php index f17edb7b8c..4be9c30ebf 100644 --- a/server/plugins-available/openvz_plugin.inc.php +++ b/server/plugins-available/openvz_plugin.inc.php @@ -123,7 +123,7 @@ class openvz_plugin { //* new diskspace for ploop-containers requieres "vzctl set" if($data['new']['diskspace'] != $data['old']['diskspace']) { - escapeshell("vzctl set ? --diskspace ? --save", $veid, $data['new']['diskspace']."G"); + $app->system->exec_safe("vzctl set ? --diskspace ? --save", $veid, $data['new']['diskspace']."G"); } //* Apply config changes to the VM -- GitLab From ac7b2c82f145288e10fbe16a00102e9d35120bdc Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 4 Feb 2021 08:30:08 +0100 Subject: [PATCH 168/403] Update ispconfig3.sql --- install/sql/ispconfig3.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 4c059203d1..04082fbeb7 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -2408,7 +2408,7 @@ INSERT INTO `country` (`iso`, `name`, `printable_name`, `iso3`, `numcode`, `eu`) ('UG', 'UGANDA', 'Uganda', 'UGA', 800, 'n'), ('UA', 'UKRAINE', 'Ukraine', 'UKR', 804, 'n'), ('AE', 'UNITED ARAB EMIRATES', 'United Arab Emirates', 'ARE', 784, 'n'), -('GB', 'UNITED KINGDOM', 'United Kingdom', 'GBR', 826, 'y'), +('GB', 'UNITED KINGDOM', 'United Kingdom', 'GBR', 826, 'n'), ('US', 'UNITED STATES', 'United States', 'USA', 840, 'n'), ('UM', 'UNITED STATES MINOR OUTLYING ISLANDS', 'United States Minor Outlying Islands', NULL, NULL, 'n'), ('UY', 'URUGUAY', 'Uruguay', 'URY', 858, 'n'), -- GitLab From a26f17a4948b5e04ed5278096315992b9f6f56c1 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Thu, 4 Feb 2021 08:30:54 +0100 Subject: [PATCH 169/403] Update upd_dev_collection.sql --- install/sql/incremental/upd_dev_collection.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 7c4c05d887..7d1ec43815 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -16,3 +16,6 @@ DROP TABLE 'software_package'; DROP TABLE 'software_repo'; DROP TABLE 'software_update'; DROP TABLE 'software_update_inst'; + +-- Brexit +UPDATE `country` SET `eu` = 'n' WHERE `iso` = 'GB'; -- GitLab From a29401db0d1ceb9cbd19f0fd19f670df5a64eb4a Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 4 Feb 2021 11:50:25 +0100 Subject: [PATCH 170/403] Add new function for custom config usage for Postfix and Dovecot (#5988) --- install/lib/installer_base.lib.php | 6 ++++++ install/tpl/debian6_dovecot2.conf.master | 4 +++- install/tpl/debian_dovecot2.conf.master | 4 +++- install/tpl/fedora_dovecot2.conf.master | 4 +++- install/tpl/postfix_custom.conf.master | 3 +++ 5 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 install/tpl/postfix_custom.conf.master diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 696a7042bd..6188b39708 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1182,6 +1182,12 @@ class installer_base { $content = strtr($content, $postconf_placeholders); $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); } + if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix_custom.conf.master')) { + $configfile = 'postfix_custom.conf'; + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master'); + $content = strtr($content, $postconf_placeholders); + $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); + } // Remove comment lines, these would give fatal errors when passed to postconf. $postconf_commands = array_filter($postconf_commands, function($line) { return preg_match('/^[^#]/', $line); }); diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 5032488a6f..55e02fef30 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -1,3 +1,4 @@ +# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login @@ -88,7 +89,7 @@ protocol lmtp { #2.3+ group = vmail #2.3+ mode = 0660 #2.3+ } -#2.3+ +#2.3+ #2.3+ unix_listener stats-writer { #2.3+ user = vmail #2.3+ group = vmail @@ -131,3 +132,4 @@ namespace inbox { special_use = \Trash } } +!include_try conf.d/99-custom-config.conf diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 4a44bfbfc6..62bed414fe 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -1,3 +1,4 @@ +# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login @@ -86,7 +87,7 @@ protocol lmtp { #2.3+ group = vmail #2.3+ mode = 0660 #2.3+ } -#2.3+ +#2.3+ #2.3+ unix_listener stats-writer { #2.3+ user = vmail #2.3+ group = vmail @@ -108,3 +109,4 @@ plugin { quota_status_nouser = DUNNO quota_status_overquota = "552 5.2.2 Mailbox is full" } +!include_try conf.d/99-custom-config.conf diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index 81d71a37fe..4644371450 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -1,3 +1,4 @@ +# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login @@ -82,7 +83,7 @@ protocol lmtp { #2.3+ group = vmail #2.3+ mode = 0660 #2.3+ } -#2.3+ +#2.3+ #2.3+ unix_listener stats-writer { #2.3+ user = vmail #2.3+ group = vmail @@ -125,3 +126,4 @@ namespace inbox { special_use = \Trash } } +!include_try conf.d/99-custom-config.conf diff --git a/install/tpl/postfix_custom.conf.master b/install/tpl/postfix_custom.conf.master new file mode 100644 index 0000000000..4f3f2124c8 --- /dev/null +++ b/install/tpl/postfix_custom.conf.master @@ -0,0 +1,3 @@ +# You can use this file for custom Postfix settings. The used settings will overrule the settings set by ISPConfig. +# Use with caution! +# Put this file in /usr/local/ispconfig/server/conf-custom/install/ and make your changes there. -- GitLab From 3ed6e17ccea806140d842a11c793be6947ae4ce9 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 4 Feb 2021 13:28:59 +0100 Subject: [PATCH 171/403] Apply suggestions from !1405 --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6188b39708..248fcd66c4 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1182,8 +1182,8 @@ class installer_base { $content = strtr($content, $postconf_placeholders); $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); } - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix_custom.conf.master')) { - $configfile = 'postfix_custom.conf'; + $configfile = 'postfix_custom.conf'; + if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/' . $configfile . '.master')) { $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master'); $content = strtr($content, $postconf_placeholders); $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); -- GitLab From 530311aedb0e700586810a71e44ef2616ea35377 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 4 Feb 2021 19:33:36 +0100 Subject: [PATCH 172/403] Copy custom dovecot config from conf-custom --- install/lib/installer_base.lib.php | 4 ++++ install/tpl/debian6_dovecot2.conf.master | 2 +- install/tpl/debian_dovecot2.conf.master | 2 +- install/tpl/dovecot_custom.conf.master | 3 +++ install/tpl/fedora_dovecot2.conf.master | 2 +- 5 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 install/tpl/dovecot_custom.conf.master diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 248fcd66c4..6c33445bbf 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1540,6 +1540,10 @@ class installer_base { } else { copy('tpl/debian_dovecot2.conf.master', $config_dir.'/'.$configfile); } + // Copy custom config file + if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master')) { + copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master', $config_dir.'/conf.d/99-ispconfig-custom-config.conf'); + } replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); if(version_compare($dovecot_version, 2.1, '<')) { diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 55e02fef30..ae0103ff7b 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -132,4 +132,4 @@ namespace inbox { special_use = \Trash } } -!include_try conf.d/99-custom-config.conf +!include_try conf.d/99-ispconfig-custom-config.conf diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 62bed414fe..1b1198726f 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -109,4 +109,4 @@ plugin { quota_status_nouser = DUNNO quota_status_overquota = "552 5.2.2 Mailbox is full" } -!include_try conf.d/99-custom-config.conf +!include_try conf.d/99-ispconfig-custom-config.conf diff --git a/install/tpl/dovecot_custom.conf.master b/install/tpl/dovecot_custom.conf.master new file mode 100644 index 0000000000..dab73e5a09 --- /dev/null +++ b/install/tpl/dovecot_custom.conf.master @@ -0,0 +1,3 @@ +# You can use this file for custom Dovecot settings. The used settings will overrule the settings set by ISPConfig. +# Use with caution! +# Put this file in /usr/local/ispconfig/server/conf-custom/install/ and make your changes there. diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index 4644371450..6e76dfd515 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -126,4 +126,4 @@ namespace inbox { special_use = \Trash } } -!include_try conf.d/99-custom-config.conf +!include_try conf.d/99-ispconfig-custom-config.conf -- GitLab From e753de51d12836ae416d4940be0a6cee1b5c933b Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 4 Feb 2021 19:39:48 +0100 Subject: [PATCH 173/403] Update custom config note (#5988) --- install/tpl/debian6_dovecot2.conf.master | 4 +++- install/tpl/debian_dovecot2.conf.master | 4 +++- install/tpl/fedora_dovecot2.conf.master | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index ae0103ff7b..91d745bc39 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -1,4 +1,6 @@ -# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf +# Do not change this file, as changes will be overwritten by any ISPConfig update. +# Put your custom settings in /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master. +# To start using those changes, do a force upgrade and let it reconfigure your services. (ispconfig_update.sh --force) listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 1b1198726f..acbb5ccdff 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -1,4 +1,6 @@ -# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf +# Do not change this file, as changes will be overwritten by any ISPConfig update. +# Put your custom settings in /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master. +# To start using those changes, do a force upgrade and let it reconfigure your services. (ispconfig_update.sh --force) listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index 6e76dfd515..0b31c23b4e 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -1,4 +1,6 @@ -# Do not change this file, as changes will be overwritten by any ISPConfig update. Put your custom settings in /etc/dovecot/conf.d/99-custom-config.conf +# Do not change this file, as changes will be overwritten by any ISPConfig update. +# Put your custom settings in /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master. +# To start using those changes, do a force upgrade and let it reconfigure your services. (ispconfig_update.sh --force) listen = *,[::] protocols = imap pop3 auth_mechanisms = plain login -- GitLab From 4228524c9c79f0cc59442391eaca98b6783f0ce6 Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Fri, 5 Feb 2021 07:35:37 +0100 Subject: [PATCH 174/403] Added missing http2 directive to HTTPS proxy protocol config --- server/conf/nginx_vhost.conf.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index a3b14a58fa..d5e457b9e3 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -15,7 +15,7 @@ server { listen : ssl http2; - listen : ssl proxy_protocol; + listen : ssl http2 proxy_protocol; -- GitLab From 31ad5b7d7617eda6228953c424d6ca082c842a8b Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 5 Feb 2021 09:39:37 -0700 Subject: [PATCH 175/403] ensure /etc/postfix/sasl_passwd exists --- install/dist/lib/fedora.lib.php | 1 + install/dist/lib/gentoo.lib.php | 1 + install/dist/lib/opensuse.lib.php | 1 + install/lib/installer_base.lib.php | 1 + install/tpl/debian_postfix.conf.master | 2 +- install/tpl/fedora_postfix.conf.master | 2 +- install/tpl/gentoo_postfix.conf.master | 2 +- install/tpl/opensuse_postfix.conf.master | 2 +- 8 files changed, 8 insertions(+), 4 deletions(-) diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index fdb6c2e717..25dc461433 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -162,6 +162,7 @@ class installer_dist extends installer_base { touch($config_dir.'/mime_header_checks'); touch($config_dir.'/nested_header_checks'); touch($config_dir.'/body_checks'); + touch($config_dir.'/sasl_passwd'); //* Create the mailman files if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data'); diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index 1bd58e0c38..78dffabf85 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -160,6 +160,7 @@ class installer extends installer_base touch($config_dir.'/mime_header_checks'); touch($config_dir.'/nested_header_checks'); touch($config_dir.'/body_checks'); + touch($config_dir.'/sasl_passwd'); //* Create auxillary postfix conf files $configfile = 'helo_access'; diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index 7332db1699..3effb1d10c 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -176,6 +176,7 @@ class installer_dist extends installer_base { touch($config_dir.'/mime_header_checks'); touch($config_dir.'/nested_header_checks'); touch($config_dir.'/body_checks'); + touch($config_dir.'/sasl_passwd'); //* Create the mailman files if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data'); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 696a7042bd..1666b4c40d 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1200,6 +1200,7 @@ class installer_base { touch($config_dir.'/mime_header_checks'); touch($config_dir.'/nested_header_checks'); touch($config_dir.'/body_checks'); + touch($config_dir.'/sasl_passwd'); //* Create the mailman files if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data'); diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 42bb3f1510..5023caf6be 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -54,7 +54,7 @@ address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf -smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, texthash:{config_dir}/sasl_passwd smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous, noplaintext diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index dd232b6d6d..c5786c6ea8 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -50,7 +50,7 @@ address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf -smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, texthash:{config_dir}/sasl_passwd smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous, noplaintext diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 7c337bbb5d..405640f52a 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -49,7 +49,7 @@ address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf -smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, texthash:{config_dir}/sasl_passwd smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous, noplaintext diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index c7c282ca14..a98f4223e1 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -52,7 +52,7 @@ address_verify_negative_refresh_time=60s # needed for postfix < 3.3 when using reject_unverified_recipient (lmtp): enable_original_recipient = yes sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf -smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd +smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, texthash:{config_dir}/sasl_passwd smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous, noplaintext -- GitLab From a92cb66cb7a1bd5cd2e8f623bc3ca96e231eb06a Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 6 Feb 2021 14:57:06 +0100 Subject: [PATCH 176/403] Update CONTRIBUTING.md --- CONTRIBUTING.md | 344 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 281 insertions(+), 63 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b515c5348d..cdfe750be4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,99 +1,318 @@ -# Which code branch to use +# Contributing to ISPConfig +ISPConfig is a open source project and community contributions are very welcome. To contribute, please stick to the guidelines. -The master branch is used for code (mostly new features) that shall go into the next major release (e.g. 3.2, 3.3 and so on). The stable branch (e.g. stable-3.1, stable-3.2) is the branch for the current intermediate and bugfix releases. Bugfixes shall be committed to the current stable branch and not the master branch. The stable branch is merged to the master automatically from time to time, please do not submit bugfixes a second time against the master. +This document is under development and will be continuously improved. + +# Issues +* Before opening a new issue, use the search function to check if there isn't a bug report / feature request already +* If you are reporting a bug, please share your OS and PHP (CLI) version +* If you want to report several bugs or request several features, open a separate issue for each one of them. + +# Branches +* Please create an issue for each contribution you want to make. +* Do not put multiple contributions into a single branch and merge request. Each contribution should have it's own branch. +* Do not use the develop branch in your forked project for your contribution. Create a separate branch for each issue. +* Give your branch a name, e. g. `6049-update-the-contributing-doc ` where 6049 is the issue number. + +# Merge requests +Please give your merge request a description that shortly states what it is about. Merge requests without a good title or with missing description will get delayed because it is more effort for us to check the meaning of the changes made. +Once again: Do not put multiple things into a single merge request. If you for example fix two issues where one affects apache and one mail users, use separate issues and separate merge requests. +You can group multiple issues in a single merge request if they have the same specific topic, e. g. if you have one issue stating that a language entry in mail users is missing and a second issue that a language entry for server config is missing, you can put both issues into a single branch and merge request. Be sure to include all issue ids (if multiple) into the merge request's description in this case. +* Open a issue for the bug you want to fix / the feature you want to implement +* After opening the issue, commit your changes to your branch +* Note the issue # in every commit +* Update the documentation (New devs will not have access to this. Please sent an email to docs@ispconfig.org) +* Add translations for every language +* Use a short title +* Write a clear description - for example, when updating the contributing guidelines with issue #6049: \ +"Update of our contributing guidelines \ +Closes #6049" +* Please be aware that we are not able to accept merge request that do not stick to the coding guidelines. We need to insist on that to keep the code clean and maintainable. # Some guidelines for web development with php. ----------------------------------------------------- -* Unix Line Breaks Only, NO windows breaks please. -* Tabs to indent lines, NO spaces -* no accidental _ no spaces before or after -* error_reporting(E_ALL|E_STRICT), yep PHP 5 -* Magic quotes is gone, get used to it now. config = magic_quotes_gpc() Everything must be quoted -* Don't use ereg, split and other old function -> gone in PHP 5.4 -* Don't use features that are not supported in PHP 5.3, for compatibility with LTS OS releases, ISPConfig must support PHP 5.3+ +* Don't use features that are not supported in PHP 5.4, for compatibility with LTS OS releases, ISPConfig must support PHP 5.4+ * Don't use shorttags. A Shorttag is always use uses() or $app->load() functions. * Classes for the server are located in server/lib/classes/ and loaded with $app->uses() or $app->load() functions. -* please mark any section that need review or work on with /* TODO: short description */ -* Make function / var names on the following way, first word lower, next word(s) first letter upper like. getFirstResult(); -* always a space but NO newline before opening braces, e. g. -``` -class abc { - public function cde() { - if($a == $b) { - return false; - } - } + +### Indentations + +Indentations are always done with tabs. Do **not** use spaces. +It is recommended to set your IDE to display tabs with a width of 4 spaces. + +### Variable and method / function names + +Methods and functions should always be written in camel-case. Variables and properties should always be lowercase instead. + +**Correct:** +```php +class MyClass { + private $issue_list = []; + + private function getMyValue() { + + } } ``` -* no spaces after function/method or control names, e. g. -``` -function abc($x, $y) { - if($condition == true) { - $x = 2; - } + +**Wrong:** +```php +class my_class { + private $IssueList = []; + + private function get_my_value() { + + } } ``` -and NOT + +### Blocks + +#### Curly braces + +Opening curly braces always have to be in the same line as the preceding condition. They are separated by a single space from the closing paranthesis. +Closing curly braces are always on a separate line after the last statement in the block. The only exception is a do-while block where the logic is inverted. + +Curly braces are **always** to be used. Do not leave them out, even if there is only a single statement in the corresponding block. + +**Correct:** +```php +if($variable === true) { + +} + +while($condition) { + +} + +do { + +} while($condition); ``` -function abc ($x, $y) { - if ( $condition == true ) { - - } + +**Wrong:** +```php +if($variable === true){ + +} + +if($variable === true) +{ + } + +if($variable === true) + $x = 'no braces'; + +while($condition) { } ``` -# Commenting style +#### Short style + +The short style of conditional assignments is allowed to be used, but it must not affect readability, e. g. they shall not be nested. + +**Allowed:** +```php +$a = 0; +if($condition === true) { + $a = 1; +} -The comments break down into the following types +$a = ($condition === true ? 1 : 0); ``` -// is uses for removing lines and debug dev etc -/* - is used to comment out blocks -*/ -/** is used to create documentaion - * thats over - * lines - */ +**Disallowed:** +```php +$x = ($condition === true ? ($further == 'foo' ? true : false) : true); ``` -If you need to block out a section then use + + +#### Spaces and paranthesis + +The rules for using spaces are: +- no space after `if`/`while` etc. and the following opening paranthesis +- single space after closing paranthesis and before opening curly brace +- no spaces at the end of a line +- no spaces after opening paranthesis and before closing paranthesis +- single space before and after comparators + +**Correct:** +```php +if($variable === $condition) { + +} + +while(($condition !== false || $condition2 === true) && $n <= 15) { + $n++; +} ``` -/* -function redundant_code(){ - something here + +**Wrong:** +```php +if ($variable===$condition) { + +} + +while(($condition!==false||$condition2===true))&&$n<=15){ + } -*/ ``` -To block out single lines use // and all // are assumed to be redundant test code and NOT comments -// print_r($foo); +#### Newlines inside of conditions + +Breaking up conditions into separate lines can be done if it positively affects readability. + +```php +if($condition === true && ($state === 'completed' || $state === 'pending') && ($processed_by !== null || $process_time < time())) { -Do not use the phpdoc on every function, eg +} ``` -/** -* Login a user -* @param string user username -* @param string password of user -*/ -function login($user, $pass){ - +can also be written as +```php +if($condition === true + && ($state === 'completed' || $state === 'pending') + && ($processed_by !== null || $process_time < time()) + ) { + } ``` -as this function is self-explaining, the following clean code will suffice +This must not be abused, e. g. the following is not allowed: + +```php +if($a == 1 + || $b == 2) { + + } ``` -function login($user, $pass){ - -} + +### Arrays + +#### Short syntax + +Please **do** use short array syntax. We have deprecated the old-style array syntax. + +**Correct**: +```php +$var = []; + +$var2 = [ + 'conf' => [ + 'setting1' => 'value1' + ] +]; ``` -# Where to store custom settings +**Wrong:** +```php: +$var = array(); -## Interface settings +$var2 = array( + 'conf' => array( + 'setting1' => 'value1' + ) +); +``` + +#### Spaces and newlines + +When defining an empty array, both brackets shall be on the same line. When defining an array with values, the style depends on the values you are going to assign. + +##### List of values + +When defining an array with a list of values, e. g. numbers or names, they should be on the same line as the brackets without using new lines, as long as the line does not exceed a total number of characters of about 90. After each comma there has to be a single space. + +##### Nested array + +When defining a nested array onle the opening bracket is to be on the same line. The closing bracket has to be on a separate line indented by `tabs * level of array`. + +##### Examples + +```php +// empty array +$a = []; +// array with list of values +$array = [4, 3, 76, 12]; + +// array with long list of values +$array = [ + 'This is one entry', 'This is a second one', 'Another one', 'Further entries', 'foo', 'bar', 34, 42, $variable, // newline here for better readability + 'Next entry', 'the last entry' +]; + +// nested array +$array = [ + 'conf' => [ + 'level' => 1, + 'settings' => [ + 'window' => 'open', + 'door' => 'closed + ] + ] +]; +``` + +**Not-to-dos:** +```php +$array=[ +]; + +$array = [ + 1, + 4, + 35, + 23, + 345, + 11, + 221, + 'further', + '...' +]; + +$array=['conf'=>['settings'=>['window' => 'open', 'door' => 'closed]]]; +``` + +### Strings + +Whenever possible use single quotes `'` instead of double qoutes `"`. Try not to embedd variables in string. Concatenate them instead. + +**Correct:** +```php +// simple text +$var = 'This is a text'; + +// array index +$array['index'] = 'value'; + +// text with variables +$var = 'This is a text with ' . $value . ' values inside and at the end: ' . $sum_value; + +// dynamic array index +$idx = 'index' . $key; +$value = $array[$idx]; +``` + +**Wrong:** +```php +// simple text +$var = "This is a text"; + +// array index +$array["index"] = 'value'; + +// text with variables +$var = "This is a text with $value values inside and at the end: {$sum_value}"; + +// dynamic array index +$value = $array['index' . $key]; +$value = $array["index{$key}"]; +``` + +# Where to store custom settings +## Interface settings The recommended place to store global interface settings is the ini style global config system (see system.ini.master file in install/tpl/ to set defaults). The settings file gets stored inside the ispconfig database. Settings can be accessed with the function: @@ -109,7 +328,6 @@ fields to the file interface/web/admin/form/system_config.tform.php and the corr tempalte file in the templates subfolder of the admin module. ## Server settings - Server settings are stored in the ini style server config system (see server.ini.master template file) The settings file gets stored inside the ispconfig database in the server table. Settings can be accessed with the function $app->getconf->get_server_config(....) -- GitLab From 8bc2bc35e911834ecc13d52068220c2ecef6e091 Mon Sep 17 00:00:00 2001 From: Thom Date: Sun, 7 Feb 2021 12:52:57 +0100 Subject: [PATCH 177/403] Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cdfe750be4..5c168d13c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,8 +4,8 @@ ISPConfig is a open source project and community contributions are very welcome. This document is under development and will be continuously improved. # Issues -* Before opening a new issue, use the search function to check if there isn't a bug report / feature request already -* If you are reporting a bug, please share your OS and PHP (CLI) version +* Before opening a new issue, use the search function to check if there isn't a bug report / feature request already. +* If you are reporting a bug, please share your OS and PHP (CLI) version. * If you want to report several bugs or request several features, open a separate issue for each one of them. # Branches @@ -21,7 +21,7 @@ You can group multiple issues in a single merge request if they have the same sp * Open a issue for the bug you want to fix / the feature you want to implement * After opening the issue, commit your changes to your branch * Note the issue # in every commit -* Update the documentation (New devs will not have access to this. Please sent an email to docs@ispconfig.org) +* Update the documentation (New devs will not have access to this. Please send a email to docs@ispconfig.org) * Add translations for every language * Use a short title * Write a clear description - for example, when updating the contributing guidelines with issue #6049: \ -- GitLab From 11d53c9a5b8b0596b857d35b3abbbab1bcd1ed7c Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 8 Feb 2021 10:13:08 -0700 Subject: [PATCH 178/403] filter Junk mail based on X-Spam* headers, not Subject --- server/conf/autoresponder.master | 4 ++-- server/conf/sieve_filter.master | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/conf/autoresponder.master b/server/conf/autoresponder.master index 114db23d64..fc5519a0ac 100644 --- a/server/conf/autoresponder.master +++ b/server/conf/autoresponder.master @@ -4,7 +4,7 @@ if ($RETURNCODE==1) { if (!/^List-Unsubscribe:.*/:h ) { - if (!/^(X-Spam-Flag: YES|X-Spam: Yes|Subject: \*\*\*\s*SPAM\s*\*\*\*.*)/:h ) + if (!/^(X-Spam-Flag: YES|X-Spam: Yes)/:h ) { NOW=time if ({start_date} lt $NOW && {end_date} gt $NOW) @@ -20,4 +20,4 @@ if ($RETURNCODE==1) } } } -} \ No newline at end of file +} diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index dd2dfb9647..538e8cf328 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -7,7 +7,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -33,7 +33,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -46,7 +46,7 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", ################################################################# # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { # Stop here so that we do not reply on spams stop; } -- GitLab From 1157b9b249792dd46bc2617a4f25c7f5e183e07a Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 8 Feb 2021 16:59:08 -0700 Subject: [PATCH 179/403] rpsamd: use x-spam-status --- install/tpl/rspamd_milter_headers.conf.master | 12 ++++++++++-- server/conf/autoresponder.master | 2 +- server/conf/sieve_filter.master | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/install/tpl/rspamd_milter_headers.conf.master b/install/tpl/rspamd_milter_headers.conf.master index d399bbf4ec..bd90acd634 100644 --- a/install/tpl/rspamd_milter_headers.conf.master +++ b/install/tpl/rspamd_milter_headers.conf.master @@ -1,2 +1,10 @@ -use = ["x-spamd-bar", "x-spam-level", "authentication-results"]; -authenticated_headers = ["authentication-results"]; \ No newline at end of file +use = ["x-spamd-bar", "x-spam-level", "x-spam-status", "authentication-results"]; +authenticated_headers = ["authentication-results"]; +routines { + remove-headers { + "X-Spam" = 0; + "X-Spamd-Bar" = 0; + "X-Spam-Level" = 0; + "X-Spam-Status" = 0; + } +} diff --git a/server/conf/autoresponder.master b/server/conf/autoresponder.master index fc5519a0ac..8a908f8492 100644 --- a/server/conf/autoresponder.master +++ b/server/conf/autoresponder.master @@ -4,7 +4,7 @@ if ($RETURNCODE==1) { if (!/^List-Unsubscribe:.*/:h ) { - if (!/^(X-Spam-Flag: YES|X-Spam: Yes)/:h ) + if (!/^(X-Spam-Flag: YES|X-Spam: Yes|X-Spam-Status: Yes)/:h ) { NOW=time if ({start_date} lt $NOW && {end_date} gt $NOW) diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index 538e8cf328..16a39ec180 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -7,7 +7,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -33,7 +33,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -46,7 +46,7 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") ################################################################# # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains "X-Spam" "Yes") { +if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { # Stop here so that we do not reply on spams stop; } -- GitLab From 4ed15cf925c93c68c97fed57d65fdebdc23b97e6 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sat, 13 Feb 2021 00:17:23 +0100 Subject: [PATCH 180/403] Improve warning message (#6056) --- interface/web/admin/lib/lang/ar_users_list.lng | 2 +- interface/web/admin/lib/lang/ca_users_list.lng | 2 +- interface/web/admin/lib/lang/en_users_list.lng | 4 ++-- interface/web/admin/lib/lang/ja_users_list.lng | 2 +- interface/web/admin/lib/lang/ro_users_list.lng | 2 +- interface/web/admin/lib/lang/sk_users_list.lng | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/web/admin/lib/lang/ar_users_list.lng b/interface/web/admin/lib/lang/ar_users_list.lng index 4f7a7469b0..fc3f4f6647 100644 --- a/interface/web/admin/lib/lang/ar_users_list.lng +++ b/interface/web/admin/lib/lang/ar_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Username'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/ca_users_list.lng b/interface/web/admin/lib/lang/ca_users_list.lng index dec5cc2c04..feb56b7f4a 100644 --- a/interface/web/admin/lib/lang/ca_users_list.lng +++ b/interface/web/admin/lib/lang/ca_users_list.lng @@ -5,5 +5,5 @@ $wb['client_id_txt'] = 'User ID'; $wb['active_txt'] = 'Active'; $wb['groups_txt'] = 'Groups'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; ?> diff --git a/interface/web/admin/lib/lang/en_users_list.lng b/interface/web/admin/lib/lang/en_users_list.lng index cc978c78d0..feb56b7f4a 100644 --- a/interface/web/admin/lib/lang/en_users_list.lng +++ b/interface/web/admin/lib/lang/en_users_list.lng @@ -5,5 +5,5 @@ $wb['client_id_txt'] = 'User ID'; $wb['active_txt'] = 'Active'; $wb['groups_txt'] = 'Groups'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; -?> \ No newline at end of file +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +?> diff --git a/interface/web/admin/lib/lang/ja_users_list.lng b/interface/web/admin/lib/lang/ja_users_list.lng index 21b07be3c5..ebc24c9518 100644 --- a/interface/web/admin/lib/lang/ja_users_list.lng +++ b/interface/web/admin/lib/lang/ja_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'ユーザー名'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'ユーザーを追加する'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/ro_users_list.lng b/interface/web/admin/lib/lang/ro_users_list.lng index c928d6b86f..d46bb3c6f7 100644 --- a/interface/web/admin/lib/lang/ro_users_list.lng +++ b/interface/web/admin/lib/lang/ro_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Username'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Add user nou'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/sk_users_list.lng b/interface/web/admin/lib/lang/sk_users_list.lng index c393f19992..2256b8744c 100644 --- a/interface/web/admin/lib/lang/sk_users_list.lng +++ b/interface/web/admin/lib/lang/sk_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Užívateľské meno'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Pridať nového užívateľa'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any user settings here. Use the Client- and Reseller settings in the Client module instead. Modifying or changing users or groups here may cause data loss!'; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; $wb['groups_txt'] = 'Groups'; ?> -- GitLab From d6bd0e6bdd5f486bc34a9fea059d3c54a0ab28c1 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sat, 13 Feb 2021 00:26:09 +0100 Subject: [PATCH 181/403] Improve warning message (#6056) --- interface/web/admin/lib/lang/ar_users_list.lng | 2 +- interface/web/admin/lib/lang/ca_users_list.lng | 2 +- interface/web/admin/lib/lang/en_users_list.lng | 2 +- interface/web/admin/lib/lang/ja_users_list.lng | 2 +- interface/web/admin/lib/lang/ro_users_list.lng | 2 +- interface/web/admin/lib/lang/sk_users_list.lng | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/web/admin/lib/lang/ar_users_list.lng b/interface/web/admin/lib/lang/ar_users_list.lng index fc3f4f6647..84869c0626 100644 --- a/interface/web/admin/lib/lang/ar_users_list.lng +++ b/interface/web/admin/lib/lang/ar_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Username'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/ca_users_list.lng b/interface/web/admin/lib/lang/ca_users_list.lng index feb56b7f4a..fb1c7bc6dd 100644 --- a/interface/web/admin/lib/lang/ca_users_list.lng +++ b/interface/web/admin/lib/lang/ca_users_list.lng @@ -5,5 +5,5 @@ $wb['client_id_txt'] = 'User ID'; $wb['active_txt'] = 'Active'; $wb['groups_txt'] = 'Groups'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; ?> diff --git a/interface/web/admin/lib/lang/en_users_list.lng b/interface/web/admin/lib/lang/en_users_list.lng index feb56b7f4a..fb1c7bc6dd 100644 --- a/interface/web/admin/lib/lang/en_users_list.lng +++ b/interface/web/admin/lib/lang/en_users_list.lng @@ -5,5 +5,5 @@ $wb['client_id_txt'] = 'User ID'; $wb['active_txt'] = 'Active'; $wb['groups_txt'] = 'Groups'; $wb['add_new_record_txt'] = 'Add new user'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; ?> diff --git a/interface/web/admin/lib/lang/ja_users_list.lng b/interface/web/admin/lib/lang/ja_users_list.lng index ebc24c9518..8896b8ccbd 100644 --- a/interface/web/admin/lib/lang/ja_users_list.lng +++ b/interface/web/admin/lib/lang/ja_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'ユーザー名'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'ユーザーを追加する'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/ro_users_list.lng b/interface/web/admin/lib/lang/ro_users_list.lng index d46bb3c6f7..a69fd3dccf 100644 --- a/interface/web/admin/lib/lang/ro_users_list.lng +++ b/interface/web/admin/lib/lang/ro_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Username'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Add user nou'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/sk_users_list.lng b/interface/web/admin/lib/lang/sk_users_list.lng index 2256b8744c..49746bddaf 100644 --- a/interface/web/admin/lib/lang/sk_users_list.lng +++ b/interface/web/admin/lib/lang/sk_users_list.lng @@ -4,6 +4,6 @@ $wb['username_txt'] = 'Užívateľské meno'; $wb['client_id_txt'] = 'Client ID'; $wb['active_txt'] = 'Active'; $wb['add_new_record_txt'] = 'Pridať nového užívateľa'; -$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!' \n Use this page only to create a new admin user, or to modify an existing admin user.; +$wb['warning_txt'] = 'WARNING: Do not edit or modify any client user settings here. Use the client- and reseller settings in the client module instead. Modifying or changing client users or groups here may cause data loss!'; $wb['groups_txt'] = 'Groups'; ?> -- GitLab From ab256189ee0accdbcb17b030f5bfb9eceb60818d Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Mon, 15 Feb 2021 12:24:29 +0100 Subject: [PATCH 182/403] Fixes https://git.ispconfig.org/ispconfig/ispconfig3/-/issues/6052 Skip possible IO extensive operations for vhostalias creation on "web" document root --- server/plugins-available/nginx_plugin.inc.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index bec59fddc4..1c0032b500 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -819,7 +819,11 @@ class nginx_plugin { } } } - $app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/'); + // Set the a+r mod to the web_folder. + // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup + if ($data['new']['type'] != 'vhostalias' || $web_folder != "web") { + $app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/'); + } //** Copy the error documents on update when the error document checkbox has been activated and was deactivated before } elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) { @@ -874,7 +878,10 @@ class nginx_plugin { if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) { // Chown and chmod the directories below the document root - $app->system->exec_safe('chown -R ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder); + // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup + if ($data['new']['type'] != 'vhostalias' || $web_folder != "web") { + $app->system->exec_safe( 'chown -R ?:? ?', $username, $groupname, $data['new']['document_root'] . '/' . $web_folder ); + } // The document root itself has to be owned by root in normal level and by the web owner in security level 20 if($web_config['security_level'] == 20) { $app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder); -- GitLab From 9f4a5807b3a15d9fdb6a0aa7e3bf25458ef15fbc Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Mon, 15 Feb 2021 12:26:14 +0100 Subject: [PATCH 183/403] Codestyle fixes --- server/plugins-available/nginx_plugin.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 1c0032b500..c4073fa3f5 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -821,7 +821,7 @@ class nginx_plugin { } // Set the a+r mod to the web_folder. // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup - if ($data['new']['type'] != 'vhostalias' || $web_folder != "web") { + if ($data['new']['type'] != 'vhostalias' || $web_folder != 'web') { $app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/'); } @@ -879,7 +879,7 @@ class nginx_plugin { if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) { // Chown and chmod the directories below the document root // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup - if ($data['new']['type'] != 'vhostalias' || $web_folder != "web") { + if ($data['new']['type'] != 'vhostalias' || $web_folder != 'web') { $app->system->exec_safe( 'chown -R ?:? ?', $username, $groupname, $data['new']['document_root'] . '/' . $web_folder ); } // The document root itself has to be owned by root in normal level and by the web owner in security level 20 -- GitLab From a7f17fc095a56fe21ec5881da248e4f9f6bcd771 Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Mon, 15 Feb 2021 16:13:50 +0100 Subject: [PATCH 184/403] Add --cert-name option to certbot calls to set primary domain instead of --expand Fixes https://git.ispconfig.org/ispconfig/ispconfig3/-/issues/6061 --- server/lib/classes/letsencrypt.inc.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index a2e6a5c380..2f2ac25483 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -137,6 +137,7 @@ class letsencrypt { return false; } + $primary_domain = $domains[0]; $matches = array(); $ret = null; $val = 0; @@ -158,11 +159,13 @@ class letsencrypt { $webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme'; } $webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map))); + $cert_selection_command = "--cert-name $primary_domain"; } else { $webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme"; + $cert_selection_command = "--expand"; } - $cmd = $letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$domain $webroot_args"; + $cmd = $letsencrypt . " certonly -n --text --agree-tos $cert_selection_command --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$primary_domain $webroot_args"; return $cmd; } -- GitLab From 7e72c8488f3425dbbc43f8e7977251d8ac32aab6 Mon Sep 17 00:00:00 2001 From: Thom Date: Thu, 18 Feb 2021 16:46:51 +0100 Subject: [PATCH 185/403] Use correct folder for symlink check (Fixes #4992) --- server/plugins-available/apps_vhost_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php index b64adfde6e..3916e14822 100644 --- a/server/plugins-available/apps_vhost_plugin.inc.php +++ b/server/plugins-available/apps_vhost_plugin.inc.php @@ -253,7 +253,7 @@ class apps_vhost_plugin { file_put_contents("$vhost_conf_dir/apps.vhost", $content); // enabled / disable apps-vhost - $vhost_symlink = $web_config['vhost_conf_enabled_dir'].'/000-apps.vhost'; + $vhost_symlink = $vhost_conf_enabled_dir . '/000-apps.vhost'; if(is_link($vhost_symlink) && $web_config['apps_vhost_enabled'] == 'n') { $app->system->unlink($vhost_symlink); } -- GitLab From 8127d07bfacd0e158a71d3601a985eb8e65759d7 Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Thu, 18 Feb 2021 17:19:59 +0100 Subject: [PATCH 186/403] Add comment to why --cert-name is added to 0.30 check --- server/lib/classes/letsencrypt.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 2f2ac25483..c902b2657f 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -152,13 +152,15 @@ class letsencrypt { $acme_version = 'https://acme-v01.api.letsencrypt.org/directory'; } if (version_compare($letsencrypt_version, '0.30', '>=')) { - $app->log("LE version is " . $letsencrypt_version . ", so using certificates command", LOGLEVEL_DEBUG); + $app->log("LE version is " . $letsencrypt_version . ", so using certificates command and --cert-name instead of --expand", LOGLEVEL_DEBUG); $this->certbot_use_certcommand = true; $webroot_map = array(); for($i = 0; $i < count($domains); $i++) { $webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme'; } $webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map))); + // --cert-name might be working with earlier versions of certbot, but there is no safe version since when + // Sot for safety reasons we add it to the 0.30 version check as it is documented to work as expected in this version $cert_selection_command = "--cert-name $primary_domain"; } else { $webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme"; -- GitLab From 21db72aa01bbc390ff568f0f7d6d42d5e9ace9b3 Mon Sep 17 00:00:00 2001 From: Thom Date: Thu, 18 Feb 2021 17:20:33 +0100 Subject: [PATCH 187/403] Enable http/2 for the panel and Apps vhost. --- install/tpl/nginx_apps.vhost.master | 4 ++-- install/tpl/nginx_ispconfig.vhost.master | 4 ++-- server/conf/nginx_apps.vhost.master | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index b91d1a16c5..e457c65128 100644 --- a/install/tpl/nginx_apps.vhost.master +++ b/install/tpl/nginx_apps.vhost.master @@ -1,6 +1,6 @@ server { - listen {apps_vhost_ip}{apps_vhost_port} {ssl_on}; - listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on; + listen {apps_vhost_ip}{apps_vhost_port} {ssl_on} http2; + listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on http2; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master index dbe44d7064..e1c39ee98b 100644 --- a/install/tpl/nginx_ispconfig.vhost.master +++ b/install/tpl/nginx_ispconfig.vhost.master @@ -1,6 +1,6 @@ server { - listen {vhost_port} {ssl_on}; - listen [::]:{vhost_port} {ssl_on} ipv6only=on; + listen {vhost_port} {ssl_on} http2; + listen [::]:{vhost_port} {ssl_on} ipv6only=on http2; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index b91d1a16c5..e457c65128 100644 --- a/server/conf/nginx_apps.vhost.master +++ b/server/conf/nginx_apps.vhost.master @@ -1,6 +1,6 @@ server { - listen {apps_vhost_ip}{apps_vhost_port} {ssl_on}; - listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on; + listen {apps_vhost_ip}{apps_vhost_port} {ssl_on} http2; + listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on http2; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; -- GitLab From f71eaa6d0143409acc285c4b1fb58226cd160b43 Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Thu, 18 Feb 2021 17:23:13 +0100 Subject: [PATCH 188/403] Typo fix --- server/lib/classes/letsencrypt.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index c902b2657f..559ba79689 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -159,8 +159,8 @@ class letsencrypt { $webroot_map[$domains[$i]] = '/usr/local/ispconfig/interface/acme'; } $webroot_args = "--webroot-map " . escapeshellarg(str_replace(array("\r", "\n"), '', json_encode($webroot_map))); - // --cert-name might be working with earlier versions of certbot, but there is no safe version since when - // Sot for safety reasons we add it to the 0.30 version check as it is documented to work as expected in this version + // --cert-name might be working with earlier versions of certbot, but there is no exact version documented + // So for safety reasons we add it to the 0.30 version check as it is documented to work as expected in this version $cert_selection_command = "--cert-name $primary_domain"; } else { $webroot_args = "$cmd --webroot-path /usr/local/ispconfig/interface/acme"; -- GitLab From 7889e5d07eba36cf169a4c371bb8c21ccb02d851 Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 20 Feb 2021 18:50:31 +0100 Subject: [PATCH 189/403] Enable SSL if a cert is present for the Apps vhost when installing/updating (#6007) --- install/lib/installer_base.lib.php | 11 ++++++++++- install/tpl/nginx_apps.vhost.master | 2 +- server/conf/nginx_apps.vhost.master | 2 +- server/plugins-available/apps_vhost_plugin.inc.php | 10 ++++------ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 1666b4c40d..cb253947e2 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2553,7 +2553,7 @@ class installer_base { $tpl->setVar('apps_vhost_dir',$conf['web']['website_basedir'].'/apps'); $tpl->setVar('apps_vhost_basedir',$conf['web']['website_basedir']); $tpl->setVar('apps_vhost_servername',$apps_vhost_servername); - if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) { + if(is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.crt') && is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.key')) { $tpl->setVar('ssl_comment',''); } else { $tpl->setVar('ssl_comment','#'); @@ -2636,6 +2636,15 @@ class installer_base { // Dont just copy over the virtualhost template but add some custom settings $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_apps.vhost.master', 'tpl/nginx_apps.vhost.master'); + // Enable SSL if a cert is in place. + if(is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) { + $content = str_replace('{ssl_on}', 'ssl', $content); + $content = str_replace('{ssl_comment}', '', $content); + } else { + $content = str_replace('{ssl_on}', '', $content); + $content = str_replace('{ssl_comment}', '#', $content); + } + if($conf['web']['apps_vhost_ip'] == '_default_'){ $apps_vhost_ip = ''; } else { diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index b91d1a16c5..181f4c807e 100644 --- a/install/tpl/nginx_apps.vhost.master +++ b/install/tpl/nginx_apps.vhost.master @@ -7,7 +7,7 @@ server { {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key; # redirect to https if accessed with http - {ssl_comment}error_page 497 https://$host:{vhost_port}$request_uri; + {ssl_comment}error_page 497 https://$host:{apps_vhost_port}$request_uri; server_name {apps_vhost_servername}; diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index b91d1a16c5..181f4c807e 100644 --- a/server/conf/nginx_apps.vhost.master +++ b/server/conf/nginx_apps.vhost.master @@ -7,7 +7,7 @@ server { {ssl_comment}ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key; # redirect to https if accessed with http - {ssl_comment}error_page 497 https://$host:{vhost_port}$request_uri; + {ssl_comment}error_page 497 https://$host:{apps_vhost_port}$request_uri; server_name {apps_vhost_servername}; diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php index b64adfde6e..2195b607cd 100644 --- a/server/plugins-available/apps_vhost_plugin.inc.php +++ b/server/plugins-available/apps_vhost_plugin.inc.php @@ -206,16 +206,14 @@ class apps_vhost_plugin { $use_socket = '#'; } - /* Check if SSL should be enabled: */ - if(is_file('/usr/local/ispconfig/interface/ssl/ispserver.crt') && is_file('/usr/local/ispconfig/interface/ssl/ispserver.key')) { + /* Check if SSL should be enabled: */ + if(is_file('/usr/local/ispconfig/interface/ssl/ispserver.crt') && is_file('/usr/local/ispconfig/interface/ssl/ispserver.key')) { $content = str_replace('{ssl_comment}', '', $content); $content = str_replace('{ssl_on}', 'ssl', $content); - $content = str_replace('{vhost_port}', $web_config['apps_vhost_port'], $content); - } else { + } else { $content = str_replace('{ssl_comment}', '#', $content); $content = preg_replace('/(\s)\{ssl_on\}/', '', $content); - $content = str_replace('{vhost_port}', $web_config['apps_vhost_port'], $content); - } + } $content = str_replace('{use_tcp}', $use_tcp, $content); $content = str_replace('{use_socket}', $use_socket, $content); -- GitLab From b74093a0278511e7aab14cb0860b43991a72f9e0 Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 20 Feb 2021 19:27:15 +0100 Subject: [PATCH 190/403] Don't disable SSL for Apps vhost (nginx) by default (#6017) --- install/lib/installer_base.lib.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index cb253947e2..956782543b 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2687,10 +2687,6 @@ class installer_base { $content = str_replace('{use_tcp}', $use_tcp, $content); $content = str_replace('{use_socket}', $use_socket, $content); - // SSL in apps vhost is off by default. Might change later. - $content = str_replace('{ssl_on}', '', $content); - $content = str_replace('{ssl_comment}', '#', $content); - // Fix socket path on PHP 7 systems if(file_exists('/var/run/php/php7.0-fpm.sock')) $content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.0-fpm.sock', $content); if(file_exists('/var/run/php/php7.1-fpm.sock')) $content = str_replace('/var/run/php5-fpm.sock', '/var/run/php/php7.1-fpm.sock', $content); -- GitLab From 08bd30a238bc3f25627aa48e17e38b1c2793063c Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 20 Feb 2021 19:29:33 +0100 Subject: [PATCH 191/403] Replace incorrect variable (#6017) --- 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 956782543b..3a0f87af1e 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2637,7 +2637,7 @@ class installer_base { $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_apps.vhost.master', 'tpl/nginx_apps.vhost.master'); // Enable SSL if a cert is in place. - if(is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) { + if(is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.crt') && is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.key')) { $content = str_replace('{ssl_on}', 'ssl', $content); $content = str_replace('{ssl_comment}', '', $content); } else { -- GitLab From 8f612a9244b344772b27a34f3c0b0e524df3efc4 Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Sat, 27 Feb 2021 11:33:03 +0100 Subject: [PATCH 192/403] interface/web/mailuser/index.php --- interface/web/mailuser/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mailuser/index.php b/interface/web/mailuser/index.php index 77f5c207aa..a6e2ae2389 100644 --- a/interface/web/mailuser/index.php +++ b/interface/web/mailuser/index.php @@ -5,7 +5,7 @@ require_once '../../lib/app.inc.php'; //* Check permissions for module $app->auth->check_module_permissions('mailuser'); -$app->uses('tpl, functions'); +$app->uses('tpl'); $app->tpl->newTemplate('form.tpl.htm'); $app->tpl->setInclude('content_tpl', 'templates/index.htm'); -- GitLab From bd66023353ab60a8e1fb14bfafb0d7388756885e Mon Sep 17 00:00:00 2001 From: Florian Schaal Date: Sun, 28 Feb 2021 06:27:27 +0100 Subject: [PATCH 193/403] remoce strtolower from rspamd_url --- interface/web/admin/form/server_config.tform.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 13ab70af3a..1818b2ef3b 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -723,8 +723,7 @@ $form["tabs"]['mail'] = array( 'default' => '', 'filters' => array( 0 => array( 'event' => 'SAVE', 'type' => 'IDNTOASCII'), - 1 => array( 'event' => 'SHOW', 'type' => 'IDNTOUTF8'), - 2 => array( 'event' => 'SAVE', 'type' => 'TOLOWER') + 1 => array( 'event' => 'SHOW', 'type' => 'IDNTOUTF8') ), 'value' => '', 'width' => '40', -- GitLab From 783ebe6f4ecd6e822d29972516425bd5a89d56c0 Mon Sep 17 00:00:00 2001 From: Jan Thiel Date: Mon, 1 Mar 2021 09:16:06 +0100 Subject: [PATCH 194/403] Exclude the io expensive calls on vhostsubdomain as well. --- server/plugins-available/nginx_plugin.inc.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index c4073fa3f5..92d8bac7f9 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -820,8 +820,8 @@ class nginx_plugin { } } // Set the a+r mod to the web_folder. - // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup - if ($data['new']['type'] != 'vhostalias' || $web_folder != 'web') { + // Skip this for types where the target vhost already exists if the web_folder is "web". In this case, everything is setup already from the vhost setup + if ( ( $data['new']['type'] != 'vhostalias' && $data['new']['type'] != 'vhostsubdomain' ) || $web_folder != 'web') { $app->system->exec_safe('chmod -R a+r ?', $data['new']['document_root'].'/' . $web_folder . '/'); } @@ -878,8 +878,8 @@ class nginx_plugin { if($this->action == 'insert' || $data["new"]["system_user"] != $data["old"]["system_user"]) { // Chown and chmod the directories below the document root - // Skip this for vhostalias if the web_folder is "web". In this case, everything is setup already from the vhost setup - if ($data['new']['type'] != 'vhostalias' || $web_folder != 'web') { + // Skip this for types where the target vhost already exists if the web_folder is "web". In this case, everything is setup already from the vhost setup + if ( ( $data['new']['type'] != 'vhostalias' && $data['new']['type'] != 'vhostsubdomain' ) || $web_folder != 'web') { $app->system->exec_safe( 'chown -R ?:? ?', $username, $groupname, $data['new']['document_root'] . '/' . $web_folder ); } // The document root itself has to be owned by root in normal level and by the web owner in security level 20 -- GitLab From 561740d7be363ef2df31e1d1d904ea9516b438a6 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 3 Mar 2021 09:22:22 +0100 Subject: [PATCH 195/403] Fix query, dns_rr.name does not hold an fqdn --- interface/web/dns/dns_dmarc_edit.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/web/dns/dns_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php index b2d07b0a9e..c49b60fc78 100644 --- a/interface/web/dns/dns_dmarc_edit.php +++ b/interface/web/dns/dns_dmarc_edit.php @@ -226,8 +226,10 @@ class page_action extends tform_actions { $domain_name = rtrim($soa['origin'], '.'); // DMARC requieres at least one active dkim-record... - $sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND data like 'v=DKIM1;%' AND active='Y'"; - $temp = $app->db->queryAllRecords($sql, '%._domainkey.'.$domain_name.'.'); + $sql = "SELECT * FROM dns_rr + LEFT JOIN dns_soa ON (dns_rr.zone=dns_soa.id) + WHERE dns_rr.name LIKE ? AND dns_soa.origin = ? AND type='TXT' AND data like 'v=DKIM1;%' AND dns_rr.active='Y'"; + $temp = $app->db->queryAllRecords($sql, '%._domainkey', $soa['origin']); if (empty($temp)) { if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '
' . $app->tform->errorMessage; $app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_dkim_txt'].$email; -- GitLab From ed1a4e4e53ab552b4a4e36c95f8225d05642d7ba Mon Sep 17 00:00:00 2001 From: Timo Boldt Date: Wed, 3 Mar 2021 14:30:54 +0100 Subject: [PATCH 196/403] fixes #6084 --- interface/lib/app.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php index 631bd430da..d609835f54 100755 --- a/interface/lib/app.inc.php +++ b/interface/lib/app.inc.php @@ -86,6 +86,8 @@ class app { } public function initialize_session() { + global $conf; + //* Start the session if($this->_conf['start_session'] == true) { session_name('ISPCSESS'); -- GitLab From c2b34ee6623596e7c1e1c34802b9306a67cf6d23 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 11 Feb 2021 09:04:51 -0700 Subject: [PATCH 197/403] rspamd: strip X-Spam-Flag header --- install/tpl/rspamd_milter_headers.conf.master | 1 + 1 file changed, 1 insertion(+) diff --git a/install/tpl/rspamd_milter_headers.conf.master b/install/tpl/rspamd_milter_headers.conf.master index bd90acd634..0205160c25 100644 --- a/install/tpl/rspamd_milter_headers.conf.master +++ b/install/tpl/rspamd_milter_headers.conf.master @@ -6,5 +6,6 @@ routines { "X-Spamd-Bar" = 0; "X-Spam-Level" = 0; "X-Spam-Status" = 0; + "X-Spam-Flag" = 0; } } -- GitLab From 6502a5ba3ae5a7ad79c5576a9d83265598b9b732 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 11 Feb 2021 16:43:35 -0700 Subject: [PATCH 198/403] WIP: rspamd whitelisting and rule priorities --- install/lib/installer_base.lib.php | 120 +++++++----------- install/tpl/dkim_whitelist.inc.master | 5 + install/tpl/dmarc_whitelist.inc.master | 9 ++ ...ter => rspamd_antivirus_group.conf.master} | 0 ...nf.master => rspamd_rbl_group.conf.master} | 0 ....master => rspamd_surbl_group.conf.master} | 0 install/tpl/rspamd_users.inc.conf.master | 1 - install/tpl/rspamd_whitelist.conf.master | 38 ++++++ install/tpl/spf_dkim_whitelist.inc.master | 8 ++ install/tpl/spf_whitelist.inc.master | 6 + server/conf/rspamd_users.conf.master | 25 +--- 11 files changed, 117 insertions(+), 95 deletions(-) create mode 100644 install/tpl/dkim_whitelist.inc.master create mode 100644 install/tpl/dmarc_whitelist.inc.master rename install/tpl/{rspamd_symbols_antivirus.conf.master => rspamd_antivirus_group.conf.master} (100%) rename install/tpl/{rspamd_override_rbl.conf.master => rspamd_rbl_group.conf.master} (100%) rename install/tpl/{rspamd_override_surbl.conf.master => rspamd_surbl_group.conf.master} (100%) delete mode 120000 install/tpl/rspamd_users.inc.conf.master create mode 100644 install/tpl/rspamd_whitelist.conf.master create mode 100644 install/tpl/spf_dkim_whitelist.inc.master create mode 100644 install/tpl/spf_whitelist.inc.master diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 95c6cb87ef..94116e32f8 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1802,6 +1802,10 @@ class installer_base { mkdir('/etc/rspamd/local.d/', 0755, true); } + if(!is_dir('/etc/rspamd/local.d/maps.d/')){ + mkdir('/etc/rspamd/local.d/maps.d/', 0755, true); + } + if(!is_dir('/etc/rspamd/override.d/')){ mkdir('/etc/rspamd/override.d/', 0755, true); } @@ -1833,82 +1837,51 @@ class installer_base { $tpl->setLoop('whitelist_ips', $whitelist_ips); wf('/etc/rspamd/local.d/users.conf', $tpl->grab()); - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf'); - } else { - exec('cp tpl/rspamd_groups.conf.master /etc/rspamd/local.d/groups.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf'); - } else { - exec('cp tpl/rspamd_antivirus.conf.master /etc/rspamd/local.d/antivirus.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf'); - } else { - exec('cp tpl/rspamd_classifier-bayes.conf.master /etc/rspamd/local.d/classifier-bayes.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf'); - } else { - exec('cp tpl/rspamd_greylist.conf.master /etc/rspamd/local.d/greylist.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf'); - } else { - exec('cp tpl/rspamd_symbols_antivirus.conf.master /etc/rspamd/local.d/antivirus_group.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf'); - } else { - exec('cp tpl/rspamd_override_rbl.conf.master /etc/rspamd/override.d/rbl_group.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf'); - } else { - exec('cp tpl/rspamd_override_surbl.conf.master /etc/rspamd/override.d/surbl_group.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf'); - } else { - exec('cp tpl/rspamd_mx_check.conf.master /etc/rspamd/local.d/mx_check.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf'); - } else { - exec('cp tpl/rspamd_redis.conf.master /etc/rspamd/local.d/redis.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf'); - } else { - exec('cp tpl/rspamd_milter_headers.conf.master /etc/rspamd/local.d/milter_headers.conf'); - } - - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_options.inc.master /etc/rspamd/local.d/options.inc'); - } else { - exec('cp tpl/rspamd_options.inc.master /etc/rspamd/local.d/options.inc'); + $local_d = array( + 'groups.conf', + 'antivirus.conf', + 'classifier-bayes.conf', + 'greylist.conf', + 'mx_check.conf', + 'redis.conf', + 'milter_headers.conf', + 'options.inc', + 'neural.conf', + 'neural_group.conf', + 'group.conf', + ); + foreach ($local_d as $f) { + if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { + exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/${f}"); + } else { + exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/${f}"); + } } - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf'); - } else { - exec('cp tpl/rspamd_neural.conf.master /etc/rspamd/local.d/neural.conf'); + $override_d = array( + 'rbl_group.conf', + 'surbl_group.conf', + ); + foreach ($override_d as $f) { + if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { + exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/override.d/${f}"); + } else { + exec("cp tpl/rspamd_{f}.master /etc/rspamd/override.d/${f}"); + } } - if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master')) { - exec('cp '.$conf['ispconfig_install_dir'].'/server/conf-custom/install/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf'); - } else { - exec('cp tpl/rspamd_neural_group.conf.master /etc/rspamd/local.d/neural_group.conf'); + $maps_d = array( + 'dkim_whitelist.inc', + 'dmarc_whitelist.inc', + 'spf_dkim_whitelist.inc', + 'spf_whitelist.inc', + ); + foreach ($maps_d as $f) { + if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { + exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/maps.d/"); + } else { + exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/maps.d/"); + } } $tpl = new tpl(); @@ -1916,8 +1889,9 @@ class installer_base { $tpl->setVar('dkim_path', $mail_config['dkim_path']); wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab()); - exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/override.d/*'); + exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/local.d/maps.d/* /etc/rspamd/override.d/*'); + # unneccesary, since this was done above? $command = 'usermod -a -G amavis _rspamd'; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); diff --git a/install/tpl/dkim_whitelist.inc.master b/install/tpl/dkim_whitelist.inc.master new file mode 100644 index 0000000000..e9049c3ea8 --- /dev/null +++ b/install/tpl/dkim_whitelist.inc.master @@ -0,0 +1,5 @@ +# Domain whitelist via valid DKIM policy +# (Prefer to spf_dkim_whitelist for domains that use both SPF and DKIM.) + +ispconfig.org + diff --git a/install/tpl/dmarc_whitelist.inc.master b/install/tpl/dmarc_whitelist.inc.master new file mode 100644 index 0000000000..a8d866467b --- /dev/null +++ b/install/tpl/dmarc_whitelist.inc.master @@ -0,0 +1,9 @@ +# Domain whitelist via valid DMARC policy (aligned SPF and/or aligned DKIM) + +comodo.com +geotrust.com +geotrusteurope.com +howtoforge.com +ispconfig.org +letsencrypt.org + diff --git a/install/tpl/rspamd_symbols_antivirus.conf.master b/install/tpl/rspamd_antivirus_group.conf.master similarity index 100% rename from install/tpl/rspamd_symbols_antivirus.conf.master rename to install/tpl/rspamd_antivirus_group.conf.master diff --git a/install/tpl/rspamd_override_rbl.conf.master b/install/tpl/rspamd_rbl_group.conf.master similarity index 100% rename from install/tpl/rspamd_override_rbl.conf.master rename to install/tpl/rspamd_rbl_group.conf.master diff --git a/install/tpl/rspamd_override_surbl.conf.master b/install/tpl/rspamd_surbl_group.conf.master similarity index 100% rename from install/tpl/rspamd_override_surbl.conf.master rename to install/tpl/rspamd_surbl_group.conf.master diff --git a/install/tpl/rspamd_users.inc.conf.master b/install/tpl/rspamd_users.inc.conf.master deleted file mode 120000 index 30bb52fd8e..0000000000 --- a/install/tpl/rspamd_users.inc.conf.master +++ /dev/null @@ -1 +0,0 @@ -../../server/conf/rspamd_users.inc.conf.master \ No newline at end of file diff --git a/install/tpl/rspamd_whitelist.conf.master b/install/tpl/rspamd_whitelist.conf.master new file mode 100644 index 0000000000..6b4647a948 --- /dev/null +++ b/install/tpl/rspamd_whitelist.conf.master @@ -0,0 +1,38 @@ +rules { + "ISPC_WHITELIST_SPF" = { + valid_spf = true; + domains = [ + "$LOCAL_CONFDIR/local.d/maps.d/spf_whitelist.inc.ispc" + ]; + score = -2.0 + inverse_symbol = "ISPC_BLACKLIST_SPF"; + } + + "ISPC_WHITELIST_DKIM" = { + valid_dkim = true; + domains = [ + "$LOCAL_CONFDIR/local.d/maps.d/dkim_whitelist.inc.ispc" + ]; + score = -2.0; + inverse_symbol = "ISPC_BLACKLIST_DKIM"; + } + + "ISPC_WHITELIST_SPF_DKIM" = { + valid_spf = true; + valid_dkim = true; + domains = [ + "$LOCAL_CONFDIR/local.d/maps.d/spf_dkim_whitelist.inc.ispc" + ]; + score = -4.0; + inverse_symbol = "ISPC_BLACKLIST_SPF_DKIM"; + } + + "ISPC_WHITELIST_DMARC" = { + valid_dmarc = true; + domains = [ + "$LOCAL_CONFDIR/local.d/maps.d/dmarc_whitelist.inc.ispc" + ]; + score = -7.0; + inverse_symbol = "ISPC_BLACKLIST_DMARC"; + } +} diff --git a/install/tpl/spf_dkim_whitelist.inc.master b/install/tpl/spf_dkim_whitelist.inc.master new file mode 100644 index 0000000000..cfb3be3177 --- /dev/null +++ b/install/tpl/spf_dkim_whitelist.inc.master @@ -0,0 +1,8 @@ +# Domain whitelist via valid SPF policy AND valid DKIM policy +# (Prefer to spf_whitelist or dkim_whitelist for domains that use both SPF and DKIM.) + +comodo.com +geotrust.com +geotrusteurope.com +letsencrypt.org + diff --git a/install/tpl/spf_whitelist.inc.master b/install/tpl/spf_whitelist.inc.master new file mode 100644 index 0000000000..8eda01c8d6 --- /dev/null +++ b/install/tpl/spf_whitelist.inc.master @@ -0,0 +1,6 @@ +# Domain whitelist via valid SPF policy +# (Prefer to spf_dkim_whitelist for domains that use both SPF and DKIM.) + +howtoforge.com +ispconfig.org + diff --git a/server/conf/rspamd_users.conf.master b/server/conf/rspamd_users.conf.master index 73d437d6cb..d7ab2d8b50 100644 --- a/server/conf/rspamd_users.conf.master +++ b/server/conf/rspamd_users.conf.master @@ -1,41 +1,24 @@ settings { authenticated { - priority = 10; + priority = 9; authenticated = yes; - #apply "default" { groups_disabled = ["rbl", "spf"]; } apply "default" { - #symbols_enabled = []; symbols_disabled = []; - #groups_enabled = []; - groups_disabled = ["rbl"]; + groups_disabled = ["rbl", "spf"]; } } whitelist { - priority = 10; + priority = 7; rcpt = "postmaster"; rcpt = "hostmaster"; rcpt = "abuse"; want_spam = yes; } whitelist-ip { - priority = 10; + priority = 5; ip = ""; - - want_spam = yes; - } -# whitelist-timmehosting { -# priority = 20; -# from = "@xxx"; -# from = "@xxx"; -# want_spam = yes; -# } - whitelist-ca { - priority = 20; - from = "@comodo.com"; - from = "@geotrust.com"; - from = "@geotrusteurope.com"; want_spam = yes; } .include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf" -- GitLab From b59dc3fa70433e62815835b9fd803cdca4b1f0be Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 17 Feb 2021 14:44:33 -0700 Subject: [PATCH 199/403] WIP: rspamd whitelisting and rule priorities --- install/lib/installer_base.lib.php | 34 ++++++++++++------- ...aster => rspamd_dkim_whitelist.inc.master} | 0 ...ster => rspamd_dmarc_whitelist.inc.master} | 1 - install/tpl/rspamd_options.inc.master | 9 ++++- ...r => rspamd_spf_dkim_whitelist.inc.master} | 3 +- ...master => rspamd_spf_whitelist.inc.master} | 0 install/update.php | 2 ++ server/conf/rspamd_users.conf.master | 11 ++---- 8 files changed, 35 insertions(+), 25 deletions(-) rename install/tpl/{dkim_whitelist.inc.master => rspamd_dkim_whitelist.inc.master} (100%) rename install/tpl/{dmarc_whitelist.inc.master => rspamd_dmarc_whitelist.inc.master} (90%) rename install/tpl/{spf_dkim_whitelist.inc.master => rspamd_spf_dkim_whitelist.inc.master} (64%) rename install/tpl/{spf_whitelist.inc.master => rspamd_spf_whitelist.inc.master} (100%) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 94116e32f8..d1d1ee6019 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1814,6 +1814,7 @@ class installer_base { $mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1); } $dkim_domains = $this->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM ?? WHERE `dkim` = ? ORDER BY `domain` ASC', $conf['mysql']['database'] . '.mail_domain', 'y'); + # should move maps to local.d/maps.d/ ? $fpp = fopen('/etc/rspamd/local.d/dkim_domains.map', 'w'); $fps = fopen('/etc/rspamd/local.d/dkim_selectors.map', 'w'); foreach($dkim_domains as $dkim_domain) { @@ -1824,19 +1825,28 @@ class installer_base { fclose($fps); unset($dkim_domains); + # local.d templates with template tags $tpl = new tpl(); - $tpl->newTemplate('rspamd_users.conf.master'); + $tpl->newTemplate('rspamd_dkim_signing.conf.master'); + $tpl->setVar('dkim_path', $mail_config['dkim_path']); + wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab()); + + $tpl = new tpl(); + $tpl->newTemplate('rspamd_options.inc.master'); - $whitelist_ips = array(); - $ips = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']); +echo "\nDEBUGGING local_addrs LOOP\n\n"; +sleep(1); + $local_addrs = array(); + $ips = $this->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); if(is_array($ips) && !empty($ips)){ foreach($ips as $ip){ - $whitelist_ips[] = array('ip' => $ip['ip_address']); + $local_addrs[] = array('quoted_ip' => "\"".$ip['ip_address']."\",\n"); } } - $tpl->setLoop('whitelist_ips', $whitelist_ips); - wf('/etc/rspamd/local.d/users.conf', $tpl->grab()); + $tpl->setLoop('local_addrs', $local_addrs); + wf('/etc/rspamd/local.d/options.inc', $tpl->grab()); + # local.d templates without template tags $local_d = array( 'groups.conf', 'antivirus.conf', @@ -1845,10 +1855,10 @@ class installer_base { 'mx_check.conf', 'redis.conf', 'milter_headers.conf', - 'options.inc', 'neural.conf', 'neural_group.conf', - 'group.conf', + 'users.conf', + 'groups.conf', ); foreach ($local_d as $f) { if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { @@ -1858,6 +1868,7 @@ class installer_base { } } + # override.d templates without template tags $override_d = array( 'rbl_group.conf', 'surbl_group.conf', @@ -1866,10 +1877,11 @@ class installer_base { if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/override.d/${f}"); } else { - exec("cp tpl/rspamd_{f}.master /etc/rspamd/override.d/${f}"); + exec("cp tpl/rspamd_${f}.master /etc/rspamd/override.d/${f}"); } } + # local.d/maps.d templates without template tags $maps_d = array( 'dkim_whitelist.inc', 'dmarc_whitelist.inc', @@ -1884,10 +1896,6 @@ class installer_base { } } - $tpl = new tpl(); - $tpl->newTemplate('rspamd_dkim_signing.conf.master'); - $tpl->setVar('dkim_path', $mail_config['dkim_path']); - wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab()); exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/local.d/maps.d/* /etc/rspamd/override.d/*'); diff --git a/install/tpl/dkim_whitelist.inc.master b/install/tpl/rspamd_dkim_whitelist.inc.master similarity index 100% rename from install/tpl/dkim_whitelist.inc.master rename to install/tpl/rspamd_dkim_whitelist.inc.master diff --git a/install/tpl/dmarc_whitelist.inc.master b/install/tpl/rspamd_dmarc_whitelist.inc.master similarity index 90% rename from install/tpl/dmarc_whitelist.inc.master rename to install/tpl/rspamd_dmarc_whitelist.inc.master index a8d866467b..498fbc971f 100644 --- a/install/tpl/dmarc_whitelist.inc.master +++ b/install/tpl/rspamd_dmarc_whitelist.inc.master @@ -5,5 +5,4 @@ geotrust.com geotrusteurope.com howtoforge.com ispconfig.org -letsencrypt.org diff --git a/install/tpl/rspamd_options.inc.master b/install/tpl/rspamd_options.inc.master index 69e40365b7..c6a1603c20 100644 --- a/install/tpl/rspamd_options.inc.master +++ b/install/tpl/rspamd_options.inc.master @@ -1,4 +1,11 @@ -local_addrs = "127.0.0.0/8, ::1"; +# Addrs local to this server. +local_addrs = [ + "127.0.0.0/8", + "::1", + ]; + +# This list is generated by ISPConfig, place custom addresses/networks in local_networks.inc. +local_networks = "/etc/rspamd/local.d/local_networks.inc"; dns { nameserver = ["127.0.0.1:53:10"]; diff --git a/install/tpl/spf_dkim_whitelist.inc.master b/install/tpl/rspamd_spf_dkim_whitelist.inc.master similarity index 64% rename from install/tpl/spf_dkim_whitelist.inc.master rename to install/tpl/rspamd_spf_dkim_whitelist.inc.master index cfb3be3177..42d5c8fd85 100644 --- a/install/tpl/spf_dkim_whitelist.inc.master +++ b/install/tpl/rspamd_spf_dkim_whitelist.inc.master @@ -4,5 +4,6 @@ comodo.com geotrust.com geotrusteurope.com -letsencrypt.org +# letsencrypt is in rspamd's default spf_dkim_whitelist, only needed if strict: +#letsencrypt.org both:1.0 diff --git a/install/tpl/spf_whitelist.inc.master b/install/tpl/rspamd_spf_whitelist.inc.master similarity index 100% rename from install/tpl/spf_whitelist.inc.master rename to install/tpl/rspamd_spf_whitelist.inc.master diff --git a/install/update.php b/install/update.php index 46031f77bb..e821eac203 100644 --- a/install/update.php +++ b/install/update.php @@ -254,6 +254,8 @@ prepareDBDump(); //* initialize the database $inst->db = new db(); +$inst->db->setDBData($conf['mysql']["host"], $conf['mysql']["ispconfig_user"], $conf['mysql']["ispconfig_password"], $conf['mysql']["port"]); +$inst->db->setDBName($conf['mysql']['database']); //* initialize the master DB, if we have a multiserver setup if($conf['mysql']['master_slave_setup'] == 'y') { diff --git a/server/conf/rspamd_users.conf.master b/server/conf/rspamd_users.conf.master index d7ab2d8b50..ba16bc8b12 100644 --- a/server/conf/rspamd_users.conf.master +++ b/server/conf/rspamd_users.conf.master @@ -1,6 +1,6 @@ settings { authenticated { - priority = 9; + priority = 10; authenticated = yes; apply "default" { symbols_disabled = []; @@ -8,19 +8,12 @@ settings { } } whitelist { - priority = 7; + priority = 5; rcpt = "postmaster"; rcpt = "hostmaster"; rcpt = "abuse"; want_spam = yes; } - whitelist-ip { - priority = 5; - - ip = ""; - - want_spam = yes; - } .include(try=true; glob=true) "$LOCAL_CONFDIR/local.d/users/*.conf" .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf" } -- GitLab From 282e5ec8f02531cabe908f485742a2910a851bef Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 18 Feb 2021 11:00:03 -0700 Subject: [PATCH 200/403] rspamd: server ips in local_addrs --- install/lib/installer_base.lib.php | 6 ++---- install/tpl/rspamd_options.inc.master | 13 +------------ install/tpl/rspamd_users.conf.master | 1 - server/conf/rspamd_options.inc.master | 12 ++++++++++++ server/plugins-available/rspamd_plugin.inc.php | 12 ++++++------ 5 files changed, 21 insertions(+), 23 deletions(-) mode change 100644 => 120000 install/tpl/rspamd_options.inc.master delete mode 120000 install/tpl/rspamd_users.conf.master create mode 100644 server/conf/rspamd_options.inc.master diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index d1d1ee6019..c3aadefa83 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1834,8 +1834,6 @@ class installer_base { $tpl = new tpl(); $tpl->newTemplate('rspamd_options.inc.master'); -echo "\nDEBUGGING local_addrs LOOP\n\n"; -sleep(1); $local_addrs = array(); $ips = $this->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); if(is_array($ips) && !empty($ips)){ @@ -1890,9 +1888,9 @@ sleep(1); ); foreach ($maps_d as $f) { if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { - exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/maps.d/"); + exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/maps.d/${f}"); } else { - exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/maps.d/"); + exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/maps.d/${f}"); } } diff --git a/install/tpl/rspamd_options.inc.master b/install/tpl/rspamd_options.inc.master deleted file mode 100644 index c6a1603c20..0000000000 --- a/install/tpl/rspamd_options.inc.master +++ /dev/null @@ -1,12 +0,0 @@ -# Addrs local to this server. -local_addrs = [ - "127.0.0.0/8", - "::1", - ]; - -# This list is generated by ISPConfig, place custom addresses/networks in local_networks.inc. -local_networks = "/etc/rspamd/local.d/local_networks.inc"; - -dns { - nameserver = ["127.0.0.1:53:10"]; -} diff --git a/install/tpl/rspamd_options.inc.master b/install/tpl/rspamd_options.inc.master new file mode 120000 index 0000000000..7cc72e81b2 --- /dev/null +++ b/install/tpl/rspamd_options.inc.master @@ -0,0 +1 @@ +../../server/conf/rspamd_options.inc.master \ No newline at end of file diff --git a/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master deleted file mode 120000 index 3aa7af3185..0000000000 --- a/install/tpl/rspamd_users.conf.master +++ /dev/null @@ -1 +0,0 @@ -../../server/conf/rspamd_users.conf.master \ No newline at end of file diff --git a/server/conf/rspamd_options.inc.master b/server/conf/rspamd_options.inc.master new file mode 100644 index 0000000000..c6a1603c20 --- /dev/null +++ b/server/conf/rspamd_options.inc.master @@ -0,0 +1,12 @@ +# Addrs local to this server. +local_addrs = [ + "127.0.0.0/8", + "::1", + ]; + +# This list is generated by ISPConfig, place custom addresses/networks in local_networks.inc. +local_networks = "/etc/rspamd/local.d/local_networks.inc"; + +dns { + nameserver = ["127.0.0.1:53:10"]; +} diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index e9a6cdd633..16cc9e598a 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -459,17 +459,17 @@ class rspamd_plugin { if(is_dir('/etc/rspamd')) { $tpl = new tpl(); - $tpl->newTemplate('rspamd_users.conf.master'); + $tpl->newTemplate('rspamd_options.inc.master'); - $whitelist_ips = array(); - $ips = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']); + $local_addrs = array(); + $ips = $app->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); if(is_array($ips) && !empty($ips)){ foreach($ips as $ip){ - $whitelist_ips[] = array('ip' => $ip['ip_address']); + $local_addrs[] = array('quoted_ip' => "\"".$ip['ip_address']."\",\n"); } } - $tpl->setLoop('whitelist_ips', $whitelist_ips); - $app->system->file_put_contents('/etc/rspamd/local.d/users.conf', $tpl->grab()); + $tpl->setLoop('local_addrs', $local_addrs); + $app->system->file_put_contents('/etc/rspamd/local.d/options.inc', $tpl->grab()); if($mail_config['content_filter'] == 'rspamd'){ $app->services->restartServiceDelayed('rspamd', 'reload'); -- GitLab From 8a03bc6b42d24dbe024cbe6cbe80c5d14ae030d0 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 3 Mar 2021 20:22:26 +0100 Subject: [PATCH 201/403] dns_rr.name can be just the first part, or the full fqdn --- interface/web/dns/dns_dmarc_edit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/dns/dns_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php index c49b60fc78..00df3e88c0 100644 --- a/interface/web/dns/dns_dmarc_edit.php +++ b/interface/web/dns/dns_dmarc_edit.php @@ -228,8 +228,8 @@ class page_action extends tform_actions { // DMARC requieres at least one active dkim-record... $sql = "SELECT * FROM dns_rr LEFT JOIN dns_soa ON (dns_rr.zone=dns_soa.id) - WHERE dns_rr.name LIKE ? AND dns_soa.origin = ? AND type='TXT' AND data like 'v=DKIM1;%' AND dns_rr.active='Y'"; - $temp = $app->db->queryAllRecords($sql, '%._domainkey', $soa['origin']); + WHERE dns_soa.origin = ? AND dns_rr.name LIKE ? AND type='TXT' AND data like 'v=DKIM1;%' AND dns_rr.active='Y'"; + $temp = $app->db->queryAllRecords($sql, $soa['origin'], '%._domainkey%'); if (empty($temp)) { if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '
' . $app->tform->errorMessage; $app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_dkim_txt'].$email; -- GitLab From 366b1ad510318fa74e24db76c537a837f54d4846 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 3 Mar 2021 20:22:32 +0100 Subject: [PATCH 202/403] Also relate spf record check to a soa --- interface/web/dns/dns_dmarc_edit.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/web/dns/dns_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php index 00df3e88c0..e194aeb835 100644 --- a/interface/web/dns/dns_dmarc_edit.php +++ b/interface/web/dns/dns_dmarc_edit.php @@ -236,8 +236,10 @@ class page_action extends tform_actions { } // ... and an active spf-record (this breaks the current draft but DMARC is useless if you use DKIM or SPF - $sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND (data LIKE 'v=spf1%' AND active = 'y')"; - $temp = $app->db->queryAllRecords($sql, $domain_name.'.'); + $sql = "SELECT * FROM dns_rr + LEFT JOIN dns_soa ON (dns_rr.zone=dns_soa.id) + WHERE dns_soa.origin = ? AND (dns_rr.name LIKE ? OR dns_rr.name = '') AND type='TXT' AND data like 'v=spf1%' AND dns_rr.active='Y'"; + $temp = $app->db->queryAllRecords($sql, $soa['origin'], $soa['origin']); // abort if more than 1 active spf-records (backward-compatibility) if (is_array($temp[1])) { if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '
' . $app->tform->errorMessage; -- GitLab From 50bf96a8b248311d7e8449bcdf9d2b6fdaa6b44b Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 2 Mar 2021 14:06:04 -0700 Subject: [PATCH 203/403] rspamd: no priority collisions --- server/conf/rspamd_options.inc.master | 4 ++-- server/plugins-available/rspamd_plugin.inc.php | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/server/conf/rspamd_options.inc.master b/server/conf/rspamd_options.inc.master index c6a1603c20..537816c803 100644 --- a/server/conf/rspamd_options.inc.master +++ b/server/conf/rspamd_options.inc.master @@ -1,7 +1,7 @@ # Addrs local to this server. local_addrs = [ - "127.0.0.0/8", - "::1", + "127.0.0.0/8", + "::1", ]; # This list is generated by ISPConfig, place custom addresses/networks in local_networks.inc. diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index 16cc9e598a..09ed09a436 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -224,11 +224,10 @@ class rspamd_plugin { unlink($settings_file); } } else { - $settings_priority = 20; if(isset($data[$use_data]['priority'])) { - $settings_priority = intval($data[$use_data]['priority']); - } elseif($is_domain === true) { - $settings_priority = 18; + $settings_priority = ($is_domain ? 10 : 20) + intval($data[$use_data]['priority']); + } else { + $settings_priority = ($is_domain ? 10 : 20) + 5; } // get policy for entry @@ -405,8 +404,8 @@ class rspamd_plugin { $tpl->newTemplate('rspamd_wblist.inc.conf.master'); $tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter')); $tpl->setVar('record_id', $record_id); - // we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists - $tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20)); + // add 30/40 to priority to avoid collisions and prefer white/blacklists above mailbox/domain spamfilter settings + $tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 30 : 40)); $tpl->setVar('from', $filter_from); $tpl->setVar('recipient', $filter_rcpt); $tpl->setVar('hostname', $filter['hostname']); -- GitLab From 16fbcda5ff79b6db2c219280b4a9e5570550572f Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 3 Mar 2021 17:16:38 -0700 Subject: [PATCH 204/403] rspamd_users.conf.master is an install template --- {server/conf => install/tpl}/rspamd_users.conf.master | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {server/conf => install/tpl}/rspamd_users.conf.master (100%) diff --git a/server/conf/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master similarity index 100% rename from server/conf/rspamd_users.conf.master rename to install/tpl/rspamd_users.conf.master -- GitLab From faa306e6c6705d3b36db7ee26a99dc5b3d663fdf Mon Sep 17 00:00:00 2001 From: Helmo Date: Thu, 4 Mar 2021 19:05:26 +0000 Subject: [PATCH 205/403] Minor md tweaks --- CONTRIBUTING.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5c168d13c8..27377de6e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ Closes #6049" # Some guidelines for web development with php. ----------------------------------------------------- * Don't use features that are not supported in PHP 5.4, for compatibility with LTS OS releases, ISPConfig must support PHP 5.4+ -* Don't use shorttags. A Shorttag is always use always use `uses() or $app->load() functions. @@ -40,7 +40,7 @@ Closes #6049" ### Indentations -Indentations are always done with tabs. Do **not** use spaces. +Indentations are always done with tabs. Do **not** use spaces. It is recommended to set your IDE to display tabs with a width of 4 spaces. ### Variable and method / function names @@ -73,7 +73,7 @@ class my_class { #### Curly braces -Opening curly braces always have to be in the same line as the preceding condition. They are separated by a single space from the closing paranthesis. +Opening curly braces always have to be in the same line as the preceding condition. They are separated by a single space from the closing paranthesis. Closing curly braces are always on a separate line after the last statement in the block. The only exception is a do-while block where the logic is inverted. Curly braces are **always** to be used. Do not leave them out, even if there is only a single statement in the corresponding block. @@ -206,7 +206,7 @@ $var2 = [ ``` **Wrong:** -```php: +```php $var = array(); $var2 = array( @@ -218,7 +218,7 @@ $var2 = array( #### Spaces and newlines -When defining an empty array, both brackets shall be on the same line. When defining an array with values, the style depends on the values you are going to assign. +When defining an empty array, both brackets shall be on the same line. When defining an array with values, the style depends on the values you are going to assign. ##### List of values -- GitLab From cc843666f8fb8a6173cca69177001e8845837591 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 4 Mar 2021 15:13:41 -0700 Subject: [PATCH 206/403] append rather than replace _rspamd supplemental groups --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 95c6cb87ef..7103c28192 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1793,9 +1793,9 @@ class installer_base { } if(is_user('_rspamd') && is_group('amavis')) { - exec("usermod -G amavis _rspamd"); + exec("usermod -a -G amavis _rspamd"); } elseif(is_user('rspamd') && is_group('amavis')) { - exec("usermod -G amavis rspamd"); + exec("usermod -a -G amavis rspamd"); } if(!is_dir('/etc/rspamd/local.d/')){ -- GitLab From 412cee02b24c6dd8ef84eafb40d0d7c0ae4355d3 Mon Sep 17 00:00:00 2001 From: Thom Date: Sun, 7 Mar 2021 13:13:05 +0000 Subject: [PATCH 207/403] Fix proxy re-sets to No redirect (#6086) --- interface/web/sites/templates/web_vhost_domain_redirect.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/sites/templates/web_vhost_domain_redirect.htm b/interface/web/sites/templates/web_vhost_domain_redirect.htm index 597b427a4a..b21f297f20 100644 --- a/interface/web/sites/templates/web_vhost_domain_redirect.htm +++ b/interface/web/sites/templates/web_vhost_domain_redirect.htm @@ -86,7 +86,7 @@ jQuery('#redirect_type option[value="redirect"]').hide(); jQuery('#redirect_type option[value="permanent"]').hide(); //jQuery('#redirect_type option[value="proxy"]').hide(); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L" && selected != "proxy") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); jQuery('.nginx').hide(); } }); -- GitLab From 9da76fd1d886c8c6ae172c73714f2455e54767b4 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 7 Mar 2021 14:36:31 +0100 Subject: [PATCH 208/403] Add global option to disable/enable welcome email messages (#1804) --- install/tpl/system.ini.master | 1 + server/plugins-available/mail_plugin.inc.php | 41 ++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master index bbd78e6b3a..99ca0693f5 100644 --- a/install/tpl/system.ini.master +++ b/install/tpl/system.ini.master @@ -16,6 +16,7 @@ webmail_url=/webmail dkim_path=/var/lib/amavis/dkim smtp_enabled=y smtp_host=localhost +enable_welcome_mail=y [monitor] diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index fb00166021..0d2e52c4fc 100644 --- a/server/plugins-available/mail_plugin.inc.php +++ b/server/plugins-available/mail_plugin.inc.php @@ -136,7 +136,7 @@ class mail_plugin { $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]); - + $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]); @@ -150,26 +150,26 @@ class mail_plugin { $app->log('Created Directory: '.$maildomain_path, LOGLEVEL_DEBUG); $maildomain_path .= '/Maildir'; } - + //* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) { if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->system->exec_safe("su -c ? vmail", "mv -f " . $data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']); $app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN); } - + //* Create the maildir, if it doesn not exist, set permissions, set quota. if(!empty($maildomain_path) && !is_dir($maildomain_path)) { - + $app->system->maildirmake($maildomain_path, $user, '', $group); - + //* This is to fix the maildrop quota not being rebuilt after the quota is changed. if($mail_config['pop3_imap_daemon'] != 'dovecot') { if(is_dir($maildomain_path)) $app->system->exec_safe("su -c ? ?", "maildirmake -q ".$data['new']['quota']."S ".$maildomain_path, $user); // Avoid maildirmake quota bug, see debian bug #214911 $app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".$maildomain_path."' ".$user, LOGLEVEL_DEBUG); } } - + if(!is_dir($data['new']['maildir'].'/.Sent')) { $app->system->maildirmake($maildomain_path, $user, 'Sent', $group); } @@ -182,11 +182,11 @@ class mail_plugin { if(!is_dir($data['new']['maildir'].'/.Junk')) { $app->system->maildirmake($maildomain_path, $user, 'Junk', $group); } - + // Set permissions now recursive $app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']); $app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG); - + //* Set the maildir quota if(is_dir($data['new']['maildir'].'/new') && $mail_config['pop3_imap_daemon'] != 'dovecot') { if($data['new']['quota'] > 0) { @@ -263,9 +263,10 @@ class mail_plugin { $additionalParameters = '-f '.$matches[1]; } - // Send the welcome email only on a "master" mail server to avoid duplicate emails + // Send the welcome email only on a "master" mail server to avoid duplicate emails, and only send them when welcome emails are enabled. // (bypass the normal ispcmail class when creating mail accounts) - if($conf['mirror_server_id'] == 0) mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders, $additionalParameters); + $global_config = $app->getconf->get_global_config('mail'); + if($conf['mirror_server_id'] == 0 && $global_config['enable_welcome_mail'] == 'y') mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders, $additionalParameters); } @@ -278,7 +279,7 @@ class mail_plugin { // Maildir-Format must not be changed on this way !! $data['new']['maildir_format'] = $data['old']['maildir_format']; - + $maildomain_path = $data['new']['maildir']; $tmp_basepath = $data['new']['maildir']; $tmp_basepath_parts = explode('/', $tmp_basepath); @@ -332,7 +333,7 @@ class mail_plugin { $app->system->exec_safe('mv -f ? ?'. $data['old']['maildir'], $data['new']['maildir']); $app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'], LOGLEVEL_DEBUG); } - + //* Create the maildir, if it doesn not exist, set permissions, set quota. if(!is_dir($data['new']['maildir'].'/mdbox')) { $app->system->exec_safe("su -c 'doveadm mailbox create -u ? INBOX'", $data["new"]["email"]); @@ -340,7 +341,7 @@ class mail_plugin { $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Trash'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Junk'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox create -u ? Drafts'", $data["new"]["email"]); - + $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? INBOX'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Sent'", $data["new"]["email"]); $app->system->exec_safe("su -c 'doveadm mailbox subscribe -u ? Trash'", $data["new"]["email"]); @@ -355,18 +356,18 @@ class mail_plugin { $app->log('Created Directory: '.$base_path, LOGLEVEL_DEBUG); $maildomain_path .= '/Maildir'; } - + //* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) { if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->system->exec_safe("su -c ? ?", "mv -f ".$data['new']['maildir']." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 'vmail'); $app->log('Moved invalid maildir to corrupted Maildirs folder: '.$data['new']['maildir'], LOGLEVEL_WARN); } - + //* Create the maildir, if it doesn not exist, set permissions, set quota. if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) { $app->system->maildirmake($maildomain_path, $user, '', $group); - + //* This is to fix the maildrop quota not being rebuilt after the quota is changed. if($mail_config['pop3_imap_daemon'] != 'dovecot') { if($data['new']['quota'] > 0) { @@ -378,7 +379,7 @@ class mail_plugin { } } } - + if(!is_dir($data['new']['maildir'].'/.Sent')) { $app->system->maildirmake($maildomain_path, $user, 'Sent', $group); } @@ -391,11 +392,11 @@ class mail_plugin { if(!is_dir($data['new']['maildir'].'/.Junk')) { $app->system->maildirmake($maildomain_path, $user, 'Junk', $group); } - + // Set permissions now recursive $app->system->exec_safe('chown -R ?:? ?', $user, $group, $data['new']['maildir']); $app->log('Set ownership on '.$data['new']['maildir'], LOGLEVEL_DEBUG); - + // Move mailbox, if domain has changed and delete old mailbox if($data['new']['maildir'] != $data['old']['maildir'] && is_dir($data['old']['maildir'])) { if(is_dir($data['new']['maildir'])) { @@ -487,7 +488,7 @@ class mail_plugin { } else { $app->log('Possible security violation when deleting the mail domain mailfilter directory: '.$old_maildomain_path, LOGLEVEL_ERROR); } - + //* Delete the mail-backups $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); $backup_dir = $server_config['backup_dir']; -- GitLab From 81008bd557dff8fdab53c741a04015f8cbe528e9 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sun, 7 Mar 2021 15:06:17 +0100 Subject: [PATCH 209/403] Add UI option to disable/enable welcome email messages (#1804) --- interface/web/admin/form/system_config.tform.php | 6 ++++++ interface/web/admin/lib/lang/ar_system_config.lng | 1 + interface/web/admin/lib/lang/bg_system_config.lng | 1 + interface/web/admin/lib/lang/br_system_config.lng | 1 + interface/web/admin/lib/lang/ca_system_config.lng | 1 + interface/web/admin/lib/lang/cz_system_config.lng | 1 + interface/web/admin/lib/lang/de_system_config.lng | 1 + interface/web/admin/lib/lang/dk_system_config.lng | 1 + interface/web/admin/lib/lang/el_system_config.lng | 1 + interface/web/admin/lib/lang/en_system_config.lng | 1 + interface/web/admin/lib/lang/es_system_config.lng | 1 + interface/web/admin/lib/lang/fi_system_config.lng | 1 + interface/web/admin/lib/lang/fr_system_config.lng | 1 + interface/web/admin/lib/lang/hr_system_config.lng | 1 + interface/web/admin/lib/lang/hu_system_config.lng | 1 + interface/web/admin/lib/lang/id_system_config.lng | 1 + interface/web/admin/lib/lang/it_system_config.lng | 1 + interface/web/admin/lib/lang/ja_system_config.lng | 1 + interface/web/admin/lib/lang/nl_system_config.lng | 1 + interface/web/admin/lib/lang/pl_system_config.lng | 1 + interface/web/admin/lib/lang/pt_system_config.lng | 1 + interface/web/admin/lib/lang/ro_system_config.lng | 1 + interface/web/admin/lib/lang/ru_system_config.lng | 1 + interface/web/admin/lib/lang/se_system_config.lng | 1 + interface/web/admin/lib/lang/sk_system_config.lng | 1 + interface/web/admin/lib/lang/tr_system_config.lng | 1 + .../web/admin/templates/system_config_mail_edit.htm | 12 +++++++++--- 27 files changed, 40 insertions(+), 3 deletions(-) diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index 88d0fef26c..9b5ac17f15 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -267,6 +267,12 @@ $form["tabs"]['mail'] = array ( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), + 'enable_welcome_mail' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), 'mailbox_show_autoresponder_tab' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng index 7d3df7fbf8..7e0901e600 100644 --- a/interface/web/admin/lib/lang/ar_system_config.lng +++ b/interface/web/admin/lib/lang/ar_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Webdav user prefix'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng index f99465e1b6..161fafd836 100644 --- a/interface/web/admin/lib/lang/bg_system_config.lng +++ b/interface/web/admin/lib/lang/bg_system_config.lng @@ -22,6 +22,7 @@ $wb['webftp_url_txt'] = 'WebFTP URL'; $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)'; $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)'; $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Разреши различни имена за вход'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Мейлинг лист адрес URL'; diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng index 58ffca080b..de491ad969 100644 --- a/interface/web/admin/lib/lang/br_system_config.lng +++ b/interface/web/admin/lib/lang/br_system_config.lng @@ -24,6 +24,7 @@ $wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de $wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário shell.'; $wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo de usuário Webdav.'; $wb['dblist_phpmyadmin_link_txt'] = 'Link para o PHPMyAdmin'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado'; $wb['mailboxlist_webmail_link_txt'] = 'Link para o Webmail'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de email'; diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng index d8bc0e2d48..1a223de73e 100644 --- a/interface/web/admin/lib/lang/ca_system_config.lng +++ b/interface/web/admin/lib/lang/ca_system_config.lng @@ -24,6 +24,7 @@ $wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.'; $wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng index 7db312097c..5ff737c939 100644 --- a/interface/web/admin/lib/lang/cz_system_config.lng +++ b/interface/web/admin/lib/lang/cz_system_config.lng @@ -25,6 +25,7 @@ $wb['new_domain_txt'] = 'HTML vytvořit novou doménu'; $wb['webftp_url_txt'] = 'WebFTP URL'; $wb['admin_mail_txt'] = 'E-mail Administrátora'; $wb['admin_name_txt'] = 'Jméno Administrátora'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Povolit vlastní přihlašovací jméno u e-mailové schránky'; $wb['mailmailinglist_link_txt'] = 'Ikonový odkaz na aplikaci E-mailových konferencí seznamu e-mailových konferencí'; $wb['mailmailinglist_url_txt'] = 'E-mailové konference URL'; diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng index 4a862a2d4a..8c30b71a1a 100644 --- a/interface/web/admin/lib/lang/de_system_config.lng +++ b/interface/web/admin/lib/lang/de_system_config.lng @@ -31,6 +31,7 @@ $wb['use_domain_module_txt'] = 'Domain Limits im Kundenmodul benutzen, um neue D $wb['use_domain_module_hint'] = 'Falls Sie die Domain Limits benutzen, können Ihre Kunden nur eine der Domains auswählen, die der Admin für sie angelegt hat. Die Kunden können das Domain-Feld nicht frei editieren. Sie müssen sich neu einloggen, wenn Sie diesen Wert ändern.'; $wb['new_domain_txt'] = 'HTML Text zum Anlegen einer neuen Domain'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Abweichenden Login Namen erlauben'; $wb['mailmailinglist_link_txt'] = 'Link zur Mailingliste in der Mailinglisten Übersicht'; $wb['mailmailinglist_url_txt'] = 'Mailinglisten URL'; diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng index eb96004421..a179749ba9 100644 --- a/interface/web/admin/lib/lang/dk_system_config.lng +++ b/interface/web/admin/lib/lang/dk_system_config.lng @@ -22,6 +22,7 @@ $wb['ftpuser_prefix_error_regex'] = 'Char ikke tilladt i ftp bruger prefix.'; $wb['shelluser_prefix_error_regex'] = 'Char ikke tilladt i shell bruger prefix.'; $wb['webdavuser_prefix_error_regex'] = 'Char ikke tilladt i webdav bruger prefix.'; $wb['dblist_phpmyadmin_link_txt'] = 'Link til phpmyadmin i DB liste'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Tillad brugerdefinerede login-navn'; $wb['mailboxlist_webmail_link_txt'] = 'Link til webmail i Postboks liste'; $wb['webmail_url_txt'] = 'Webmail URL'; diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng index 68e10e37fc..d7282be3af 100644 --- a/interface/web/admin/lib/lang/el_system_config.lng +++ b/interface/web/admin/lib/lang/el_system_config.lng @@ -23,6 +23,7 @@ $wb['use_domain_module_txt'] = 'Χρήση του αρθρώματος-domain γ $wb['use_domain_module_hint'] = 'Αν χρησιμοποιήσετε αυτό το άρθρωμα, οι πελάτες σας μπορούν μόνο να διαλέξουν ένα από τα domains που δημιούργησε για αυτούς ο διαχειριστής. Δεν μπορούν να επεξεργαστούν ελεύθερα τα πεδία του domain.Πρέπει να επανασυνδεθείτε αν αλλάξετε αυτή την τιμή, για να γίνουν οι αλλαγές σας, ορατές.'; $wb['new_domain_txt'] = 'HTML για την δημιουργία domain'; $wb['webftp_url_txt'] = 'URL του WebFTP'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Αποδοχή προσαρμοσμένου ονόματος login'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'URL της Mailing list '; diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng index 4493913fb0..a8a553e19e 100644 --- a/interface/web/admin/lib/lang/en_system_config.lng +++ b/interface/web/admin/lib/lang/en_system_config.lng @@ -24,6 +24,7 @@ $wb['ftpuser_prefix_error_regex'] = 'Char not allowed in ftp user prefix.'; $wb['shelluser_prefix_error_regex'] = 'Char not allowed in shell user prefix.'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail'; diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng index a001999dd4..6534f22953 100644 --- a/interface/web/admin/lib/lang/es_system_config.lng +++ b/interface/web/admin/lib/lang/es_system_config.lng @@ -29,6 +29,7 @@ $wb['default_dnsserver_txt'] = 'Servidor DNS por defecto'; $wb['default_mailserver_txt'] = 'Servidor de correo por defecto'; $wb['default_slave_dnsserver_txt'] = 'Servidor DNS secundario por defecto'; $wb['default_webserver_txt'] = 'Servidor web por defecto'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Permitir nombre de inicio de sesión personalizado'; $wb['f5_to_reload_js_txt'] = 'Si modifica esto, deberá pulsar F5 para que el explorador cargue las librerías JavaScript o incluso necesitará borrar la caché de su explorador.'; $wb['ftpuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario de FTP.'; diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng index eb7863fd53..6932854a2d 100644 --- a/interface/web/admin/lib/lang/fi_system_config.lng +++ b/interface/web/admin/lib/lang/fi_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Webdav user prefix'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng index cfecf8e27f..2cc6394dc6 100644 --- a/interface/web/admin/lib/lang/fr_system_config.lng +++ b/interface/web/admin/lib/lang/fr_system_config.lng @@ -16,6 +16,7 @@ $wb['ftpuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe d $wb['shelluser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe de l’utilisateur Shell.'; $wb['webdavuser_prefix_error_regex'] = 'Caractère non autorisé dans le préfixe utilisateur WebDAV.'; $wb['dblist_phpmyadmin_link_txt'] = 'Lien vers PHPMyAdmin dans la liste des bases'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Autoriser les noms d’utilisateurs personnalisés'; $wb['mailboxlist_webmail_link_txt'] = 'Lien vers le Webmail dans la liste des boîtes mail'; $wb['webmail_url_txt'] = 'URL du Webmail'; diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng index 3f6486ae53..2c70c62191 100644 --- a/interface/web/admin/lib/lang/hr_system_config.lng +++ b/interface/web/admin/lib/lang/hr_system_config.lng @@ -23,6 +23,7 @@ $wb['webftp_url_txt'] = 'WebFTP URL'; $wb['dashboard_atom_url_admin_txt'] = 'RSS URL za početnu stranicu (admin)'; $wb['dashboard_atom_url_reseller_txt'] = 'RSS URL za početnu stranicu (reseller)'; $wb['dashboard_atom_url_client_txt'] = 'RSS URL za početnu stranicu (client)'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Dozvoli izbor korisničkog imena'; $wb['mailmailinglist_link_txt'] = 'Link na mailing listu u Mailing listi'; $wb['mailmailinglist_url_txt'] = 'URL mailing liste'; diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng index 6b1a29ee46..7187d55d58 100644 --- a/interface/web/admin/lib/lang/hu_system_config.lng +++ b/interface/web/admin/lib/lang/hu_system_config.lng @@ -27,6 +27,7 @@ $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; $wb['admin_mail_txt'] = 'Administrators e-mail'; $wb['admin_name_txt'] = 'Administrators name'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['maintenance_mode_txt'] = 'Maintenance Mode'; $wb['maintenance_mode_exclude_ips_txt'] = 'Exclude IP\'s from maintenance'; diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng index f034f9bd76..b08d5ca60b 100644 --- a/interface/web/admin/lib/lang/id_system_config.lng +++ b/interface/web/admin/lib/lang/id_system_config.lng @@ -23,6 +23,7 @@ $wb['use_domain_module_txt'] = 'Gunakan modul domain untuk menambahkan domain ba $wb['use_domain_module_hint'] = 'Jika Anda menggunakan modul ini, pelanggan Anda hanya dapat memilih salah satu domain yang dibuat oleh admin untuk mereka. Mereka tidak bisa menyunting dengan bebas kolom domain. Anda harus masuk kembali setelah mengubah nilai ini, agar perubahannya terlihat.'; $wb['new_domain_txt'] = 'HTML untuk membuat domain baru'; $wb['webftp_url_txt'] = 'URL WebFTP'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng index 42f878a54d..873ef5838b 100644 --- a/interface/web/admin/lib/lang/it_system_config.lng +++ b/interface/web/admin/lib/lang/it_system_config.lng @@ -23,6 +23,7 @@ $wb['webftp_url_txt'] = 'WebFTP URL'; $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)'; $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)'; $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng index f50ffb5114..cf36675239 100644 --- a/interface/web/admin/lib/lang/ja_system_config.lng +++ b/interface/web/admin/lib/lang/ja_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Webdav user prefix'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng index 4078be986e..b36b12ec4b 100644 --- a/interface/web/admin/lib/lang/nl_system_config.lng +++ b/interface/web/admin/lib/lang/nl_system_config.lng @@ -26,6 +26,7 @@ $wb['use_domain_module_txt'] = 'Gebruik de domein-module om nieuwe domeinen toe $wb['use_domain_module_hint'] = 'Als u deze module gebruikt, kunnen uw klanten alleen de domeinen selecteren die de administrator heeft aangemaakt. klanten kunnen het domein-veld zelf niet wijzigen. Na opnieuw ingelogd te zijn zullen de wijzigingen zichtbaar zijn.'; $wb['new_domain_txt'] = 'HTML om een nieuw domein te maken'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng index c94313bdcb..26adecad6c 100644 --- a/interface/web/admin/lib/lang/pl_system_config.lng +++ b/interface/web/admin/lib/lang/pl_system_config.lng @@ -22,6 +22,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Prefiks użytkownika webdav'; $wb['webdavuser_prefix_error_regex'] = 'Niedozwolony znak w prefiksie użytkownika webdav.'; $wb['webftp_url_txt'] = 'Link do WebFTP'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Zezwalaj na dowolną nazwę loginu'; $wb['mailmailinglist_link_txt'] = 'Link do listy mailingowej na liście list mailingowych'; $wb['mailmailinglist_url_txt'] = 'URL listy mailingowej'; diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng index 39e4dc93f2..6a0fb181d9 100644 --- a/interface/web/admin/lib/lang/pt_system_config.lng +++ b/interface/web/admin/lib/lang/pt_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Webdav user prefix'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng index 2b819a013e..abf206d1af 100644 --- a/interface/web/admin/lib/lang/ro_system_config.lng +++ b/interface/web/admin/lib/lang/ro_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; $wb['webdavuser_prefix_txt'] = 'Webdav user prefix'; $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng index 3aee07ff2e..3f6653ba25 100644 --- a/interface/web/admin/lib/lang/ru_system_config.lng +++ b/interface/web/admin/lib/lang/ru_system_config.lng @@ -23,6 +23,7 @@ $wb['webftp_url_txt'] = 'URL WebFTP'; $wb['dashboard_atom_url_admin_txt'] = 'Dashboard atom feed URL (admin)'; $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (reseller)'; $wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (client)'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Разрешить пользовательское имя входа в систему'; $wb['mailmailinglist_link_txt'] = 'Ссылка на почтовую рассылку в списке рассылок'; $wb['mailmailinglist_url_txt'] = 'URL почтовой рассылки'; diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng index d075f87509..f581c015e7 100644 --- a/interface/web/admin/lib/lang/se_system_config.lng +++ b/interface/web/admin/lib/lang/se_system_config.lng @@ -23,6 +23,7 @@ $wb['dashboard_atom_url_client_txt'] = 'Kontrolpanelens nyhetsflöde URL (kund)' $wb['webdavuser_prefix_txt'] = 'Prefix för WebDAV-användare'; $wb['webdavuser_prefix_error_regex'] = 'Otillåtet tecken i prefix för WebDAV-användare'; $wb['webftp_url_txt'] = 'WebbFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Tillåt valfritt inloggningsnamn'; $wb['mailmailinglist_link_txt'] = 'Länka till epostlista i listan över epostlistor'; $wb['mailmailinglist_url_txt'] = 'Adress till epostlista'; diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng index ef4cc3fef9..b1004aba86 100644 --- a/interface/web/admin/lib/lang/sk_system_config.lng +++ b/interface/web/admin/lib/lang/sk_system_config.lng @@ -23,6 +23,7 @@ $wb['use_domain_module_txt'] = 'Use the domain-module to add new domains'; $wb['use_domain_module_hint'] = 'If you use this module, your customers can only select one of the domains the admin creates for them. They cannot free edit the domain-field.You have to re-login after changing this value, to make the changes visible.'; $wb['new_domain_txt'] = 'HTML to create a new domain'; $wb['webftp_url_txt'] = 'WebFTP URL'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng index 3bb9c82b0a..c801792625 100644 --- a/interface/web/admin/lib/lang/tr_system_config.lng +++ b/interface/web/admin/lib/lang/tr_system_config.lng @@ -24,6 +24,7 @@ $wb['ftpuser_prefix_error_regex'] = 'FTP kullanıcısı ön ekinde izin verilmey $wb['shelluser_prefix_error_regex'] = 'Kabuk kullanıcısı ön ekinde izin verilmeyen karakterler var'; $wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin verilmeyen karakterler var.'; $wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı'; +$wb['enable_welcome_mail_txt'] = 'Enable welcome email'; $wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin'; $wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı'; $wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin'; diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm index af0a7a25ca..4aa7ee3944 100644 --- a/interface/web/admin/templates/system_config_mail_edit.htm +++ b/interface/web/admin/templates/system_config_mail_edit.htm @@ -4,6 +4,12 @@ {tmpl_var name='enable_custom_login'}
+
+ +
+ {tmpl_var name='enable_welcome_mail'} +
+
@@ -77,10 +83,10 @@ {tmpl_var name='default_mailserver'}
- - + + - +
-- GitLab From 89bc625afe40185b211af2245e35c7f1f0466eb0 Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Sun, 7 Mar 2021 17:34:57 +0000 Subject: [PATCH 210/403] Update ajax_get_ip.php --- interface/web/sites/ajax_get_ip.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/sites/ajax_get_ip.php b/interface/web/sites/ajax_get_ip.php index 36127caf2d..986fd8d335 100644 --- a/interface/web/sites/ajax_get_ip.php +++ b/interface/web/sites/ajax_get_ip.php @@ -45,7 +45,7 @@ $ip_type = $_GET['ip_type']; $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 = ? AND virtualhost = 'y' AND (client_id = 0 OR client_id=?)"; $ips = $app->db->queryAllRecords($sql, $ip_type, $server_id, $tmp['client_id']); // $ip_select = ""; -- GitLab From 86f8f38c7664eaa9d4cd0b748ccda8a9fcc3f085 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Sun, 7 Mar 2021 22:26:08 +0100 Subject: [PATCH 211/403] Add client limits for SMTP relay settings (#6088) --- interface/web/client/form/client.tform.php | 7 +++ .../web/client/form/client_template.tform.php | 10 +++- interface/web/client/form/reseller.tform.php | 6 +++ .../client/templates/client_edit_limits.htm | 6 +++ .../templates/client_template_edit_limits.htm | 6 +++ .../client/templates/reseller_edit_limits.htm | 6 +++ interface/web/mail/mail_domain_edit.php | 52 ++++++++++--------- .../web/mail/templates/mail_domain_edit.htm | 28 +++++----- 8 files changed, 81 insertions(+), 40 deletions(-) diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index 7ad9aecac6..83464112d5 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -938,6 +938,13 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_relayhost' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'valuelimit' => 'client:limit_relayhost', + 'value' => array(0 => 'n', 1 => 'y') + ), 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index 5883cce56c..ea8fb7d27e 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -353,7 +353,15 @@ $form["tabs"]['limits'] = array ( 'maxlength' => '10', 'rows' => '', 'cols' => '' - ),/* + ), + 'limit_relayhost' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'valuelimit' => 'client:limit_relayhost', + 'value' => array(0 => 'n', 1 => 'y') + ), + /* 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php index 8c94132b3b..f2f88343bf 100644 --- a/interface/web/client/form/reseller.tform.php +++ b/interface/web/client/form/reseller.tform.php @@ -936,6 +936,12 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_relayhost' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), 'default_xmppserver' => array ( 'datatype' => 'INTEGER', 'formtype' => 'SELECT', diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 39512208b4..2b4b134a5a 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -235,6 +235,12 @@
+
+ +
+ {tmpl_var name='limit_relayhost'} +
+
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm index 4573e4b0d6..680bc427d8 100644 --- a/interface/web/client/templates/client_template_edit_limits.htm +++ b/interface/web/client/templates/client_template_edit_limits.htm @@ -192,6 +192,12 @@
+
+ +
+ {tmpl_var name='limit_relayhost'} +
+
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm index ff185ce9a4..fa2c3705c9 100644 --- a/interface/web/client/templates/reseller_edit_limits.htm +++ b/interface/web/client/templates/reseller_edit_limits.htm @@ -236,6 +236,12 @@
+
+ +
+ {tmpl_var name='limit_relayhost'} +
+
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index 3ea60c08f9..e74a60ed94 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -216,23 +216,25 @@ class page_action extends tform_actions { } // load relayhost-values - $sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?"; - $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); - $app->tpl->setVar('relay_host', $rec['relay_host'], true); - $app->tpl->setVar('relay_user', $rec['relay_user'], true); - $app->tpl->setVar('relay_pass', $rec['relay_pass'], true); + if ($client["limit_relayhost"] == 'y') { + $sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?"; + $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); + $app->tpl->setVar('relay_host', $rec['relay_host'], true); + $app->tpl->setVar('relay_user', $rec['relay_user'], true); + $app->tpl->setVar('relay_pass', $rec['relay_pass'], true); + } // load dkim-values $sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?"; $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); $dns_key = str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$rec['dkim_public']); - + $keyparts = str_split('v=DKIM1; t=s; p=' . $dns_key, 200); array_walk($keyparts, function(&$value, $key) { $value = '"'.$value.'"'; } ); $dkim_txt = implode('', $keyparts); $dns_record = $rec['dkim_selector'] . '._domainkey.' . $rec['domain'] . '. 3600 IN TXT '.$dkim_txt; - + $app->tpl->setVar('dkim_selector', $rec['dkim_selector'], true); $app->tpl->setVar('dkim_private', $rec['dkim_private'], true); $app->tpl->setVar('dkim_public', $rec['dkim_public'], true); @@ -263,7 +265,7 @@ class page_action extends tform_actions { if($_SESSION["s"]["user"]["typ"] != 'admin') { // Get the limits of the client $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); - $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver, limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); // When the record is updated if($this->id > 0) { // restore the server ID if the user is not admin and record is edited @@ -296,7 +298,7 @@ class page_action extends tform_actions { $this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]); $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]); } - + //* server_id must be > 0 if(isset($this->dataRecord["server_id"]) && $this->dataRecord["server_id"] < 1) $app->tform->errorMessage .= $app->lng("server_id_0_error_txt"); @@ -305,7 +307,7 @@ class page_action extends tform_actions { function onAfterInsert() { global $app, $conf; - + $domain = $app->functions->idn_encode($this->dataRecord["domain"]); // Spamfilter policy @@ -319,10 +321,10 @@ class page_action extends tform_actions { $tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id); // We create a new record $insert_data = array( - "sys_userid" => $_SESSION["s"]["user"]["userid"], + "sys_userid" => $_SESSION["s"]["user"]["userid"], "sys_groupid" => $tmp_domain["sys_groupid"], - "sys_perm_user" => 'riud', - "sys_perm_group" => 'riud', + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', "sys_perm_other" => '', "server_id" => $this->dataRecord["server_id"], "priority" => 5, @@ -350,7 +352,7 @@ class page_action extends tform_actions { function onBeforeUpdate() { global $app, $conf; - + $domain = $app->functions->idn_encode($this->dataRecord["domain"]); //* Check if the server has been changed @@ -381,7 +383,7 @@ class page_action extends tform_actions { global $app, $conf; $domain = $app->functions->idn_encode($this->dataRecord["domain"]); - + // Spamfilter policy $policy_id = $app->functions->intval($this->dataRecord["policy"]); $tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain); @@ -393,10 +395,10 @@ class page_action extends tform_actions { $tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id); // We create a new record $insert_data = array( - "sys_userid" => $_SESSION["s"]["user"]["userid"], + "sys_userid" => $_SESSION["s"]["user"]["userid"], "sys_groupid" => $tmp_domain["sys_groupid"], - "sys_perm_user" => 'riud', - "sys_perm_group" => 'riud', + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', "sys_perm_other" => '', "server_id" => $this->dataRecord["server_id"], "priority" => 5, @@ -447,7 +449,7 @@ class page_action extends tform_actions { //* Update the mailinglist $app->db->query("UPDATE mail_mailinglist SET sys_userid = ?, sys_groupid = ? WHERE domain = ?", $client_user_id, $sys_groupid, $this->oldDataRecord['domain']); - + //* Update fetchmail accounts $fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like ?", '%@' . $this->oldDataRecord['domain']); if(is_array($fetchmail)) { @@ -456,7 +458,7 @@ class page_action extends tform_actions { $app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']); } } - + //* Delete the old spamfilter record $tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->oldDataRecord["domain"]); $app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]); @@ -467,10 +469,10 @@ class page_action extends tform_actions { //* update dns-record when the dkim record was changed // NOTE: only if the domain-name was not changed if ( $this->dataRecord['active'] == 'y' && $domain == $this->oldDataRecord['domain'] ) { - $dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; + $dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; $selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false; $dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false; - + $soaDomain = $domain.'.'; while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) { $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain); @@ -493,7 +495,7 @@ class page_action extends tform_actions { $soa_id = $app->functions->intval($soa['zone']); $serial = $app->validate_dns->increase_serial($soa["serial"]); $app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id); - } + } } } @@ -510,8 +512,8 @@ class page_action extends tform_actions { $app->db->datalogDelete('dns_rr', 'id', $r['id']); } } - - // also delete a dsn-records with same selector + + // also delete a dsn-records with same selector $sql = "SELECT * from dns_rr WHERE name ? AND data LIKE 'v=DKIM1%' AND " . $app->tform->getAuthSQL('r'); $rec = $app->db->queryAllRecords($sql, '._domainkey.'.$dataRecord['dkim_selector'].'.', $dataRecord['domain']); if (is_array($rec)) diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm index 676e55f9dc..c024fa023b 100644 --- a/interface/web/mail/templates/mail_domain_edit.htm +++ b/interface/web/mail/templates/mail_domain_edit.htm @@ -75,24 +75,26 @@ {tmpl_var name='policy'} -
+ +
- +
-
-
+
+
- +
-
-
+
+
- +
-
+
+
@@ -131,7 +133,7 @@
- + @@ -150,11 +152,11 @@ domain_id : domain_id, dkim_public : dkim_public, dkim_selector : dkim_selector, - type : "create_dkim" + type : "create_dkim" }, function(data) { var dkim_txt = 'v=DKIM1; t=s; p=' + data['dns_record'].replace(/(\r\n|\n|\r)/gm, ""); var dns=data['dkim_selector'] + '._domainkey.' + data['domain'] + '. 3600 IN TXT ' + dkim_txt.match(new RegExp('.{1,' + '200' + '}', 'g')).map(chunk => '"' + chunk + '"').join(''); - + $("#dkim_selector").val(data.dkim_selector); $("#dkim_public").val(data.dkim_public); $("#dkim_private").val(data.dkim_private); @@ -162,5 +164,3 @@ }); }; - - -- GitLab From 7010250a07ab3068a1cf6abbb36c63fa8b0e1d0d Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Sun, 7 Mar 2021 22:45:12 +0100 Subject: [PATCH 212/403] Add function to disable per domain relaying globally (#6088) --- install/tpl/system.ini.master | 1 + interface/web/admin/form/system_config.tform.php | 6 ++++++ interface/web/admin/lib/lang/ar_system_config.lng | 1 + interface/web/admin/lib/lang/bg_system_config.lng | 1 + interface/web/admin/lib/lang/br_system_config.lng | 1 + interface/web/admin/lib/lang/ca_system_config.lng | 1 + interface/web/admin/lib/lang/cz_system_config.lng | 1 + interface/web/admin/lib/lang/de_system_config.lng | 1 + interface/web/admin/lib/lang/dk_system_config.lng | 1 + interface/web/admin/lib/lang/el_system_config.lng | 1 + interface/web/admin/lib/lang/en_system_config.lng | 4 +--- interface/web/admin/lib/lang/es_system_config.lng | 1 + interface/web/admin/lib/lang/fi_system_config.lng | 1 + interface/web/admin/lib/lang/fr_system_config.lng | 1 + interface/web/admin/lib/lang/hr_system_config.lng | 1 + interface/web/admin/lib/lang/hu_system_config.lng | 1 + interface/web/admin/lib/lang/id_system_config.lng | 1 + interface/web/admin/lib/lang/it_system_config.lng | 1 + interface/web/admin/lib/lang/ja_system_config.lng | 1 + interface/web/admin/lib/lang/nl_system_config.lng | 1 + interface/web/admin/lib/lang/pl_system_config.lng | 1 + interface/web/admin/lib/lang/pt_system_config.lng | 1 + interface/web/admin/lib/lang/ro_system_config.lng | 1 + interface/web/admin/lib/lang/ru_system_config.lng | 1 + interface/web/admin/lib/lang/se_system_config.lng | 1 + interface/web/admin/lib/lang/sk_system_config.lng | 1 + interface/web/admin/lib/lang/tr_system_config.lng | 4 +--- .../web/admin/templates/system_config_mail_edit.htm | 12 +++++++++--- interface/web/mail/mail_domain_edit.php | 8 ++++++++ interface/web/mail/templates/mail_domain_edit.htm | 2 ++ 30 files changed, 51 insertions(+), 9 deletions(-) diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master index bbd78e6b3a..9d53aed778 100644 --- a/install/tpl/system.ini.master +++ b/install/tpl/system.ini.master @@ -8,6 +8,7 @@ [mail] enable_custom_login=n +show_per_domain_relay_options=n mailbox_show_autoresponder_tab=y mailbox_show_mail_filter_tab=y mailbox_show_custom_rules_tab=y diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index 88d0fef26c..50abaf4db7 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -267,6 +267,12 @@ $form["tabs"]['mail'] = array ( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), + 'show_per_domain_relay_options' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), 'mailbox_show_autoresponder_tab' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng index 7d3df7fbf8..8013ccf673 100644 --- a/interface/web/admin/lib/lang/ar_system_config.lng +++ b/interface/web/admin/lib/lang/ar_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng index f99465e1b6..70edb7bdeb 100644 --- a/interface/web/admin/lib/lang/bg_system_config.lng +++ b/interface/web/admin/lib/lang/bg_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng index 58ffca080b..9a3ef795ef 100644 --- a/interface/web/admin/lib/lang/br_system_config.lng +++ b/interface/web/admin/lib/lang/br_system_config.lng @@ -26,6 +26,7 @@ $wb['webdavuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo $wb['dblist_phpmyadmin_link_txt'] = 'Link para o PHPMyAdmin'; $wb['enable_custom_login_txt'] = 'Permitir nome de usuário personalizado'; $wb['mailboxlist_webmail_link_txt'] = 'Link para o Webmail'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Exibir aba de auto-resposta nos detalhes da conta de email'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Exibir aba de filtro de emails nos detalhes da conta de email'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Exibir aba de filtros personalizados de email nos detalhes da conta de email'; diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng index d8bc0e2d48..f4f55f567a 100644 --- a/interface/web/admin/lib/lang/ca_system_config.lng +++ b/interface/web/admin/lib/lang/ca_system_config.lng @@ -26,6 +26,7 @@ $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.' $wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng index 7db312097c..1331a11ae8 100644 --- a/interface/web/admin/lib/lang/cz_system_config.lng +++ b/interface/web/admin/lib/lang/cz_system_config.lng @@ -48,6 +48,7 @@ $wb['use_combobox_txt'] = 'Použití jQuery UI Combobox'; $wb['use_loadindicator_txt'] = 'Použití indikátoru zatížení'; $wb['f5_to_reload_js_txt'] = 'Pokud vypnete tuto volbu, zřejmě budete muset používat klávesu F5, aby internetový prohlížeč znovu načetl JavaScript knihovny nebo budete muset ručně vyprázdňovat mezipaměť (cache) vašeho internetového prohlížeče.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Ukázat kartu automatická odpověď v podrobnostech u poštovní schránky'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Ukázat kartu poštovní filtry v podrobnostech u poštovní schránky'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Ukázat kartu vlastní pravidla v podrobnostech u poštovní schránky'; diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng index 4a862a2d4a..4f62e16e53 100644 --- a/interface/web/admin/lib/lang/de_system_config.lng +++ b/interface/web/admin/lib/lang/de_system_config.lng @@ -51,6 +51,7 @@ $wb['f5_to_reload_js_txt'] = 'Wenn Sie den Wert ändern, müssen Sie F5 drücken $wb['phpmyadmin_url_error_regex'] = 'Falsche phpMyAdmin URL'; $wb['client_username_web_check_disabled_txt'] = 'Deaktiviere die Kunden Benutzernamen Überprüfung für den Begriff web.'; $wb['backups_include_into_web_quota_txt'] = 'Backups in Web Quota hinzuzählen.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Zeige Autoresponder Reiter in E-Mail Kontodetails'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Zeige E-Mail Filter Reiter in E-Mail Kontodetails'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Zeige Benutzerregel Reiter in E-Mail Kontodetails'; diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng index eb96004421..f308bb7286 100644 --- a/interface/web/admin/lib/lang/dk_system_config.lng +++ b/interface/web/admin/lib/lang/dk_system_config.lng @@ -48,6 +48,7 @@ $wb['use_combobox_txt'] = 'Brug jQuery UI Combobox'; $wb['use_loadindicator_txt'] = 'Brug Load Indicator'; $wb['f5_to_reload_js_txt'] = 'Hvis du ændrer dette, kan du blive nødt til at trykke på F5 for at browseren genindlæser JavaScript-biblioteker eller tømme browserens cache.'; $wb['client_username_web_check_disabled_txt'] = 'Deaktiver klient-brugernavns check for ordet \'web\'.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Vis autoresponder tab i mail kontooplysninger'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Vis mail filter tab i mail kontooplysninger'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Vis custom mailfilter tab i mail kontooplysninger'; diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng index 68e10e37fc..a3d622b6b6 100644 --- a/interface/web/admin/lib/lang/el_system_config.lng +++ b/interface/web/admin/lib/lang/el_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Χρήση Load Indicator (ενδεικτή φό $wb['f5_to_reload_js_txt'] = 'Αν το αλλάξετε, ίσως πρέπει να πατήσετε το F5 για να κάνετε τον φυλλομετρητη να ξαναφορτώσει τις βιβλιοθήκες JavaScript ή να αδείασετε την cache του φυλλομετρητή.'; $wb['client_username_web_check_disabled_txt'] = 'Απενεργοποίηση ελέγχου στο όνομα χρήστη για την λέξη \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Εμφάνιση της καρτέλας Αυτόματης Απάντησης στις λεπτομέρειες του λογαριασμού mail'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Εμφάνιση της καρτέλας Φίλτρα mail στις λεπτομέρειες του λογαριασμού mail'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Εμφάνιση της καρτέλας Προσαρμοσμένοι Κανόνες στις λεπτομέρειες του λογαριασμού mail'; diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng index 4493913fb0..8b38c84331 100644 --- a/interface/web/admin/lib/lang/en_system_config.lng +++ b/interface/web/admin/lib/lang/en_system_config.lng @@ -26,9 +26,6 @@ $wb['webdavuser_prefix_error_regex'] = 'Char not allowed in webdav user prefix.' $wb['dblist_phpmyadmin_link_txt'] = 'Link to phpmyadmin in DB list'; $wb['enable_custom_login_txt'] = 'Allow custom login name'; $wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list'; -$wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail'; -$wb['mailbox_show_mail_filter_tab_txt'] = 'Show Mail Filter tab in Mailbox detail'; -$wb['mailbox_show_custom_rules_tab_txt'] = 'Show Custom Rules tab in Mailbox detail'; $wb['webmail_url_txt'] = 'Webmail URL'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; @@ -55,6 +52,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng index a001999dd4..1a942ae226 100644 --- a/interface/web/admin/lib/lang/es_system_config.lng +++ b/interface/web/admin/lib/lang/es_system_config.lng @@ -34,6 +34,7 @@ $wb['f5_to_reload_js_txt'] = 'Si modifica esto, deberá pulsar F5 para que el ex $wb['ftpuser_prefix_error_regex'] = 'Carácter no permitido en el prefijo de usuario de FTP.'; $wb['ftpuser_prefix_txt'] = 'Prefijo del usuario de FTP'; $wb['login_link_error_regex'] = 'Enlace incorrecto para el inicio de sesión personalizado'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Mostrar la pestaña del auto-respondedor en los detalles de la cuenta de correo'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Mostrar la pestaña filtro de correo personalizado en los detalles de la cuenta de correo'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Mostrar la pestaña filtro de correo en los detalles de la cuenta de correo'; diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng index eb7863fd53..e547669f5c 100644 --- a/interface/web/admin/lib/lang/fi_system_config.lng +++ b/interface/web/admin/lib/lang/fi_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng index cfecf8e27f..1b52bd93d0 100644 --- a/interface/web/admin/lib/lang/fr_system_config.lng +++ b/interface/web/admin/lib/lang/fr_system_config.lng @@ -48,6 +48,7 @@ $wb['use_combobox_txt'] = 'Use jQuery UI Combobox'; $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word ’web’.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng index 3f6486ae53..7e6e88a4a5 100644 --- a/interface/web/admin/lib/lang/hr_system_config.lng +++ b/interface/web/admin/lib/lang/hr_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng index 6b1a29ee46..a489a0ab7d 100644 --- a/interface/web/admin/lib/lang/hu_system_config.lng +++ b/interface/web/admin/lib/lang/hu_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng index f034f9bd76..adffcb7c5a 100644 --- a/interface/web/admin/lib/lang/id_system_config.lng +++ b/interface/web/admin/lib/lang/id_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng index 42f878a54d..7e0c71d998 100644 --- a/interface/web/admin/lib/lang/it_system_config.lng +++ b/interface/web/admin/lib/lang/it_system_config.lng @@ -48,6 +48,7 @@ $wb['use_combobox_txt'] = 'Use jQuery UI Combobox'; $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng index f50ffb5114..a17551b587 100644 --- a/interface/web/admin/lib/lang/ja_system_config.lng +++ b/interface/web/admin/lib/lang/ja_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng index 4078be986e..08574f6471 100644 --- a/interface/web/admin/lib/lang/nl_system_config.lng +++ b/interface/web/admin/lib/lang/nl_system_config.lng @@ -17,6 +17,7 @@ $wb['shelluser_prefix_error_regex'] = 'Char niet toegestaan in shell gebruiker v $wb['webdavuser_prefix_error_regex'] = 'Char niet toegestaan in webdav gebruiker voorvoegsel.'; $wb['dblist_phpmyadmin_link_txt'] = 'Link naar phpmyadmin in DB lijst'; $wb['mailboxlist_webmail_link_txt'] = 'Link naar webmail in Mailbox lijst'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng index c94313bdcb..c32dd70c6c 100644 --- a/interface/web/admin/lib/lang/pl_system_config.lng +++ b/interface/web/admin/lib/lang/pl_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Użyj wskaźnika ładowania'; $wb['f5_to_reload_js_txt'] = 'Jeżeli zmienisz to, możesz potrzebować wcisnąć F5 lub wyczyścić cache aby przeglądarka przeładowała biblioteki JavaScript.'; $wb['client_username_web_check_disabled_txt'] = 'Wyłącz sprawdzanie nazwy klienta w poszukiwaniu słowa -web-.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Pokaż zakładkę autorespondera w szczegółach konta email.'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Pokaż zakładkę filtra email w szczegółach konta email.'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Pokaż zakładkę własnych filtrów email w szczegółach konta email.'; diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng index 39e4dc93f2..732e23b7e9 100644 --- a/interface/web/admin/lib/lang/pt_system_config.lng +++ b/interface/web/admin/lib/lang/pt_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng index 2b819a013e..333dbb895e 100644 --- a/interface/web/admin/lib/lang/ro_system_config.lng +++ b/interface/web/admin/lib/lang/ro_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng index 3aee07ff2e..4764b04cad 100644 --- a/interface/web/admin/lib/lang/ru_system_config.lng +++ b/interface/web/admin/lib/lang/ru_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Использовать индикатор за $wb['f5_to_reload_js_txt'] = 'Если вы измените это, вам, возможно, придется нажать F5, чтобы перезагрузить в браузере JavaScript-библиотеи или очистить кэш браузера.'; $wb['client_username_web_check_disabled_txt'] = 'Отключить проверку логина клиента для слова \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Включить резервное копирование файлов в веб-квоту.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Показывать вкладку автоответчика в деталях учетной записи электронной почты'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Показывать вкладку почтового фильтра в деталях учетной записи электронной почты'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Показывать вкладку пользовательского почтового фильтра в деталях учетной записи электронной почты'; diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng index d075f87509..74be416152 100644 --- a/interface/web/admin/lib/lang/se_system_config.lng +++ b/interface/web/admin/lib/lang/se_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Använd laddningsindikator'; $wb['f5_to_reload_js_txt'] = 'Om du ändrar detta kan du behöva trycka F5 för att ladda om javascript, eller rensa din webbläsarcache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Visa autosvarsfliken vid detaljerna för epostkonto'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Visa epostfilterfliken vid detaljerna för epostkonto'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng index ef4cc3fef9..0ab9904872 100644 --- a/interface/web/admin/lib/lang/sk_system_config.lng +++ b/interface/web/admin/lib/lang/sk_system_config.lng @@ -51,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Use Load Indicator'; $wb['f5_to_reload_js_txt'] = 'If you change this, you might have to press F5 to make the browser reload JavaScript libraries or empty your browser cache.'; $wb['client_username_web_check_disabled_txt'] = 'Disable client username check for the word \'web\'.'; $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng index 3bb9c82b0a..5a6e70ce81 100644 --- a/interface/web/admin/lib/lang/tr_system_config.lng +++ b/interface/web/admin/lib/lang/tr_system_config.lng @@ -26,9 +26,6 @@ $wb['webdavuser_prefix_error_regex'] = 'Webdav kullanıcısı ön ekinde izin ve $wb['dblist_phpmyadmin_link_txt'] = 'Veritabanı listesinde phpMyAdmin bağlantısı'; $wb['enable_custom_login_txt'] = 'Özel oturum açma kullanıcı adı kullanılabilsin'; $wb['mailboxlist_webmail_link_txt'] = 'E-posta kutusu listesinde Webmail bağlantısı'; -$wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin'; -$wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin'; -$wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin'; $wb['webmail_url_txt'] = 'Webmail Adresi'; $wb['mailmailinglist_link_txt'] = 'E-posta Listeleri listesinde E-posta Listesi bağlantısı'; $wb['mailmailinglist_url_txt'] = 'E-posta Listesi Adresi'; @@ -54,6 +51,7 @@ $wb['use_loadindicator_txt'] = 'Yük Göstergesi Kullanılsın'; $wb['f5_to_reload_js_txt'] = 'Bu değer değiştirildiğinde, web tarayıcının JavaScript kitaplıklarını yeniden yüklemesi için F5 tuşuna basmalı ya da web tarayıcının ön belleğini temizlemelisiniz.'; $wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \'web\' sözcüğü denetimi devre dışı bırakılsın.'; $wb['backups_include_into_web_quota_txt'] = 'Yedek dosyaları web kotasına katılsın.'; +$wb['show_per_domain_relay_options_txt'] = 'Show per domain relay options'; $wb['mailbox_show_autoresponder_tab_txt'] = 'E-posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin'; $wb['mailbox_show_mail_filter_tab_txt'] = 'E-posta hesabı ayrıntılarında e-posta süzgeci sekmesi görüntülensin'; $wb['mailbox_show_custom_rules_tab_txt'] = 'E-posta hesabı ayrıntılarında isteğe bağlı e-posta süzgeci sekmesi görüntülensin'; diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm index af0a7a25ca..00134e6511 100644 --- a/interface/web/admin/templates/system_config_mail_edit.htm +++ b/interface/web/admin/templates/system_config_mail_edit.htm @@ -4,6 +4,12 @@ {tmpl_var name='enable_custom_login'}
+
+ +
+ {tmpl_var name='show_per_domain_relay_options'} +
+
@@ -77,10 +83,10 @@ {tmpl_var name='default_mailserver'}
- - + + - +
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index e74a60ed94..ffa4eebc59 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -190,6 +190,14 @@ class page_action extends tform_actions { $app->tpl->setVar("domain_module", 0); } + // Check wether per domain relaying is enabled or not + $global_config = $app->getconf->get_global_config('mail'); + if($global_config['show_per_domain_relay_options'] == 'n' { + $app->tpl->setVar("show_per_domain_relay_options", 1); + } else { + $app->tpl->setVar("show_per_domain_relay_options", 0); + } + // Get the spamfilter policys for the user $tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]); diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm index c024fa023b..1be612436f 100644 --- a/interface/web/mail/templates/mail_domain_edit.htm +++ b/interface/web/mail/templates/mail_domain_edit.htm @@ -75,6 +75,7 @@ {tmpl_var name='policy'}
+
@@ -95,6 +96,7 @@
+
-- GitLab From ce4c98c57ef2d88e6ed0e14ebb56d166b2192740 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Sun, 7 Mar 2021 22:47:06 +0100 Subject: [PATCH 213/403] Fix syntax error --- interface/web/mail/mail_domain_edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index ffa4eebc59..eebb7b0848 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -192,7 +192,7 @@ class page_action extends tform_actions { // Check wether per domain relaying is enabled or not $global_config = $app->getconf->get_global_config('mail'); - if($global_config['show_per_domain_relay_options'] == 'n' { + if($global_config['show_per_domain_relay_options'] == 'n') { $app->tpl->setVar("show_per_domain_relay_options", 1); } else { $app->tpl->setVar("show_per_domain_relay_options", 0); -- GitLab From d86787264fd3acd53a19025333d70a79ee53b3de Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Mon, 8 Mar 2021 00:14:05 +0100 Subject: [PATCH 214/403] Add limit_relayhost column (#6088) --- install/sql/incremental/upd_dev_collection.sql | 4 ++++ install/sql/ispconfig3.sql | 2 ++ 2 files changed, 6 insertions(+) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 7d1ec43815..71efb3085e 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -19,3 +19,7 @@ DROP TABLE 'software_update_inst'; -- Brexit UPDATE `country` SET `eu` = 'n' WHERE `iso` = 'GB'; + +-- Add limit for per domain relaying +ALTER TABLE `client` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; +ALTER TABLE `client_template` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 04082fbeb7..006beb6b53 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -185,6 +185,7 @@ CREATE TABLE `client` ( `limit_spamfilter_wblist` int(11) NOT NULL DEFAULT '0', `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0', `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0', + `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', @@ -317,6 +318,7 @@ CREATE TABLE `client_template` ( `limit_spamfilter_wblist` int(11) NOT NULL default '0', `limit_spamfilter_user` int(11) NOT NULL default '0', `limit_spamfilter_policy` int(11) NOT NULL default '0', + `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n', `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1', `xmpp_servers` text, `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1', -- GitLab From f80634486a6da9187b1948c353147cbf845279d6 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Mon, 8 Mar 2021 00:36:23 +0100 Subject: [PATCH 215/403] Fix limit check for per domain relaying (#6088) --- interface/web/mail/mail_domain_edit.php | 12 ++++++++++-- interface/web/mail/templates/mail_domain_edit.htm | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index eebb7b0848..360487ef1a 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -192,12 +192,20 @@ class page_action extends tform_actions { // Check wether per domain relaying is enabled or not $global_config = $app->getconf->get_global_config('mail'); - if($global_config['show_per_domain_relay_options'] == 'n') { + if($global_config['show_per_domain_relay_options'] == 'y') { $app->tpl->setVar("show_per_domain_relay_options", 1); } else { $app->tpl->setVar("show_per_domain_relay_options", 0); } + // Get the limits of the client + $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); + $client = $app->db->queryOneRecord("SELECT limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + if ($client["limit_relayhost"] == 'y' || $_SESSION["s"]["user"]["typ"] == 'admin') { + $app->tpl->setVar("limit_relayhost", 1); + } else { + $app->tpl->setVar("limit_relayhost", 0); + } // Get the spamfilter policys for the user $tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]); @@ -273,7 +281,7 @@ class page_action extends tform_actions { if($_SESSION["s"]["user"]["typ"] != 'admin') { // Get the limits of the client $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); - $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver, limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); // When the record is updated if($this->id > 0) { // restore the server ID if the user is not admin and record is edited diff --git a/interface/web/mail/templates/mail_domain_edit.htm b/interface/web/mail/templates/mail_domain_edit.htm index 1be612436f..3486dcfff2 100644 --- a/interface/web/mail/templates/mail_domain_edit.htm +++ b/interface/web/mail/templates/mail_domain_edit.htm @@ -76,7 +76,7 @@
- +
-- GitLab From 5691d4d259aedf0c8ee94c2e3f22fb82a674abf9 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Mon, 8 Mar 2021 00:43:19 +0100 Subject: [PATCH 216/403] Add missing translations (#6088) --- interface/web/client/lib/lang/ar_client.lng | 1 + interface/web/client/lib/lang/ar_client_template.lng | 1 + interface/web/client/lib/lang/ar_reseller.lng | 1 + interface/web/client/lib/lang/bg_client.lng | 1 + interface/web/client/lib/lang/bg_client_template.lng | 1 + interface/web/client/lib/lang/bg_reseller.lng | 1 + interface/web/client/lib/lang/br_client.lng | 1 + interface/web/client/lib/lang/br_client_template.lng | 1 + interface/web/client/lib/lang/br_reseller.lng | 1 + interface/web/client/lib/lang/ca_client.lng | 1 + interface/web/client/lib/lang/ca_client_template.lng | 1 + interface/web/client/lib/lang/ca_reseller.lng | 1 + interface/web/client/lib/lang/cz_client.lng | 1 + interface/web/client/lib/lang/cz_client_template.lng | 1 + interface/web/client/lib/lang/cz_reseller.lng | 1 + interface/web/client/lib/lang/de_client.lng | 1 + interface/web/client/lib/lang/de_client_template.lng | 1 + interface/web/client/lib/lang/de_reseller.lng | 1 + interface/web/client/lib/lang/dk_client.lng | 1 + interface/web/client/lib/lang/dk_client_template.lng | 1 + interface/web/client/lib/lang/dk_reseller.lng | 1 + interface/web/client/lib/lang/el_client.lng | 1 + interface/web/client/lib/lang/el_client_template.lng | 1 + interface/web/client/lib/lang/el_reseller.lng | 1 + interface/web/client/lib/lang/en_client.lng | 1 + interface/web/client/lib/lang/en_client_template.lng | 1 + interface/web/client/lib/lang/en_reseller.lng | 1 + interface/web/client/lib/lang/es_client.lng | 1 + interface/web/client/lib/lang/es_client_template.lng | 1 + interface/web/client/lib/lang/es_reseller.lng | 1 + interface/web/client/lib/lang/fi_client.lng | 1 + interface/web/client/lib/lang/fi_client_template.lng | 1 + interface/web/client/lib/lang/fi_reseller.lng | 1 + interface/web/client/lib/lang/fr_client.lng | 1 + interface/web/client/lib/lang/fr_client_template.lng | 1 + interface/web/client/lib/lang/fr_reseller.lng | 1 + interface/web/client/lib/lang/hr_client.lng | 1 + interface/web/client/lib/lang/hr_client_template.lng | 1 + interface/web/client/lib/lang/hr_reseller.lng | 1 + interface/web/client/lib/lang/hu_client.lng | 1 + interface/web/client/lib/lang/hu_client_template.lng | 1 + interface/web/client/lib/lang/hu_reseller.lng | 1 + interface/web/client/lib/lang/id_client.lng | 1 + interface/web/client/lib/lang/id_client_template.lng | 1 + interface/web/client/lib/lang/id_reseller.lng | 1 + interface/web/client/lib/lang/it_client.lng | 1 + interface/web/client/lib/lang/it_client_template.lng | 1 + interface/web/client/lib/lang/it_reseller.lng | 1 + interface/web/client/lib/lang/ja_client.lng | 1 + interface/web/client/lib/lang/ja_client_template.lng | 1 + interface/web/client/lib/lang/ja_reseller.lng | 1 + interface/web/client/lib/lang/nl_client.lng | 1 + interface/web/client/lib/lang/nl_client_template.lng | 1 + interface/web/client/lib/lang/nl_reseller.lng | 1 + interface/web/client/lib/lang/pl_client.lng | 1 + interface/web/client/lib/lang/pl_client_template.lng | 1 + interface/web/client/lib/lang/pl_reseller.lng | 1 + interface/web/client/lib/lang/pt_client.lng | 1 + interface/web/client/lib/lang/pt_client_template.lng | 1 + interface/web/client/lib/lang/pt_reseller.lng | 1 + interface/web/client/lib/lang/ro_client.lng | 1 + interface/web/client/lib/lang/ro_client_template.lng | 1 + interface/web/client/lib/lang/ro_reseller.lng | 1 + interface/web/client/lib/lang/ru_client.lng | 1 + interface/web/client/lib/lang/ru_client_template.lng | 1 + interface/web/client/lib/lang/ru_reseller.lng | 1 + interface/web/client/lib/lang/se_client.lng | 1 + interface/web/client/lib/lang/se_client_template.lng | 1 + interface/web/client/lib/lang/se_reseller.lng | 1 + interface/web/client/lib/lang/sk_client.lng | 1 + interface/web/client/lib/lang/sk_client_template.lng | 1 + interface/web/client/lib/lang/sk_reseller.lng | 1 + interface/web/client/lib/lang/tr_client.lng | 1 + interface/web/client/lib/lang/tr_client_template.lng | 1 + interface/web/client/lib/lang/tr_reseller.lng | 1 + 75 files changed, 75 insertions(+) diff --git a/interface/web/client/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng index fde7171aa2..6de8fa1138 100644 --- a/interface/web/client/lib/lang/ar_client.lng +++ b/interface/web/client/lib/lang/ar_client.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ar_client_template.lng b/interface/web/client/lib/lang/ar_client_template.lng index fe67603b19..d1050a8251 100644 --- a/interface/web/client/lib/lang/ar_client_template.lng +++ b/interface/web/client/lib/lang/ar_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ar_reseller.lng b/interface/web/client/lib/lang/ar_reseller.lng index afd557ab18..4d21c7d173 100644 --- a/interface/web/client/lib/lang/ar_reseller.lng +++ b/interface/web/client/lib/lang/ar_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/bg_client.lng b/interface/web/client/lib/lang/bg_client.lng index d9e5c1de61..5d696dd320 100644 --- a/interface/web/client/lib/lang/bg_client.lng +++ b/interface/web/client/lib/lang/bg_client.lng @@ -38,6 +38,7 @@ $wb['title_txt'] = 'Обръщение'; $wb['firstname_txt'] = 'Име'; $wb['surname_txt'] = 'Фамилия'; $wb['limit_client_txt'] = 'Макс. брой клиенти'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/bg_client_template.lng b/interface/web/client/lib/lang/bg_client_template.lng index 0ca56504f1..222554fbfd 100644 --- a/interface/web/client/lib/lang/bg_client_template.lng +++ b/interface/web/client/lib/lang/bg_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Макс. брой на spamfilter white / $wb['limit_spamfilter_user_txt'] = 'Макс. брой на spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Макс. брой на spamfilter policys'; $wb['limit_client_txt'] = 'Макс. брой на Клиентите'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/bg_reseller.lng b/interface/web/client/lib/lang/bg_reseller.lng index d34dff83d6..d8489b5817 100644 --- a/interface/web/client/lib/lang/bg_reseller.lng +++ b/interface/web/client/lib/lang/bg_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Компания'; $wb['title_txt'] = 'Обръщение'; $wb['firstname_txt'] = 'Първо име '; $wb['surname_txt'] = 'Фамилия'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/br_client.lng b/interface/web/client/lib/lang/br_client.lng index 4d2928459d..f5f735a9dc 100644 --- a/interface/web/client/lib/lang/br_client.lng +++ b/interface/web/client/lib/lang/br_client.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Empresa'; $wb['title_txt'] = 'Cargo'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Sobrenome'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Limite de domínios'; $wb['limit_subdomain_txt'] = 'Limite de subdomínios'; $wb['limit_webquota_txt'] = 'Limite da cota de sites'; diff --git a/interface/web/client/lib/lang/br_client_template.lng b/interface/web/client/lib/lang/br_client_template.lng index 3c866f48e7..af4824fad1 100644 --- a/interface/web/client/lib/lang/br_client_template.lng +++ b/interface/web/client/lib/lang/br_client_template.lng @@ -19,6 +19,7 @@ $wb['limit_mailquota_txt'] = 'Cota da conta de email'; $wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista de permissões/lista de bloqueio"'; $wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam para conta de email'; $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Limite de domínios'; $wb['limit_subdomain_txt'] = 'Limite de subdomínios'; $wb['limit_webquota_txt'] = 'Limite da cota de site'; diff --git a/interface/web/client/lib/lang/br_reseller.lng b/interface/web/client/lib/lang/br_reseller.lng index 9dacacda44..b7cc452623 100644 --- a/interface/web/client/lib/lang/br_reseller.lng +++ b/interface/web/client/lib/lang/br_reseller.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Empresa'; $wb['title_txt'] = 'Título'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Sobrenome'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Limite de domínios'; $wb['limit_subdomain_txt'] = 'Limite de subdomínios'; $wb['limit_webquota_txt'] = 'Cota de sites'; diff --git a/interface/web/client/lib/lang/ca_client.lng b/interface/web/client/lib/lang/ca_client.lng index 56b6718749..cc8276ac20 100644 --- a/interface/web/client/lib/lang/ca_client.lng +++ b/interface/web/client/lib/lang/ca_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Titre'; $wb['firstname_txt'] = 'Prénom'; $wb['surname_txt'] = 'Nom'; $wb['limit_client_txt'] = 'Nombre maximal de clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/ca_client_template.lng b/interface/web/client/lib/lang/ca_client_template.lng index c72d067822..9328b422aa 100644 --- a/interface/web/client/lib/lang/ca_client_template.lng +++ b/interface/web/client/lib/lang/ca_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d\ $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d\'utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; $wb['limit_client_txt'] = 'Nombre maximal de clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/ca_reseller.lng b/interface/web/client/lib/lang/ca_reseller.lng index de734d385b..6e39d6741f 100644 --- a/interface/web/client/lib/lang/ca_reseller.lng +++ b/interface/web/client/lib/lang/ca_reseller.lng @@ -36,6 +36,7 @@ $wb['company_txt'] = 'Entreprise'; $wb['title_txt'] = 'Titre'; $wb['firstname_txt'] = 'Prénom'; $wb['surname_txt'] = 'Nom'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/cz_client.lng b/interface/web/client/lib/lang/cz_client.lng index c6bc86a59d..6c6bb093ad 100644 --- a/interface/web/client/lib/lang/cz_client.lng +++ b/interface/web/client/lib/lang/cz_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Společnost'; $wb['title_txt'] = 'Titul'; $wb['firstname_txt'] = 'Jméno'; $wb['surname_txt'] = 'Příjmení'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/cz_client_template.lng b/interface/web/client/lib/lang/cz_client_template.lng index 812a8e2766..addc035022 100644 --- a/interface/web/client/lib/lang/cz_client_template.lng +++ b/interface/web/client/lib/lang/cz_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta e-mailové schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet spamfiltrových bílých / černých listinových filtrů'; $wb['limit_spamfilter_user_txt'] = 'Max. počet spamflitrových uživatelů'; $wb['limit_spamfilter_policy_txt'] = 'Max. počet spamfiltrových politik'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/cz_reseller.lng b/interface/web/client/lib/lang/cz_reseller.lng index 79888530b0..2ae6860b32 100644 --- a/interface/web/client/lib/lang/cz_reseller.lng +++ b/interface/web/client/lib/lang/cz_reseller.lng @@ -36,6 +36,7 @@ $wb['company_txt'] = 'Společnost'; $wb['title_txt'] = 'Titul'; $wb['firstname_txt'] = 'Jméno'; $wb['surname_txt'] = 'Příjmení'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng index cce0b03b68..077e3f3265 100644 --- a/interface/web/client/lib/lang/de_client.lng +++ b/interface/web/client/lib/lang/de_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Vorname'; $wb['surname_txt'] = 'Nachname'; $wb['limit_client_txt'] = 'Max. Anzahl an Kunden'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Max. Anzahl an Domains'; $wb['limit_subdomain_txt'] = 'Max. Anzahl an Subdomains'; $wb['limit_webquota_txt'] = 'Max. Webbeschränkung'; diff --git a/interface/web/client/lib/lang/de_client_template.lng b/interface/web/client/lib/lang/de_client_template.lng index aaf26f9996..6ca0f25579 100644 --- a/interface/web/client/lib/lang/de_client_template.lng +++ b/interface/web/client/lib/lang/de_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Max. Anzahl an Spamfilter (White-/Blacklis $wb['limit_spamfilter_user_txt'] = 'Max. Anzahl Spamfilter Benutzer'; $wb['limit_spamfilter_policy_txt'] = 'Max. Anzahl an Spamfilter Richtlinien'; $wb['limit_client_txt'] = 'Max. Anzahl an Kunden'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Max. Anzahl an Domains'; $wb['limit_subdomain_txt'] = 'Max. Anzahl an Subdomains'; $wb['limit_webquota_txt'] = 'Max. Speicherplatzbeschränkung'; diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng index 5d6a8f134f..c5536ceec9 100644 --- a/interface/web/client/lib/lang/de_reseller.lng +++ b/interface/web/client/lib/lang/de_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Firma'; $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Vorname'; $wb['surname_txt'] = 'Nachname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Max. Anzahl an Domains'; $wb['limit_subdomain_txt'] = 'Max. Anzahl an Subdomains'; $wb['limit_webquota_txt'] = 'Max. Speicherplatzbeschränkung'; diff --git a/interface/web/client/lib/lang/dk_client.lng b/interface/web/client/lib/lang/dk_client.lng index fc83620acb..aebe9a9bdd 100644 --- a/interface/web/client/lib/lang/dk_client.lng +++ b/interface/web/client/lib/lang/dk_client.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Firma'; $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Fornavn'; $wb['surname_txt'] = 'Efternavn'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webkvote'; diff --git a/interface/web/client/lib/lang/dk_client_template.lng b/interface/web/client/lib/lang/dk_client_template.lng index fa9399197f..64a8b30874 100644 --- a/interface/web/client/lib/lang/dk_client_template.lng +++ b/interface/web/client/lib/lang/dk_client_template.lng @@ -18,6 +18,7 @@ $wb['limit_mailquota_txt'] = 'Postboks kvota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. antal af spamfilter white/blacklist filtere'; $wb['limit_spamfilter_user_txt'] = 'Max. antal af spamfilter brugere'; $wb['limit_spamfilter_policy_txt'] = 'Max. antal af spamfilter politikker'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webkvote'; diff --git a/interface/web/client/lib/lang/dk_reseller.lng b/interface/web/client/lib/lang/dk_reseller.lng index 19babe52d4..ef37da2c8e 100644 --- a/interface/web/client/lib/lang/dk_reseller.lng +++ b/interface/web/client/lib/lang/dk_reseller.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Firma'; $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Fornavn'; $wb['surname_txt'] = 'Efternavn'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webkvote'; diff --git a/interface/web/client/lib/lang/el_client.lng b/interface/web/client/lib/lang/el_client.lng index 3d61198d3d..468c6e29af 100644 --- a/interface/web/client/lib/lang/el_client.lng +++ b/interface/web/client/lib/lang/el_client.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Εταιρία'; $wb['title_txt'] = 'Τίτλος'; $wb['firstname_txt'] = 'Όνομα'; $wb['surname_txt'] = 'Επίθετο'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Όριο domain'; $wb['limit_subdomain_txt'] = 'Όριο subdomain'; $wb['limit_webquota_txt'] = 'Όριο χώρου web'; diff --git a/interface/web/client/lib/lang/el_client_template.lng b/interface/web/client/lib/lang/el_client_template.lng index 7d05bd4cc8..9b6333deaa 100644 --- a/interface/web/client/lib/lang/el_client_template.lng +++ b/interface/web/client/lib/lang/el_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Όριο θυρίδας'; $wb['limit_spamfilter_wblist_txt'] = 'Όριο spamfilter white / blacklist'; $wb['limit_spamfilter_user_txt'] = 'Όριο χρηστών spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Όριο πολιτικών spamfilter'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Όριο domain'; $wb['limit_subdomain_txt'] = 'Όριο subdomain'; $wb['limit_webquota_txt'] = 'Όριο χώρου web'; diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng index 9aa37a6333..2a4ae26bdf 100644 --- a/interface/web/client/lib/lang/el_reseller.lng +++ b/interface/web/client/lib/lang/el_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Εταιρία'; $wb['title_txt'] = 'Τίτλος'; $wb['firstname_txt'] = 'Όνομα'; $wb['surname_txt'] = 'Επίθετο'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Όριο Domain'; $wb['limit_subdomain_txt'] = 'Όριο Subdomain'; $wb['limit_webquota_txt'] = 'Όριο Χώρου Web'; diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng index ee5f3675bd..0f38b60dd9 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/en_client_template.lng b/interface/web/client/lib/lang/en_client_template.lng index bfccedcf1e..8cb93a9966 100644 --- a/interface/web/client/lib/lang/en_client_template.lng +++ b/interface/web/client/lib/lang/en_client_template.lng @@ -19,6 +19,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng index c2315c67b4..8e09ae1b4d 100644 --- a/interface/web/client/lib/lang/en_reseller.lng +++ b/interface/web/client/lib/lang/en_reseller.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/es_client.lng b/interface/web/client/lib/lang/es_client.lng index 645a533a51..6fe418a1d6 100644 --- a/interface/web/client/lib/lang/es_client.lng +++ b/interface/web/client/lib/lang/es_client.lng @@ -79,6 +79,7 @@ $wb['limit_dns_slave_zone_error_notint'] = 'El límite de zonas esclavas de dns $wb['limit_dns_slave_zone_txt'] = 'Cantidad máxima de zonas secundarias de DNS'; $wb['limit_dns_zone_error_notint'] = 'El límite de zonas DNS debe ser un número.'; $wb['limit_dns_zone_txt'] = 'Cantidad máxima de zonas DNS'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_fetchmail_txt'] = 'Cantidad máx. de recogedores de correo'; $wb['limit_ftp_user_error_notint'] = 'El límite de usuarios de FTP debe ser un número.'; diff --git a/interface/web/client/lib/lang/es_client_template.lng b/interface/web/client/lib/lang/es_client_template.lng index 17c73de969..0c2a4700fd 100644 --- a/interface/web/client/lib/lang/es_client_template.lng +++ b/interface/web/client/lib/lang/es_client_template.lng @@ -35,6 +35,7 @@ $wb['limit_dns_slave_zone_error_notint'] = 'El límite de zonas esclavas de dns $wb['limit_dns_slave_zone_txt'] = 'Cantidad máx. de zonas secundarias de DNS'; $wb['limit_dns_zone_error_notint'] = 'El límite de zonas DNS debe ser un número.'; $wb['limit_dns_zone_txt'] = 'Cantidad máx. de zonas DNS'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_domainmodule_txt'] = 'Límites del módulo de dominio'; $wb['limit_fetchmail_txt'] = 'Cantidad máx. de recuperadores de correo'; diff --git a/interface/web/client/lib/lang/es_reseller.lng b/interface/web/client/lib/lang/es_reseller.lng index d2553ce83c..2d96fe2bdc 100644 --- a/interface/web/client/lib/lang/es_reseller.lng +++ b/interface/web/client/lib/lang/es_reseller.lng @@ -85,6 +85,7 @@ $wb['limit_dns_slave_zone_error_notint'] = 'El límite de zonas esclavas de dns $wb['limit_dns_slave_zone_txt'] = 'Cantidad máxima de zonas secundarias de DNS'; $wb['limit_dns_zone_error_notint'] = 'El límite de zonas DNS debe ser un número.'; $wb['limit_dns_zone_txt'] = 'Cantidad máxima de zonas DNS'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_domainmodule_error_notint'] = 'El límite del módulo de dominio debe ser un número.'; $wb['limit_domainmodule_txt'] = 'Límites del módulo de dominio'; diff --git a/interface/web/client/lib/lang/fi_client.lng b/interface/web/client/lib/lang/fi_client.lng index c0c0a5ba3a..b373a7f10f 100644 --- a/interface/web/client/lib/lang/fi_client.lng +++ b/interface/web/client/lib/lang/fi_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Otsikko'; $wb['firstname_txt'] = 'Etunimi'; $wb['surname_txt'] = 'Sukunimi'; $wb['limit_client_txt'] = 'Asiakkaiden määrä'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Verkkotunnuksien määrä'; $wb['limit_subdomain_txt'] = 'Aliverkkotunnuksien määrä'; $wb['limit_webquota_txt'] = 'Kotisivutila'; diff --git a/interface/web/client/lib/lang/fi_client_template.lng b/interface/web/client/lib/lang/fi_client_template.lng index d24182806b..68d9c0bead 100644 --- a/interface/web/client/lib/lang/fi_client_template.lng +++ b/interface/web/client/lib/lang/fi_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Roskapostisuodattimen estolistojen määr $wb['limit_spamfilter_user_txt'] = 'Roskapostisuodattimen käyttäjien määrä'; $wb['limit_spamfilter_policy_txt'] = 'Roskapostisuodattimen kohtelutapojen määrä'; $wb['limit_client_txt'] = 'Asiakkaiden määrä'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Verkkotunnuksien raja'; $wb['limit_subdomain_txt'] = 'Aliverkkotunnuksien raja'; $wb['limit_webquota_txt'] = 'Kotisivutilan raja'; diff --git a/interface/web/client/lib/lang/fi_reseller.lng b/interface/web/client/lib/lang/fi_reseller.lng index 06e2ef5fca..d0e4eedcfe 100644 --- a/interface/web/client/lib/lang/fi_reseller.lng +++ b/interface/web/client/lib/lang/fi_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Yritys'; $wb['title_txt'] = 'Titteli'; $wb['firstname_txt'] = 'Etunimi'; $wb['surname_txt'] = 'Sukunimi'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Verkkotunnusraja'; $wb['limit_subdomain_txt'] = 'Aliverkkotunnusraja'; $wb['limit_webquota_txt'] = 'WWW-levytila'; diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng index 4ef9a64eeb..61b9e800b5 100644 --- a/interface/web/client/lib/lang/fr_client.lng +++ b/interface/web/client/lib/lang/fr_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Titre'; $wb['firstname_txt'] = 'Prénom'; $wb['surname_txt'] = 'Nom'; $wb['limit_client_txt'] = 'Nombre maximal de clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/fr_client_template.lng b/interface/web/client/lib/lang/fr_client_template.lng index e443eb7801..f09e408cc9 100644 --- a/interface/web/client/lib/lang/fr_client_template.lng +++ b/interface/web/client/lib/lang/fr_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Nombre maximal de liste blanches/noires d $wb['limit_spamfilter_user_txt'] = 'Nombre maximal d’utilisateurs du filtre antispam'; $wb['limit_spamfilter_policy_txt'] = 'Nombre maximal de règles du filtre antispam'; $wb['limit_client_txt'] = 'Nombre maximal de clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng index 448a91ea39..ef5d956d33 100644 --- a/interface/web/client/lib/lang/fr_reseller.lng +++ b/interface/web/client/lib/lang/fr_reseller.lng @@ -36,6 +36,7 @@ $wb['company_txt'] = 'Entreprise'; $wb['title_txt'] = 'Titre'; $wb['firstname_txt'] = 'Prénom'; $wb['surname_txt'] = 'Nom'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Nombre maximal de domaines'; $wb['limit_subdomain_txt'] = 'Nombre maximal de sous-domaines'; $wb['limit_webquota_txt'] = 'Limite du quota web'; diff --git a/interface/web/client/lib/lang/hr_client.lng b/interface/web/client/lib/lang/hr_client.lng index aac50a2f2a..bdfcb839d3 100644 --- a/interface/web/client/lib/lang/hr_client.lng +++ b/interface/web/client/lib/lang/hr_client.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Poduzeće'; $wb['title_txt'] = 'Naziv'; $wb['firstname_txt'] = 'Ime'; $wb['surname_txt'] = 'Prezime'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domena'; $wb['limit_subdomain_txt'] = 'limit_poddomena'; $wb['limit_webquota_txt'] = 'limit_prostora'; diff --git a/interface/web/client/lib/lang/hr_client_template.lng b/interface/web/client/lib/lang/hr_client_template.lng index 4a2cd0500c..23ff2def63 100644 --- a/interface/web/client/lib/lang/hr_client_template.lng +++ b/interface/web/client/lib/lang/hr_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Veličina mailboxa'; $wb['limit_spamfilter_wblist_txt'] = 'Maksimalan broj spamfilter white / blacklist filtera'; $wb['limit_spamfilter_user_txt'] = 'Maksimalan broj spamfilter korisnika'; $wb['limit_spamfilter_policy_txt'] = 'Maksimalan broj spamfilter pravila'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domena'; $wb['limit_subdomain_txt'] = 'limit_poddomena'; $wb['limit_webquota_txt'] = 'limit_prostora'; diff --git a/interface/web/client/lib/lang/hr_reseller.lng b/interface/web/client/lib/lang/hr_reseller.lng index 9b01f30b2d..24c84e5c23 100644 --- a/interface/web/client/lib/lang/hr_reseller.lng +++ b/interface/web/client/lib/lang/hr_reseller.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Poduzeće'; $wb['title_txt'] = 'Naziv'; $wb['firstname_txt'] = 'Ime'; $wb['surname_txt'] = 'Prezime'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domena'; $wb['limit_subdomain_txt'] = 'limit_poddomena'; $wb['limit_webquota_txt'] = 'limit_prostora'; diff --git a/interface/web/client/lib/lang/hu_client.lng b/interface/web/client/lib/lang/hu_client.lng index 402e5adf04..9d3aba88b9 100644 --- a/interface/web/client/lib/lang/hu_client.lng +++ b/interface/web/client/lib/lang/hu_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Titulus'; $wb['firstname_txt'] = 'Keresztnév'; $wb['surname_txt'] = 'Vezetéknév'; $wb['limit_client_txt'] = 'Max. number of Clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/hu_client_template.lng b/interface/web/client/lib/lang/hu_client_template.lng index 9300d945b6..63a1766054 100644 --- a/interface/web/client/lib/lang/hu_client_template.lng +++ b/interface/web/client/lib/lang/hu_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/hu_reseller.lng b/interface/web/client/lib/lang/hu_reseller.lng index 5970b80d46..ed67fba886 100644 --- a/interface/web/client/lib/lang/hu_reseller.lng +++ b/interface/web/client/lib/lang/hu_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Cég'; $wb['title_txt'] = 'Titulus'; $wb['firstname_txt'] = 'Keresztnév'; $wb['surname_txt'] = 'Vezetéknév'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/id_client.lng b/interface/web/client/lib/lang/id_client.lng index c7b5cafa43..f4c3bd974c 100644 --- a/interface/web/client/lib/lang/id_client.lng +++ b/interface/web/client/lib/lang/id_client.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Perusahaan'; $wb['title_txt'] = 'Judul'; $wb['firstname_txt'] = 'Nama depan'; $wb['surname_txt'] = 'Nama belakang'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'batasan domain'; $wb['limit_subdomain_txt'] = 'batasan subdomain'; $wb['limit_webquota_txt'] = 'batasan kuota web'; diff --git a/interface/web/client/lib/lang/id_client_template.lng b/interface/web/client/lib/lang/id_client_template.lng index 007b4af0da..b6ecb87e26 100644 --- a/interface/web/client/lib/lang/id_client_template.lng +++ b/interface/web/client/lib/lang/id_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Kuota Mailbox'; $wb['limit_spamfilter_wblist_txt'] = 'Jumlah maks filter white/blacklist spamfilter'; $wb['limit_spamfilter_user_txt'] = 'Jumlah maks pengguna spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Jumlah maks kebijakan spamfilter'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'batasan domain'; $wb['limit_subdomain_txt'] = 'batasan subdomain'; $wb['limit_webquota_txt'] = 'batasan kuota web'; diff --git a/interface/web/client/lib/lang/id_reseller.lng b/interface/web/client/lib/lang/id_reseller.lng index 11b0d95d74..58450627ed 100644 --- a/interface/web/client/lib/lang/id_reseller.lng +++ b/interface/web/client/lib/lang/id_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Perusahaan'; $wb['title_txt'] = 'Judul'; $wb['firstname_txt'] = 'Nama Depan'; $wb['surname_txt'] = 'Nama Belakang'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'batasan domain'; $wb['limit_subdomain_txt'] = 'batasan subdomain'; $wb['limit_webquota_txt'] = 'batasan kuota web'; diff --git a/interface/web/client/lib/lang/it_client.lng b/interface/web/client/lib/lang/it_client.lng index 6ad3f11a20..19b2a18b4a 100644 --- a/interface/web/client/lib/lang/it_client.lng +++ b/interface/web/client/lib/lang/it_client.lng @@ -36,6 +36,7 @@ $wb['title_txt'] = 'Titolo'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Cognome'; $wb['limit_client_txt'] = 'Numero massimo clienti'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/it_client_template.lng b/interface/web/client/lib/lang/it_client_template.lng index bc1f90052a..45f4779183 100644 --- a/interface/web/client/lib/lang/it_client_template.lng +++ b/interface/web/client/lib/lang/it_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Num. massimo filtri spam white / blacklist $wb['limit_spamfilter_user_txt'] = 'Num. massimo utenti spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Num. massimo policys spamfilter'; $wb['limit_client_txt'] = 'Num. massimo clienti'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/it_reseller.lng b/interface/web/client/lib/lang/it_reseller.lng index a90a2d8078..f023dcf54d 100644 --- a/interface/web/client/lib/lang/it_reseller.lng +++ b/interface/web/client/lib/lang/it_reseller.lng @@ -36,6 +36,7 @@ $wb['company_txt'] = 'Azienda'; $wb['title_txt'] = 'Titolo'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Cognome'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ja_client.lng b/interface/web/client/lib/lang/ja_client.lng index be88a575cd..6d25b13ce1 100644 --- a/interface/web/client/lib/lang/ja_client.lng +++ b/interface/web/client/lib/lang/ja_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = '社名'; $wb['title_txt'] = '役職'; $wb['firstname_txt'] = '名'; $wb['surname_txt'] = '姓'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ja_client_template.lng b/interface/web/client/lib/lang/ja_client_template.lng index ca83bda97a..768e56cc42 100644 --- a/interface/web/client/lib/lang/ja_client_template.lng +++ b/interface/web/client/lib/lang/ja_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'メールボックスの容量'; $wb['limit_spamfilter_wblist_txt'] = '迷惑メールのホワイトリスト、ブラックリストフィルターの最大数'; $wb['limit_spamfilter_user_txt'] = 'スパムフィルターユーザーの最大数'; $wb['limit_spamfilter_policy_txt'] = '迷惑メールフィルタのポリシーの最大数'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ja_reseller.lng b/interface/web/client/lib/lang/ja_reseller.lng index 1b89262493..1c5851bdfc 100644 --- a/interface/web/client/lib/lang/ja_reseller.lng +++ b/interface/web/client/lib/lang/ja_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = '社名'; $wb['title_txt'] = '役職'; $wb['firstname_txt'] = '名'; $wb['surname_txt'] = '姓'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/nl_client.lng b/interface/web/client/lib/lang/nl_client.lng index 1f4e5d70a1..9d0160da32 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -39,6 +39,7 @@ $wb['company_txt'] = 'Bedrijfsnaam'; $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Voornaam'; $wb['surname_txt'] = 'Achternaam'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limiet_domein'; $wb['limit_subdomain_txt'] = 'limiet_subdomein'; $wb['limit_webquota_txt'] = 'limiet_webquota'; diff --git a/interface/web/client/lib/lang/nl_client_template.lng b/interface/web/client/lib/lang/nl_client_template.lng index 423b4d7b94..d6bfd660e2 100644 --- a/interface/web/client/lib/lang/nl_client_template.lng +++ b/interface/web/client/lib/lang/nl_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. aantal spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. aantal spamfilter gebruikers'; $wb['limit_spamfilter_policy_txt'] = 'Max. aantal spamfilter policys'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limiet_domein'; $wb['limit_subdomain_txt'] = 'limiet_subdomein'; $wb['limit_webquota_txt'] = 'limiet_webquota'; diff --git a/interface/web/client/lib/lang/nl_reseller.lng b/interface/web/client/lib/lang/nl_reseller.lng index 637dddc65d..1cb2abbd9c 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -38,6 +38,7 @@ $wb['company_txt'] = 'Bedrijfnaam'; $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Voornaam'; $wb['surname_txt'] = 'Achternaam'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limiet_domein'; $wb['limit_subdomain_txt'] = 'limiet_subdomein'; $wb['limit_webquota_txt'] = 'limiet_webquota'; diff --git a/interface/web/client/lib/lang/pl_client.lng b/interface/web/client/lib/lang/pl_client.lng index c040e787ae..67ea97fbe6 100644 --- a/interface/web/client/lib/lang/pl_client.lng +++ b/interface/web/client/lib/lang/pl_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Firma'; $wb['title_txt'] = 'Tytuł'; $wb['firstname_txt'] = 'Imię'; $wb['surname_txt'] = 'Nazwisko'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Limit domen'; $wb['limit_subdomain_txt'] = 'Limit subdomen'; $wb['limit_webquota_txt'] = 'Limit pojemności www'; diff --git a/interface/web/client/lib/lang/pl_client_template.lng b/interface/web/client/lib/lang/pl_client_template.lng index 5945310d0c..95e2b48d5d 100644 --- a/interface/web/client/lib/lang/pl_client_template.lng +++ b/interface/web/client/lib/lang/pl_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'Pojemność skrzynki'; $wb['limit_spamfilter_wblist_txt'] = 'Maksymalna ilość filtrów spamu białej / czarnej listy'; $wb['limit_spamfilter_user_txt'] = 'Maksymalna ilość filtrów spamu użytkowników'; $wb['limit_spamfilter_policy_txt'] = 'Maksymalna ilość polityk filtrów spamu'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domen'; $wb['limit_subdomain_txt'] = 'limit_subdomen'; $wb['limit_webquota_txt'] = 'limit_pojemnosci_www'; diff --git a/interface/web/client/lib/lang/pl_reseller.lng b/interface/web/client/lib/lang/pl_reseller.lng index 2762ebc15b..8ada7b86c7 100644 --- a/interface/web/client/lib/lang/pl_reseller.lng +++ b/interface/web/client/lib/lang/pl_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Firma'; $wb['title_txt'] = 'Tytuł'; $wb['firstname_txt'] = 'Imię'; $wb['surname_txt'] = 'Nazwisko'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domen'; $wb['limit_subdomain_txt'] = 'limit_subdomen'; $wb['limit_webquota_txt'] = 'limit_pojemnosci_www'; diff --git a/interface/web/client/lib/lang/pt_client.lng b/interface/web/client/lib/lang/pt_client.lng index 8ce7235079..6b41a2fe3a 100644 --- a/interface/web/client/lib/lang/pt_client.lng +++ b/interface/web/client/lib/lang/pt_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Empresa'; $wb['title_txt'] = 'Título'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Sobrenome'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limite_dominio'; $wb['limit_subdomain_txt'] = 'limit_subdominio'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/pt_client_template.lng b/interface/web/client/lib/lang/pt_client_template.lng index b774a8c410..98cda03d0a 100644 --- a/interface/web/client/lib/lang/pt_client_template.lng +++ b/interface/web/client/lib/lang/pt_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'Espaço de Caixa de Correio'; $wb['limit_spamfilter_wblist_txt'] = 'Número máximo de spamfilter permitidos /lista negra'; $wb['limit_spamfilter_user_txt'] = 'Número máx de utilizadors spamfilter'; $wb['limit_spamfilter_policy_txt'] = 'Número máx de políticas spamfilter'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limite_dominio'; $wb['limit_subdomain_txt'] = 'limite_subdominio'; $wb['limit_webquota_txt'] = 'limite_webquota'; diff --git a/interface/web/client/lib/lang/pt_reseller.lng b/interface/web/client/lib/lang/pt_reseller.lng index 965a446ffb..eeb8f69c05 100644 --- a/interface/web/client/lib/lang/pt_reseller.lng +++ b/interface/web/client/lib/lang/pt_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Empresa'; $wb['title_txt'] = 'Título'; $wb['firstname_txt'] = 'Nome'; $wb['surname_txt'] = 'Sobrenome'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limite_domínio'; $wb['limit_subdomain_txt'] = 'limite_subdomínio'; $wb['limit_webquota_txt'] = 'limite_webquota'; diff --git a/interface/web/client/lib/lang/ro_client.lng b/interface/web/client/lib/lang/ro_client.lng index 5ee1d8aaf6..fdf112f7af 100644 --- a/interface/web/client/lib/lang/ro_client.lng +++ b/interface/web/client/lib/lang/ro_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Companie'; $wb['title_txt'] = 'Titlu'; $wb['firstname_txt'] = 'Prenume'; $wb['surname_txt'] = 'Nume'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limita_domeniu'; $wb['limit_subdomain_txt'] = 'limita_subdomeniu'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ro_client_template.lng b/interface/web/client/lib/lang/ro_client_template.lng index 65e110c2ab..77c024db64 100644 --- a/interface/web/client/lib/lang/ro_client_template.lng +++ b/interface/web/client/lib/lang/ro_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'Mailbox quota'; $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklist filters'; $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ro_reseller.lng b/interface/web/client/lib/lang/ro_reseller.lng index afd557ab18..4d21c7d173 100644 --- a/interface/web/client/lib/lang/ro_reseller.lng +++ b/interface/web/client/lib/lang/ro_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/ru_client.lng b/interface/web/client/lib/lang/ru_client.lng index 70456bd255..920020e9f4 100644 --- a/interface/web/client/lib/lang/ru_client.lng +++ b/interface/web/client/lib/lang/ru_client.lng @@ -37,6 +37,7 @@ $wb['title_txt'] = 'Заголовок'; $wb['firstname_txt'] = 'Имя'; $wb['surname_txt'] = 'Фамилия'; $wb['limit_client_txt'] = 'Макс. количество клиентов'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Лимит доменов'; $wb['limit_subdomain_txt'] = 'Лимит поддоменов'; $wb['limit_webquota_txt'] = 'Лимит Web-квоты'; diff --git a/interface/web/client/lib/lang/ru_client_template.lng b/interface/web/client/lib/lang/ru_client_template.lng index e540984824..94842e9155 100644 --- a/interface/web/client/lib/lang/ru_client_template.lng +++ b/interface/web/client/lib/lang/ru_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Макс. количество прави $wb['limit_spamfilter_user_txt'] = 'Макс. количество пользователей спам-фильтра'; $wb['limit_spamfilter_policy_txt'] = 'Макс. количество правил спам-фильтра'; $wb['limit_client_txt'] = 'Макс. количество клиентов'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Макс. количество доменов'; $wb['limit_subdomain_txt'] = 'Лимит поддоменов'; $wb['limit_webquota_txt'] = 'Лимит Web-квоты'; diff --git a/interface/web/client/lib/lang/ru_reseller.lng b/interface/web/client/lib/lang/ru_reseller.lng index 4b90d0347a..aeac8ab7d7 100644 --- a/interface/web/client/lib/lang/ru_reseller.lng +++ b/interface/web/client/lib/lang/ru_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Компания'; $wb['title_txt'] = 'Заголовок'; $wb['firstname_txt'] = 'Имя'; $wb['surname_txt'] = 'Фамилия'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'Лимит доменов'; $wb['limit_subdomain_txt'] = 'Лимит поддоменов'; $wb['limit_webquota_txt'] = 'Лимит Web-квоты'; diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng index bf585054cd..f9a9b8ef4c 100644 --- a/interface/web/client/lib/lang/se_client.lng +++ b/interface/web/client/lib/lang/se_client.lng @@ -38,6 +38,7 @@ $wb['title_txt'] = 'Titel'; $wb['firstname_txt'] = 'Förnamn'; $wb['surname_txt'] = 'Efternamn'; $wb['limit_client_txt'] = 'Max antal kunder'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'domängräns'; $wb['limit_subdomain_txt'] = 'underdomängräns'; $wb['limit_webquota_txt'] = 'webbsideskvot'; diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng index c9001e42e2..ffffed1971 100644 --- a/interface/web/client/lib/lang/se_client_template.lng +++ b/interface/web/client/lib/lang/se_client_template.lng @@ -15,6 +15,7 @@ $wb['limit_spamfilter_wblist_txt'] = 'Max. number of spamfilter white / blacklis $wb['limit_spamfilter_user_txt'] = 'Max. number of spamfilter users'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; $wb['limit_client_txt'] = 'Max. number of Clients'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng index afd557ab18..4d21c7d173 100644 --- a/interface/web/client/lib/lang/se_reseller.lng +++ b/interface/web/client/lib/lang/se_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Company'; $wb['title_txt'] = 'Title'; $wb['firstname_txt'] = 'Firstname'; $wb['surname_txt'] = 'Surname'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/sk_client.lng b/interface/web/client/lib/lang/sk_client.lng index cfaced0561..980ae85335 100644 --- a/interface/web/client/lib/lang/sk_client.lng +++ b/interface/web/client/lib/lang/sk_client.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Spoločnosť'; $wb['title_txt'] = 'Názov'; $wb['firstname_txt'] = 'Krstné meno'; $wb['surname_txt'] = 'Priezvisko'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domén'; $wb['limit_subdomain_txt'] = 'limit_subdomén'; $wb['limit_webquota_txt'] = 'limit_webkvóta'; diff --git a/interface/web/client/lib/lang/sk_client_template.lng b/interface/web/client/lib/lang/sk_client_template.lng index 9a602da093..14172a1f62 100644 --- a/interface/web/client/lib/lang/sk_client_template.lng +++ b/interface/web/client/lib/lang/sk_client_template.lng @@ -14,6 +14,7 @@ $wb['limit_mailquota_txt'] = 'Kvóta schránky'; $wb['limit_spamfilter_wblist_txt'] = 'Max. počet Spamfilter bielych / čiernych listín filtrov'; $wb['limit_spamfilter_user_txt'] = 'Max. počet poUžívateľských Spamfilterov'; $wb['limit_spamfilter_policy_txt'] = 'Max. number of spamfilter policies'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domén'; $wb['limit_subdomain_txt'] = 'limit_subdomén'; $wb['limit_webquota_txt'] = 'limit_webkvôt'; diff --git a/interface/web/client/lib/lang/sk_reseller.lng b/interface/web/client/lib/lang/sk_reseller.lng index 47dbd4f64c..040ffc47ca 100644 --- a/interface/web/client/lib/lang/sk_reseller.lng +++ b/interface/web/client/lib/lang/sk_reseller.lng @@ -37,6 +37,7 @@ $wb['company_txt'] = 'Spoločnosť'; $wb['title_txt'] = 'Nadpis'; $wb['firstname_txt'] = 'Krstné meno'; $wb['surname_txt'] = 'Priezvisko'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domén'; $wb['limit_subdomain_txt'] = 'limit_subdomén'; $wb['limit_webquota_txt'] = 'limit_webkvóta'; diff --git a/interface/web/client/lib/lang/tr_client.lng b/interface/web/client/lib/lang/tr_client.lng index a922525b67..5e6e55f543 100644 --- a/interface/web/client/lib/lang/tr_client.lng +++ b/interface/web/client/lib/lang/tr_client.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Kuruluş'; $wb['title_txt'] = 'Unvan'; $wb['firstname_txt'] = 'Ad'; $wb['surname_txt'] = 'Soyad'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/tr_client_template.lng b/interface/web/client/lib/lang/tr_client_template.lng index 64b54bb30e..84c7fa0543 100644 --- a/interface/web/client/lib/lang/tr_client_template.lng +++ b/interface/web/client/lib/lang/tr_client_template.lng @@ -19,6 +19,7 @@ $wb['limit_mailquota_txt'] = 'E-posta Kutusu Kotası'; $wb['limit_spamfilter_wblist_txt'] = 'En Fazla Önemsiz İleti Beyaz/Kara Liste Süzgeci Sayısı'; $wb['limit_spamfilter_user_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kullanıcı Sayısı'; $wb['limit_spamfilter_policy_txt'] = 'En Fazla Önemsiz İleti Süzgeci Kuralı Sayısı'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; diff --git a/interface/web/client/lib/lang/tr_reseller.lng b/interface/web/client/lib/lang/tr_reseller.lng index 023bc08197..169d8c5ea4 100644 --- a/interface/web/client/lib/lang/tr_reseller.lng +++ b/interface/web/client/lib/lang/tr_reseller.lng @@ -40,6 +40,7 @@ $wb['company_txt'] = 'Kuruluş'; $wb['title_txt'] = 'Unvan'; $wb['firstname_txt'] = 'Adı'; $wb['surname_txt'] = 'Soyadı'; +$wb['limit_relayhost_txt'] = 'Show SMTP relay host options'; $wb['limit_domain_txt'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; -- GitLab From 77d6c59041f96fa1c1156b8588a6bbe59ff20bf4 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Mon, 8 Mar 2021 01:14:12 +0100 Subject: [PATCH 217/403] Move relay check to logical place (#6088) --- interface/web/mail/mail_domain_edit.php | 34 ++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index 360487ef1a..aedc1f1043 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -190,23 +190,6 @@ class page_action extends tform_actions { $app->tpl->setVar("domain_module", 0); } - // Check wether per domain relaying is enabled or not - $global_config = $app->getconf->get_global_config('mail'); - if($global_config['show_per_domain_relay_options'] == 'y') { - $app->tpl->setVar("show_per_domain_relay_options", 1); - } else { - $app->tpl->setVar("show_per_domain_relay_options", 0); - } - - // Get the limits of the client - $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); - $client = $app->db->queryOneRecord("SELECT limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); - if ($client["limit_relayhost"] == 'y' || $_SESSION["s"]["user"]["typ"] == 'admin') { - $app->tpl->setVar("limit_relayhost", 1); - } else { - $app->tpl->setVar("limit_relayhost", 0); - } - // Get the spamfilter policys for the user $tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = ?", '@' . $this->dataRecord["domain"]); $sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r')." ORDER BY policy_name"; @@ -231,6 +214,23 @@ class page_action extends tform_actions { $app->tpl->setVar("edit_disabled", 0); } + // Check wether per domain relaying is enabled or not + $global_config = $app->getconf->get_global_config('mail'); + if($global_config['show_per_domain_relay_options'] == 'y') { + $app->tpl->setVar("show_per_domain_relay_options", 1); + } else { + $app->tpl->setVar("show_per_domain_relay_options", 0); + } + + // Get the limits of the client + $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); + $client = $app->db->queryOneRecord("SELECT limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + if ($client["limit_relayhost"] == 'y' || $_SESSION["s"]["user"]["typ"] == 'admin') { + $app->tpl->setVar("limit_relayhost", 1); + } else { + $app->tpl->setVar("limit_relayhost", 0); + } + // load relayhost-values if ($client["limit_relayhost"] == 'y') { $sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?"; -- GitLab From fc69abab6dce6133f7e04d1552a5873c24c5e688 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 9 Mar 2021 16:05:26 -0700 Subject: [PATCH 218/403] ispcmail: STARTTLS resets smtp connection and requires second EHLO --- interface/lib/classes/ispcmail.inc.php | 6 ++++-- server/lib/classes/ispcmail.inc.php | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php index fbf5f84dca..f5aa359577 100644 --- a/interface/lib/classes/ispcmail.inc.php +++ b/interface/lib/classes/ispcmail.inc.php @@ -612,6 +612,9 @@ class ispcmail { if (stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method) != true) { return false; } + + fputs($this->_smtp_conn, 'HELO ' . $this->smtp_helo . $this->_crlf); + $response = fgets($this->_smtp_conn, 515); } //AUTH LOGIN @@ -824,8 +827,7 @@ class ispcmail { else $rec_string .= $recip; } $to = $this->_encodeHeader($rec_string, $this->mail_charset); - //$result = mail($to, $subject, $this->body, implode($this->_crlf, $headers)); - $result = mail($to, $enc_subject, $this->body, implode($this->_crlf, $headers)); + $result = mail($to, $enc_subject, $this->body, implode($this->_crlf, $headers), "-f $this->_mail_sender"); } // Reset the subject in case mail is resent diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php index 2b3dc78cfc..f5aa359577 100644 --- a/server/lib/classes/ispcmail.inc.php +++ b/server/lib/classes/ispcmail.inc.php @@ -612,6 +612,9 @@ class ispcmail { if (stream_socket_enable_crypto($this->_smtp_conn, true, $crypto_method) != true) { return false; } + + fputs($this->_smtp_conn, 'HELO ' . $this->smtp_helo . $this->_crlf); + $response = fgets($this->_smtp_conn, 515); } //AUTH LOGIN -- GitLab From 3a8be5d6940bee7f2b1c728d4cc5b312925056e6 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 9 Mar 2021 16:36:15 -0700 Subject: [PATCH 219/403] bind: create slave subdirectory recursively --- server/plugins-available/bind_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index 017203f67b..76b3582379 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -452,7 +452,7 @@ class bind_plugin { //* Ensure that the named slave directory is writable by the named user $slave_record_dir = $dns_config['bind_zonefiles_dir'].'/'.$this->slave_zone_file_prefix(); - if(!@is_dir($slave_record_dir)) mkdir($slave_record_dir, 0770); + if(!@is_dir($slave_record_dir)) mkdir($slave_record_dir, 0770, true); chown($slave_record_dir, $dns_config['bind_user']); chgrp($slave_record_dir, $dns_config['bind_group']); -- GitLab From fd5edc4f675e073090f70dd4ca2d46f816a1ee19 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 9 Mar 2021 17:04:40 -0700 Subject: [PATCH 220/403] don't rename postfix/dovecot local config override templates --- install/lib/update.lib.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php index 33b89786a6..d88d64d6cd 100644 --- a/install/lib/update.lib.php +++ b/install/lib/update.lib.php @@ -473,12 +473,22 @@ function checkAndRenameCustomTemplates($default_prompt='no') { '/usr/local/ispconfig/server/conf-custom/install', ); + $override_templates = array( + 'postfix_custom.conf.master', + 'dovecot_custom.conf.master', + ); + $found_templates = array(); + $found_override_templates = array(); foreach ($template_directories as $dir) { if (!is_dir($dir)) { continue; } foreach (glob("$dir/*.master") as $f) { if (is_file($f)) { - $found_templates[] = $f; + if (in_array( basename($f), $override_templates )) { + $found_override_templates[] = $f; + } else { + $found_templates[] = $f; + } } } } @@ -501,6 +511,11 @@ function checkAndRenameCustomTemplates($default_prompt='no') { } } + if (count($found_override_templates) > 0) { + echo "The following local config override templates were found, be sure to incorporate upstream changes if needed:\n\n"; + echo implode("\n", $found_override_templates) . "\n\n"; + } + return $ret; } -- GitLab From 3f665700e9cabe33580dfefcfde3c21f8619ccd4 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 10 Mar 2021 06:49:47 +0000 Subject: [PATCH 221/403] Apply 1 suggestion(s) to 1 file(s) --- server/lib/classes/letsencrypt.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 559ba79689..5f918f016d 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -167,7 +167,7 @@ class letsencrypt { $cert_selection_command = "--expand"; } - $cmd = $letsencrypt . " certonly -n --text --agree-tos $cert_selection_command --authenticator webroot --server $acme_version --rsa-key-size 4096 --email postmaster@$primary_domain $webroot_args"; + $cmd = $letsencrypt . " certonly -n --text --agree-tos $cert_selection_command --authenticator webroot --server $acme_version --rsa-key-size 4096 --email webmaster@$primary_domain $webroot_args"; return $cmd; } -- GitLab From 44cf3d18264c349252918e527b6d07f75c5c86c3 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 10 Mar 2021 12:54:54 +0000 Subject: [PATCH 222/403] Apply 1 suggestion(s) to 1 file(s) --- install/tpl/jk_init.ini.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/jk_init.ini.master b/install/tpl/jk_init.ini.master index 274c0388df..c1b19326e6 100644 --- a/install/tpl/jk_init.ini.master +++ b/install/tpl/jk_init.ini.master @@ -185,7 +185,7 @@ paths = env [php] comment = default php version and libraries paths = /usr/bin/php -includesections = php_common +includesections = php_common, php7_3 [php_common] comment = common php directories and libraries -- GitLab From 3f2704af6c7684acfe8db55a0c5d3d803abd1dad Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 10 Mar 2021 14:29:12 +0100 Subject: [PATCH 223/403] - add chekc whether to delete rspamd conf file for user --- server/plugins-available/rspamd_plugin.inc.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index 09ed09a436..c9bfedf322 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -220,7 +220,17 @@ class rspamd_plugin { $settings_file = $this->users_config_dir . str_replace('@', '_', $settings_name) . '.conf'; //$app->log('Settings file for rspamd is ' . $settings_file, LOGLEVEL_WARN); if($mode === 'delete') { - if(is_file($settings_file)) { + $delete_file = true; + if($type === 'spamfilter_user') { + $search_for_policy[] = $email_address; + $search_for_policy[] = substr($email_address, strpos($email_address, '@')); + + $policy = $app->db->queryOneRecord("SELECT p.* FROM spamfilter_users as u INNER JOIN spamfilter_policy as p ON (p.id = u.policy_id) WHERE u.server_id = ? AND u.email IN ? ORDER BY u.priority DESC", $conf['server_id'], $search_for_policy); + if($policy) { + $delete_file = false; + } + } + if($delete_file === true && is_file($settings_file)) { unlink($settings_file); } } else { -- GitLab From 0c3e00e722fb0cb75554fe81b2fa9e89ce21793b Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 10 Mar 2021 15:13:27 +0100 Subject: [PATCH 224/403] - update all depending entries on domain update --- interface/web/mail/mail_domain_edit.php | 40 +++++++++---------- .../plugins-available/rspamd_plugin.inc.php | 28 ++++++++++++- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index 3ea60c08f9..7794023255 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -226,13 +226,13 @@ class page_action extends tform_actions { $sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?"; $rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id'])); $dns_key = str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$rec['dkim_public']); - + $keyparts = str_split('v=DKIM1; t=s; p=' . $dns_key, 200); array_walk($keyparts, function(&$value, $key) { $value = '"'.$value.'"'; } ); $dkim_txt = implode('', $keyparts); $dns_record = $rec['dkim_selector'] . '._domainkey.' . $rec['domain'] . '. 3600 IN TXT '.$dkim_txt; - + $app->tpl->setVar('dkim_selector', $rec['dkim_selector'], true); $app->tpl->setVar('dkim_private', $rec['dkim_private'], true); $app->tpl->setVar('dkim_public', $rec['dkim_public'], true); @@ -296,7 +296,7 @@ class page_action extends tform_actions { $this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]); $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]); } - + //* server_id must be > 0 if(isset($this->dataRecord["server_id"]) && $this->dataRecord["server_id"] < 1) $app->tform->errorMessage .= $app->lng("server_id_0_error_txt"); @@ -305,7 +305,7 @@ class page_action extends tform_actions { function onAfterInsert() { global $app, $conf; - + $domain = $app->functions->idn_encode($this->dataRecord["domain"]); // Spamfilter policy @@ -319,10 +319,10 @@ class page_action extends tform_actions { $tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id); // We create a new record $insert_data = array( - "sys_userid" => $_SESSION["s"]["user"]["userid"], + "sys_userid" => $_SESSION["s"]["user"]["userid"], "sys_groupid" => $tmp_domain["sys_groupid"], - "sys_perm_user" => 'riud', - "sys_perm_group" => 'riud', + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', "sys_perm_other" => '', "server_id" => $this->dataRecord["server_id"], "priority" => 5, @@ -350,7 +350,7 @@ class page_action extends tform_actions { function onBeforeUpdate() { global $app, $conf; - + $domain = $app->functions->idn_encode($this->dataRecord["domain"]); //* Check if the server has been changed @@ -381,7 +381,7 @@ class page_action extends tform_actions { global $app, $conf; $domain = $app->functions->idn_encode($this->dataRecord["domain"]); - + // Spamfilter policy $policy_id = $app->functions->intval($this->dataRecord["policy"]); $tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain); @@ -393,10 +393,10 @@ class page_action extends tform_actions { $tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id); // We create a new record $insert_data = array( - "sys_userid" => $_SESSION["s"]["user"]["userid"], + "sys_userid" => $_SESSION["s"]["user"]["userid"], "sys_groupid" => $tmp_domain["sys_groupid"], - "sys_perm_user" => 'riud', - "sys_perm_group" => 'riud', + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', "sys_perm_other" => '', "server_id" => $this->dataRecord["server_id"], "priority" => 5, @@ -422,7 +422,7 @@ class page_action extends tform_actions { //* Update the mailboxes $mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like ?", '%@' . $this->oldDataRecord['domain']); $sys_groupid = $app->functions->intval((isset($this->dataRecord['client_group_id']))?$this->dataRecord['client_group_id']:$this->oldDataRecord['sys_groupid']); - $tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $client_group_id); + $tmp = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE default_group = ?", $sys_groupid); $client_user_id = $app->functions->intval(($tmp['userid'] > 0)?$tmp['userid']:1); if(is_array($mailusers)) { foreach($mailusers as $rec) { @@ -447,7 +447,7 @@ class page_action extends tform_actions { //* Update the mailinglist $app->db->query("UPDATE mail_mailinglist SET sys_userid = ?, sys_groupid = ? WHERE domain = ?", $client_user_id, $sys_groupid, $this->oldDataRecord['domain']); - + //* Update fetchmail accounts $fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like ?", '%@' . $this->oldDataRecord['domain']); if(is_array($fetchmail)) { @@ -456,7 +456,7 @@ class page_action extends tform_actions { $app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']); } } - + //* Delete the old spamfilter record $tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->oldDataRecord["domain"]); $app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]); @@ -467,10 +467,10 @@ class page_action extends tform_actions { //* update dns-record when the dkim record was changed // NOTE: only if the domain-name was not changed if ( $this->dataRecord['active'] == 'y' && $domain == $this->oldDataRecord['domain'] ) { - $dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; + $dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false; $selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false; $dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false; - + $soaDomain = $domain.'.'; while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) { $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $soaDomain); @@ -493,7 +493,7 @@ class page_action extends tform_actions { $soa_id = $app->functions->intval($soa['zone']); $serial = $app->validate_dns->increase_serial($soa["serial"]); $app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id); - } + } } } @@ -510,8 +510,8 @@ class page_action extends tform_actions { $app->db->datalogDelete('dns_rr', 'id', $r['id']); } } - - // also delete a dsn-records with same selector + + // also delete a dsn-records with same selector $sql = "SELECT * from dns_rr WHERE name ? AND data LIKE 'v=DKIM1%' AND " . $app->tform->getAuthSQL('r'); $rec = $app->db->queryAllRecords($sql, '._domainkey.'.$dataRecord['dkim_selector'].'.', $dataRecord['domain']); if (is_array($rec)) diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index c9bfedf322..d9b62f858a 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -139,7 +139,7 @@ class rspamd_plugin { $app->plugins->registerEvent('mail_forwarding_delete', $this->plugin_name, 'user_settings_update'); } - function user_settings_update($event_name, $data) { + function user_settings_update($event_name, $data, $internal = false) { global $app, $conf; if(!is_dir('/etc/rspamd')) { @@ -206,6 +206,23 @@ class rspamd_plugin { return; } + $entries_to_update = [ + 'mail_user' => [], + 'mail_forwarding' => [] + ]; + if($is_domain === true) { + // get all child records to update / delete + $mailusers = $app->db->queryAllRecords("SELECT mu.* FROM mail_user as mu LEFT JOIN spamfilter_users as su ON (su.email = mu.email) WHERE mu.email LIKE ? AND su.id IS NULL", '%' . $email_address); + if(is_array($mailusers) && !empty($mailusers)) { + $entries_to_update['mail_user'] = $mailusers; + } + + $forwardings = $app->db->queryAllRecords("SELECT mf.* FROM mail_forwarding as mf LEFT JOIN spamfilter_users as su ON (su.email = mf.source) WHERE mf.source LIKE ? AND su.id IS NULL", '%' . $email_address); + if(is_array($forwardings) && !empty($forwardings)) { + $entries_to_update['mail_forwarding'] = $forwardings; + } + } + $old_settings_name = $settings_name; $settings_name = $app->functions->idn_encode($settings_name); @@ -328,7 +345,14 @@ class rspamd_plugin { } } - if($mail_config['content_filter'] == 'rspamd'){ + foreach($entries_to_update['mail_user'] as $entry) { + $this->user_settings_update('mail_user_' . $mode, $entry, true); + } + foreach($entries_to_update['mail_forwarding'] as $entry) { + $this->user_settings_update('mail_forwarding_' . $mode, $entry, true); + } + + if($internal !== true && $mail_config['content_filter'] == 'rspamd'){ $app->services->restartServiceDelayed('rspamd', 'reload'); } } -- GitLab From 0362bafa2f1b3b939cf72f2347b7f38ba27f361e Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 10 Mar 2021 15:14:12 +0100 Subject: [PATCH 225/403] - added check --- server/plugins-available/rspamd_plugin.inc.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index d9b62f858a..e369f5cdaf 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -345,11 +345,13 @@ class rspamd_plugin { } } - foreach($entries_to_update['mail_user'] as $entry) { - $this->user_settings_update('mail_user_' . $mode, $entry, true); - } - foreach($entries_to_update['mail_forwarding'] as $entry) { - $this->user_settings_update('mail_forwarding_' . $mode, $entry, true); + if($is_domain === true) { + foreach($entries_to_update['mail_user'] as $entry) { + $this->user_settings_update('mail_user_' . $mode, $entry, true); + } + foreach($entries_to_update['mail_forwarding'] as $entry) { + $this->user_settings_update('mail_forwarding_' . $mode, $entry, true); + } } if($internal !== true && $mail_config['content_filter'] == 'rspamd'){ -- GitLab From cd029fa6b89b6224a2165354ffbc290beff6ca41 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Wed, 10 Mar 2021 23:26:16 +0100 Subject: [PATCH 226/403] Don't remove current value if client does not have rights to see/change relayhost settings --- interface/web/mail/mail_domain_edit.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php index aedc1f1043..2d4ee1bc3e 100644 --- a/interface/web/mail/mail_domain_edit.php +++ b/interface/web/mail/mail_domain_edit.php @@ -285,8 +285,14 @@ class page_action extends tform_actions { // When the record is updated if($this->id > 0) { // restore the server ID if the user is not admin and record is edited - $tmp = $app->db->queryOneRecord("SELECT server_id FROM mail_domain WHERE domain_id = ?", $this->id); + $tmp = $app->db->queryOneRecord("SELECT server_id, relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?", $this->id); $this->dataRecord["server_id"] = $tmp["server_id"]; + + // set the settings to current if not provided (or cleared due to limits) + if($this->dataRecord['relay_host'] == '') $this->dataRecord['relay_host'] = $tmp['relay_host']; + if($this->dataRecord['relay_user'] == '') $this->dataRecord['relay_user'] = $tmp['relay_user']; + if($this->dataRecord['relay_pass'] == '') $this->dataRecord['relay_pass'] = $tmp['relay_pass']; + unset($tmp); // When the record is inserted } else { -- GitLab From 6b059d8176f8436744826f40c46669eea31ff481 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Thu, 11 Mar 2021 13:08:40 +0100 Subject: [PATCH 227/403] Hide limit for usage of relay host when this is globally disabled --- .../web/client/templates/client_edit_limits.htm | 2 ++ .../templates/client_template_edit_limits.htm | 14 ++++++++------ .../web/client/templates/reseller_edit_limits.htm | 14 ++++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 2b4b134a5a..b7a0ccf69c 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -235,12 +235,14 @@
+
{tmpl_var name='limit_relayhost'}
+
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm index 680bc427d8..8aa6d87ac7 100644 --- a/interface/web/client/templates/client_template_edit_limits.htm +++ b/interface/web/client/templates/client_template_edit_limits.htm @@ -192,12 +192,14 @@
-
- -
- {tmpl_var name='limit_relayhost'} -
-
+ +
+ +
+ {tmpl_var name='limit_relayhost'} +
+
+
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm index fa2c3705c9..cbc8c38c57 100644 --- a/interface/web/client/templates/reseller_edit_limits.htm +++ b/interface/web/client/templates/reseller_edit_limits.htm @@ -236,12 +236,14 @@
-
- -
- {tmpl_var name='limit_relayhost'} -
-
+ +
+ +
+ {tmpl_var name='limit_relayhost'} +
+
+
-- GitLab From 1deb325d85edb4f95157c9f9e3acde21297aa841 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 11 Mar 2021 13:54:43 +0100 Subject: [PATCH 228/403] - fixed update of entries --- server/plugins-available/rspamd_plugin.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index e369f5cdaf..41f6b08f40 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -347,10 +347,10 @@ class rspamd_plugin { if($is_domain === true) { foreach($entries_to_update['mail_user'] as $entry) { - $this->user_settings_update('mail_user_' . $mode, $entry, true); + $this->user_settings_update('mail_user_' . $mode, ['old' => $entry, 'new' => $entry], true); } foreach($entries_to_update['mail_forwarding'] as $entry) { - $this->user_settings_update('mail_forwarding_' . $mode, $entry, true); + $this->user_settings_update('mail_forwarding_' . $mode, ['old' => $entry, 'new' => $entry], true); } } -- GitLab From 73836bc7b8d0282ad041e4b748438d3adc9bd379 Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Thu, 11 Mar 2021 15:13:16 +0100 Subject: [PATCH 229/403] Fix global enabling/disabling of relay host options --- .../web/admin/form/system_config.tform.php | 1 + interface/web/client/client_edit.php | 44 ++++++++++------- interface/web/client/client_template_edit.php | 20 ++++++-- interface/web/client/reseller_edit.php | 48 +++++++++++-------- 4 files changed, 71 insertions(+), 42 deletions(-) diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index f66a48cb12..c7d15ffcf4 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -277,6 +277,7 @@ $form["tabs"]['mail'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') ), 'mailbox_show_autoresponder_tab' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php index bbc7849f1f..3d2e4e805d 100644 --- a/interface/web/client/client_edit.php +++ b/interface/web/client/client_edit.php @@ -92,7 +92,7 @@ class page_action extends tform_actions { } } } - + //* Resellers shall not be able to create another reseller if($_SESSION["s"]["user"]["typ"] == 'user') { $this->dataRecord['limit_client'] = 0; @@ -181,18 +181,26 @@ class page_action extends tform_actions { $app->tpl->setVar('template_additional_list', $text); $app->tpl->setVar('app_module', 'client'); - + + // Check wether per domain relaying is enabled or not + $global_config = $app->getconf->get_global_config('mail'); + if($global_config['show_per_domain_relay_options'] == 'y') { + $app->tpl->setVar("show_per_domain_relay_options", 1); + } else { + $app->tpl->setVar("show_per_domain_relay_options", 0); + } + //* Set the 'customer no' default value if($this->id == 0) { - + if($app->auth->is_admin()) { //* Logged in User is admin //* get the system config $app->uses('getconf'); $system_config = $app->getconf->get_global_config(); if($system_config['misc']['customer_no_template'] != '') { - + //* Set customer no default $customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']); $customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']); @@ -203,7 +211,7 @@ class page_action extends tform_actions { //* get the record of the reseller $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id); - + if($reseller['customer_no_template'] != '') { if(isset($this->dataRecord['customer_no'])&& $this->dataRecord['customer_no']!='') $customer_no_string = $this->dataRecord['customer_no']; else { @@ -215,7 +223,7 @@ class page_action extends tform_actions { } } } - + if($app->auth->is_admin()) { // Fill the client select field $sql = "SELECT client.client_id, sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 AND client.limit_client != 0 ORDER BY client.company_name, client.contact_name, sys_group.name"; @@ -234,7 +242,7 @@ class page_action extends tform_actions { } $app->tpl->setVar("parent_client_id", $client_select); } - + parent::onShowEnd(); } @@ -317,7 +325,7 @@ class page_action extends tform_actions { $app->uses('client_templates'); $app->client_templates->update_client_templates($this->id, $this->_template_additional); } - + if($this->dataRecord['customer_no'] == $this->dataRecord['customer_no_org']) { if($app->auth->is_admin()) { //* Logged in User is admin @@ -325,7 +333,7 @@ class page_action extends tform_actions { $app->uses('getconf'); $system_config = $app->getconf->get_global_config(); if($system_config['misc']['customer_no_template'] != '') { - + //* save new counter value $system_config['misc']['customer_no_counter']++; $system_config_str = $app->ini_parser->get_ini_string($system_config); @@ -336,7 +344,7 @@ class page_action extends tform_actions { //* get the record of the reseller $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ?", $client_group_id); - + if($reseller['customer_no_template'] != '') { //* save new counter value $customer_no_counter = $app->functions->intval($reseller['customer_no_counter']+1); @@ -344,7 +352,7 @@ class page_action extends tform_actions { } } } - + //* Send welcome email $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ?"; @@ -369,7 +377,7 @@ class page_action extends tform_actions { $subject = str_replace('{'.$key.'}', $val, $subject); } } - + //* Get sender address if($app->auth->is_admin()) { $app->uses('getconf'); @@ -384,7 +392,7 @@ class page_action extends tform_actions { //* Send the email $app->functions->mail($client['email'], $subject, $message, $from); } - + parent::onAfterInsert(); } @@ -466,7 +474,7 @@ class page_action extends tform_actions { $active_col = 'disablesmtp'; $reverse = true; } - + if(!isset($prev_active[$current])) $prev_active[$current] = array(); if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array(); @@ -498,7 +506,7 @@ class page_action extends tform_actions { $active_col = 'disablesmtp'; $reverse = true; } - + $entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid); foreach($entries as $item) { $set_active = ($reverse == true ? 'n' : 'y'); @@ -551,14 +559,14 @@ class page_action extends tform_actions { $sql = "UPDATE sys_user SET modules = ? WHERE client_id = ?"; $app->db->query($sql, $modules, $client_id); } - + //* Client has been moved to another reseller if($_SESSION['s']['user']['typ'] == 'admin' && isset($this->dataRecord['parent_client_id']) && $this->dataRecord['parent_client_id'] != $this->oldDataRecord['parent_client_id']) { //* Get groupid of the client $tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $this->id); $groupid = $tmp['groupid']; unset($tmp); - + //* Remove sys_user of old reseller from client group if($this->oldDataRecord['parent_client_id'] > 0) { //* get userid of the old reseller remove it from the group of the client @@ -566,7 +574,7 @@ class page_action extends tform_actions { $app->auth->remove_group_from_user($tmp['userid'], $groupid); unset($tmp); } - + //* Add sys_user of new reseller to client group if($this->dataRecord['parent_client_id'] > 0) { //* get userid of the reseller and add it to the group of the client diff --git a/interface/web/client/client_template_edit.php b/interface/web/client/client_template_edit.php index 8ae08b965e..dc43d90de3 100644 --- a/interface/web/client/client_template_edit.php +++ b/interface/web/client/client_template_edit.php @@ -51,19 +51,31 @@ $app->load('tform_actions'); class page_action extends tform_actions { - + function onSubmit() { global $app; - + //* Resellers shall not be able to create another reseller or set reseller specific settings if($_SESSION["s"]["user"]["typ"] == 'user') { $this->dataRecord['limit_client'] = 0; $this->dataRecord['limit_domainmodule'] = 0; } - + parent::onSubmit(); } - + + function onShowEnd() { + global $app; + // Check wether per domain relaying is enabled or not + $global_config = $app->getconf->get_global_config('mail'); + if($global_config['show_per_domain_relay_options'] == 'y') { + $app->tpl->setVar("show_per_domain_relay_options", 1); + } else { + $app->tpl->setVar("show_per_domain_relay_options", 0); + } + parent::onShowEnd(); + } + function onBeforeUpdate() { global $app; diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php index 3078e01fbc..78ee149e77 100644 --- a/interface/web/client/reseller_edit.php +++ b/interface/web/client/reseller_edit.php @@ -94,7 +94,7 @@ class page_action extends tform_actions { } } } - + if($this->id != 0) { $this->oldTemplatesAssigned = $app->db->queryAllRecords('SELECT * FROM `client_template_assigned` WHERE `client_id` = ?', $this->id); if(!is_array($this->oldTemplatesAssigned) || count($this->oldTemplatesAssigned) < 1) { @@ -175,21 +175,29 @@ class page_action extends tform_actions { $app->tpl->setVar('template_additional_list', $text); $app->tpl->setVar('app_module', 'client'); - + + // Check wether per domain relaying is enabled or not + $global_config = $app->getconf->get_global_config('mail'); + if($global_config['show_per_domain_relay_options'] == 'y') { + $app->tpl->setVar("show_per_domain_relay_options", 1); + } else { + $app->tpl->setVar("show_per_domain_relay_options", 0); + } + //* Set the 'customer no' default value if($this->id == 0) { //* get the system config $app->uses('getconf'); $system_config = $app->getconf->get_global_config(); if($system_config['misc']['customer_no_template'] != '') { - + //* Set customer no default $customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']); $customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']); $app->tpl->setVar('customer_no',$customer_no_string); } } - + parent::onShowEnd(); } @@ -200,9 +208,9 @@ class page_action extends tform_actions { */ function onAfterInsert() { global $app, $conf; - + $app->uses('auth'); - + // Create the group for the reseller $groupid = $app->db->datalogInsert('sys_group', array("name" => $this->dataRecord["username"], "description" => '', "client_id" => $this->id), 'groupid'); $groups = $groupid; @@ -217,7 +225,7 @@ class page_action extends tform_actions { $language = $this->dataRecord["language"]; $password = $app->auth->crypt_password(stripslashes($password)); - + // Create the controlpaneluser for the reseller $sql = "INSERT INTO sys_user (`username`,`passwort`,`modules`,`startmodule`,`app_theme`,`typ`, `active`,`language`,`groups`,`default_group`,`client_id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; @@ -238,26 +246,26 @@ class page_action extends tform_actions { $sql = "UPDATE client SET default_mailserver = ?, default_webserver = ?, default_dnsserver = ?, default_slave_dnsserver = ?, default_dbserver = ? WHERE client_id = ?"; $app->db->query($sql, $default_mailserver, $default_webserver, $default_dnsserver, $default_dnsserver, $default_dbserver, $this->id); - + if(isset($this->dataRecord['template_master'])) { $app->uses('client_templates'); $app->client_templates->update_client_templates($this->id, $this->_template_additional); } - + if($this->dataRecord['customer_no'] == $this->dataRecord['customer_no_org']) { //* get the system config $app->uses('getconf'); $system_config = $app->getconf->get_global_config(); if($system_config['misc']['customer_no_template'] != '') { - + //* save new counter value $system_config['misc']['customer_no_counter']++; $system_config_str = $app->ini_parser->get_ini_string($system_config); $app->db->datalogUpdate('sys_ini', array("config" => $system_config_str), 'sysini_id', 1); - + } } - + //* Send welcome email $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); $sql = "SELECT * FROM client_message_template WHERE template_type = 'welcome' AND sys_groupid = ?"; @@ -283,7 +291,7 @@ class page_action extends tform_actions { $subject = str_replace('{'.$key.'}', $val, $subject); } } - + //* Get sender address if($app->auth->is_admin()) { $app->uses('getconf'); @@ -311,7 +319,7 @@ class page_action extends tform_actions { global $app, $conf; $app->uses('auth'); - + // username changed if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) { $username = $this->dataRecord["username"]; @@ -328,7 +336,7 @@ class page_action extends tform_actions { if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') { $password = $this->dataRecord["password"]; $client_id = $this->id; - + $password = $app->auth->crypt_password(stripslashes($password)); $sql = "UPDATE sys_user SET passwort = ? WHERE client_id = ?"; $app->db->query($sql, $password, $client_id); @@ -357,12 +365,12 @@ class page_action extends tform_actions { $sql = "UPDATE sys_user SET modules = ? WHERE client_id = ?"; $app->db->query($sql, $modules, $client_id); } - + if(isset($this->dataRecord['template_master'])) { $app->uses('client_templates'); $app->client_templates->update_client_templates($this->id, $this->_template_additional); } - + if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n'; if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["locked"] != $this->oldDataRecord['locked']) { /** lock all the things like web, mail etc. - easy to extend */ @@ -412,7 +420,7 @@ class page_action extends tform_actions { $active_col = 'disablesmtp'; $reverse = true; } - + if(!isset($prev_active[$current])) $prev_active[$current] = array(); if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array(); @@ -444,7 +452,7 @@ class page_action extends tform_actions { $active_col = 'disablesmtp'; $reverse = true; } - + $entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid); foreach($entries as $item) { $set_active = ($reverse == true ? 'n' : 'y'); @@ -469,7 +477,7 @@ class page_action extends tform_actions { unset($entries); unset($to_disable); } - + if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n'; if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) { if($this->dataRecord['canceled'] == 'y') { -- GitLab From 3c5d2328daf31077c640931314cf9e30185e6a1e Mon Sep 17 00:00:00 2001 From: Thom Pol <> Date: Thu, 11 Mar 2021 15:41:17 +0100 Subject: [PATCH 230/403] Fix critical error with new custom Postfix config --- 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 6302571cf9..6de768f7e5 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1177,7 +1177,7 @@ class installer_base { } $configfile = 'postfix_custom.conf'; if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/' . $configfile . '.master')) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master'); + $content = file_get_contents($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master'); $content = strtr($content, $postconf_placeholders); $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); } -- GitLab From 1b0fea4985d76c5cf2061037866d3094a978e82f Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 3 Mar 2021 16:46:44 -0700 Subject: [PATCH 231/403] rspam: add fields to set redis servers and password --- install/lib/installer_base.lib.php | 50 +++++++++++----- .../tpl/rspamd_classifier-bayes.conf.master | 4 +- install/tpl/rspamd_dkim_signing.conf.master | 5 +- install/tpl/rspamd_greylist.conf.master | 1 - install/tpl/rspamd_mx_check.conf.master | 3 +- install/tpl/rspamd_neural.conf.master | 3 +- install/tpl/rspamd_redis.conf.master | 2 +- install/tpl/server.ini.master | 4 ++ .../web/admin/form/server_config.tform.php | 53 +++++++++++++++- .../web/admin/lib/lang/ar_server_config.lng | 8 +++ .../web/admin/lib/lang/bg_server_config.lng | 8 +++ .../web/admin/lib/lang/br_server_config.lng | 8 +++ .../web/admin/lib/lang/ca_server_config.lng | 8 +++ .../web/admin/lib/lang/cz_server_config.lng | 8 +++ .../web/admin/lib/lang/de_server_config.lng | 8 +++ .../web/admin/lib/lang/dk_server_config.lng | 8 +++ .../web/admin/lib/lang/el_server_config.lng | 8 +++ .../web/admin/lib/lang/en_server_config.lng | 8 +++ .../web/admin/lib/lang/es_server_config.lng | 8 +++ .../web/admin/lib/lang/fi_server_config.lng | 8 +++ .../web/admin/lib/lang/fr_server_config.lng | 8 +++ .../web/admin/lib/lang/hr_server_config.lng | 8 +++ .../web/admin/lib/lang/hu_server_config.lng | 8 +++ .../web/admin/lib/lang/id_server_config.lng | 8 +++ .../web/admin/lib/lang/it_server_config.lng | 8 +++ .../web/admin/lib/lang/ja_server_config.lng | 8 +++ .../web/admin/lib/lang/nl_server_config.lng | 8 +++ .../web/admin/lib/lang/pl_server_config.lng | 8 +++ .../web/admin/lib/lang/pt_server_config.lng | 8 +++ .../web/admin/lib/lang/ro_server_config.lng | 8 +++ .../web/admin/lib/lang/ru_server_config.lng | 8 +++ .../web/admin/lib/lang/se_server_config.lng | 8 +++ .../web/admin/lib/lang/sk_server_config.lng | 8 +++ .../web/admin/lib/lang/tr_server_config.lng | 11 ++++ .../templates/server_config_mail_edit.htm | 20 +++++++ .../conf/rspamd_classifier-bayes.conf.master | 15 +++++ server/conf/rspamd_dkim_signing.conf.master | 4 ++ server/conf/rspamd_redis.conf.master | 4 ++ .../plugins-available/rspamd_plugin.inc.php | 60 +++++++++++++------ 39 files changed, 384 insertions(+), 47 deletions(-) mode change 100644 => 120000 install/tpl/rspamd_classifier-bayes.conf.master mode change 100644 => 120000 install/tpl/rspamd_dkim_signing.conf.master delete mode 100644 install/tpl/rspamd_greylist.conf.master mode change 100644 => 120000 install/tpl/rspamd_redis.conf.master create mode 100644 server/conf/rspamd_classifier-bayes.conf.master create mode 100644 server/conf/rspamd_dkim_signing.conf.master create mode 100644 server/conf/rspamd_redis.conf.master diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6de768f7e5..2bbd99a339 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1825,33 +1825,48 @@ class installer_base { fclose($fps); unset($dkim_domains); - # local.d templates with template tags - $tpl = new tpl(); - $tpl->newTemplate('rspamd_dkim_signing.conf.master'); - $tpl->setVar('dkim_path', $mail_config['dkim_path']); - wf('/etc/rspamd/local.d/dkim_signing.conf', $tpl->grab()); - - $tpl = new tpl(); - $tpl->newTemplate('rspamd_options.inc.master'); - + # look up values for use in template tags $local_addrs = array(); $ips = $this->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); if(is_array($ips) && !empty($ips)){ foreach($ips as $ip){ - $local_addrs[] = array('quoted_ip' => "\"".$ip['ip_address']."\",\n"); + $local_addrs[] = array( + 'ip' => $ip['ip_address'], + 'quoted_ip' => "\"".$ip['ip_address']."\",\n" + ); } } - $tpl->setLoop('local_addrs', $local_addrs); - wf('/etc/rspamd/local.d/options.inc', $tpl->grab()); + + # local.d templates with template tags + # note: ensure these template files are in server/conf/ and symlinked in install/tpl/ + $local_d = array( + 'dkim_signing.conf', + 'options.inc', + 'redis.conf', + 'classifier-bayes.conf', + ); + foreach ($local_d as $f) { + $tpl = new tpl(); + $tpl->newTemplate("rspamd_${f}.master"); + + $tpl->setVar('dkim_path', $mail_config['dkim_path']); + $tpl->setVar('rspamd_redis_servers', $mail_config['rspamd_redis_servers']); + $tpl->setVar('rspamd_redis_password', $mail_config['rspamd_redis_password']); + $tpl->setVar('rspamd_redis_bayes_servers', $mail_config['rspamd_redis_bayes_servers']); + $tpl->setVar('rspamd_redis_bayes_password', $mail_config['rspamd_redis_bayes_password']); + if(count($local_addrs) > 0) { + $tpl->setLoop('local_addrs', $local_addrs); + } + + wf("/etc/rspamd/local.d/${f}", $tpl->grab()); + } + # local.d templates without template tags $local_d = array( 'groups.conf', 'antivirus.conf', - 'classifier-bayes.conf', - 'greylist.conf', 'mx_check.conf', - 'redis.conf', 'milter_headers.conf', 'neural.conf', 'neural_group.conf', @@ -1894,6 +1909,11 @@ class installer_base { } } + # rename rspamd templates we no longer use + if(file_exists("/etc/rspamd/local.d/greylist.conf")) { + rename("/etc/rspamd/local.d/greylist.conf", "/etc/rspamd/local.d/greylist.old"); + } + exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/local.d/maps.d/* /etc/rspamd/override.d/*'); diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master deleted file mode 100644 index dcda4a6391..0000000000 --- a/install/tpl/rspamd_classifier-bayes.conf.master +++ /dev/null @@ -1,3 +0,0 @@ -autolearn = [-0.01, 5.00]; -per_user = false; -per_language = true; diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master new file mode 120000 index 0000000000..b532472294 --- /dev/null +++ b/install/tpl/rspamd_classifier-bayes.conf.master @@ -0,0 +1 @@ +../../server/conf/rspamd_classifier-bayes.conf.master \ No newline at end of file diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master deleted file mode 100644 index 10d89e7495..0000000000 --- a/install/tpl/rspamd_dkim_signing.conf.master +++ /dev/null @@ -1,4 +0,0 @@ -try_fallback = false; -use_esld = false; -path_map = "/etc/rspamd/local.d/dkim_domains.map"; -selector_map = "/etc/rspamd/local.d/dkim_selectors.map"; diff --git a/install/tpl/rspamd_dkim_signing.conf.master b/install/tpl/rspamd_dkim_signing.conf.master new file mode 120000 index 0000000000..ebc6d4ace8 --- /dev/null +++ b/install/tpl/rspamd_dkim_signing.conf.master @@ -0,0 +1 @@ +../../server/conf/rspamd_dkim_signing.conf.master \ No newline at end of file diff --git a/install/tpl/rspamd_greylist.conf.master b/install/tpl/rspamd_greylist.conf.master deleted file mode 100644 index 74ea715a22..0000000000 --- a/install/tpl/rspamd_greylist.conf.master +++ /dev/null @@ -1 +0,0 @@ -servers = "127.0.0.1:6379"; \ No newline at end of file diff --git a/install/tpl/rspamd_mx_check.conf.master b/install/tpl/rspamd_mx_check.conf.master index 0a628f9c83..0c71ecb26b 100644 --- a/install/tpl/rspamd_mx_check.conf.master +++ b/install/tpl/rspamd_mx_check.conf.master @@ -1,9 +1,8 @@ enabled = true; -servers = "localhost"; key_prefix = "rmx"; symbol_bad_mx = "MX_INVALID"; symbol_no_mx = "MX_MISSING"; symbol_good_mx = "MX_GOOD"; expire = 86400; expire_novalid = 7200; -greylist_invalid = false; \ No newline at end of file +greylist_invalid = false; diff --git a/install/tpl/rspamd_neural.conf.master b/install/tpl/rspamd_neural.conf.master index 76f8a6d344..9047212cd3 100644 --- a/install/tpl/rspamd_neural.conf.master +++ b/install/tpl/rspamd_neural.conf.master @@ -1,4 +1,3 @@ -servers = 127.0.0.1:6379; enabled = true; rules { @@ -28,4 +27,4 @@ rules { symbol_ham = "NEURAL_HAM_SHORT"; ann_expire = 1d; } -} \ No newline at end of file +} diff --git a/install/tpl/rspamd_redis.conf.master b/install/tpl/rspamd_redis.conf.master deleted file mode 100644 index b908af9f5e..0000000000 --- a/install/tpl/rspamd_redis.conf.master +++ /dev/null @@ -1 +0,0 @@ -servers = "127.0.0.1"; \ No newline at end of file diff --git a/install/tpl/rspamd_redis.conf.master b/install/tpl/rspamd_redis.conf.master new file mode 120000 index 0000000000..df7de6da3c --- /dev/null +++ b/install/tpl/rspamd_redis.conf.master @@ -0,0 +1 @@ +../../server/conf/rspamd_redis.conf.master \ No newline at end of file diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 028fb68a6b..39f8276cf1 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -40,6 +40,10 @@ dkim_path=/var/lib/amavis/dkim dkim_strength=1024 content_filter=amavis rspamd_password= +rspamd_redis_servers=127.0.0.1 +rspamd_redis_passwd= +rspamd_redis_bayes_servers=127.0.0.1 +rspamd_redis_bayes_passwd= pop3_imap_daemon=courier mail_filter_syntax=maildrop mailuser_uid=5000 diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 1818b2ef3b..d5133f2a01 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -481,8 +481,57 @@ $form["tabs"]['mail'] = array( 'value' => '', 'width' => '40', 'maxlength' => '255', - 'filters' => array( 0 => array( 'event' => 'SAVE', - 'type' => 'TRIM'), + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), + ), + ), + 'rspamd_redis_servers' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '127.0.0.1', + 'value' => '', + 'width' => '40', + 'maxlength' => '255', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), + ), + ), + 'rspamd_redis_password' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), + ), + ), + 'rspamd_redis_bayes_servers' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '127.0.0.1', + 'value' => '', + 'width' => '40', + 'maxlength' => '255', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), + ), + ), + 'rspamd_redis_bayes_password' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255', + 'filters' => array( + 0 => array( 'event' => 'SAVE', + 'type' => 'TRIM'), ), ), 'rspamd_available' => array( diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index b95b3567e6..ac03605279 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index fcd34e7292..b9d6e648ce 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index 0e8d43ca8e..ac551c588c 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Filtro de conteúdo'; $wb['rspamd_url_txt'] = 'URL do RSPAMD'; $wb['rspamd_user_txt'] = 'Usuário RSPAMD'; $wb['rspamd_password_txt'] = 'Senha RSPAMD'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Habilitar protocolo PROXY'; $wb['vhost_proxy_protocol_http_port_txt'] = 'Porta HTTP protocolo PROXY'; $wb['vhost_proxy_protocol_https_port_txt'] = 'Porta HTTPS protocolo PROXY'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index 2e02e31c6b..25ed761836 100644 --- a/interface/web/admin/lib/lang/ca_server_config.lng +++ b/interface/web/admin/lib/lang/ca_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index 633db75fbd..6da8dfc0bb 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Filtr obsahu'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd heslo'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index e287b9a622..d0b43059c4 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content-Filter'; $wb['rspamd_url_txt'] = 'Rspamd-URL'; $wb['rspamd_user_txt'] = 'Rspamd-Benutzer'; $wb['rspamd_password_txt'] = 'Rspamd-Passwort'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index 77a29251d5..b1ebcec391 100644 --- a/interface/web/admin/lib/lang/dk_server_config.lng +++ b/interface/web/admin/lib/lang/dk_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index 0913624503..b147f15e5c 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 3df6f02dfb..4125b2648e 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -324,6 +324,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index fadf3180c0..67e77efac8 100644 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index ec974d3249..dac02a14b7 100644 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index a413c4214d..0599b8bbed 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index 4eb3574d45..e0894ceb82 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 73f0181f3d..97774f9ecd 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index 3555ba3288..814e963f64 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 39b7161ddf..f9e30f3937 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index a50922639c..52ac44a351 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index 9ef50bb6c1..e9e412b609 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index af839bb2e3..f9d43d3bfd 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 6b581c8593..468413a1de 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index e15c99fb67..e20fb9ee9f 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index 3465d2120d..1799b075f4 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index 9bbbcc80ac..fe3c2e9234 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index 1b96cf57ad..bc7f9f514b 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -316,6 +316,14 @@ $wb['content_filter_txt'] = 'Content Filter'; $wb['rspamd_url_txt'] = 'Rspamd URL'; $wb['rspamd_user_txt'] = 'Rspamd User'; $wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index 84210ce9b8..0d0c84f2c7 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -310,6 +310,17 @@ $wb['log_retention_error_ispositive'] = 'Günlük tutma süresi 0 değerinden b $wb['php_default_hide_txt'] = 'Hide Default PHP-Version in selectbox'; $wb['php_default_name_txt'] = 'Varsayılan PHP Sürümü Açıklaması'; $wb['php_default_name_error_empty'] = 'Varsayılan PHP sürümü açıklaması boş olamaz'; +$wb['rspamd_url_txt'] = 'Rspamd URL'; +$wb['rspamd_user_txt'] = 'Rspamd User'; +$wb['rspamd_password_txt'] = 'Rspamd Password'; +$wb['rspamd_redis_servers_txt'] = 'Redis Servers'; +$wb['tooltip_rspamd_redis_servers_txt'] = 'Redis server(s) which Rspamd will use. Eg. \'127.0.0.1\', \'localhost:6379\' or \'/var/run/redis/redis-server.sock\'.'; +$wb['rspamd_redis_password_txt'] = 'Redis Password'; +$wb['tooltip_rspamd_redis_password_txt'] = 'Password for Redis Servers (leave blank if unused).'; +$wb['rspamd_redis_bayes_servers_txt'] = 'Redis Servers for Bayes'; +$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Redis server(s) which Rspamd will use for Bayes if different (otherwise leave blank). Eg. \'localhost:6378\' or \'/var/run/redis-bayes/redis-server.sock\'.'; +$wb['rspamd_redis_bayes_password_txt'] = 'Redis Password for Bayes'; +$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Password for Bayes Redis Server (leave blank if unused).'; $wb['vhost_proxy_protocol_enabled_txt'] = 'Enable PROXY Protocol'; $wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY Protocol HTTP Port'; $wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY Protocol HTTPS Port'; diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index 76ed5ef4fb..0eac988961 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -61,6 +61,26 @@
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
diff --git a/server/conf/rspamd_classifier-bayes.conf.master b/server/conf/rspamd_classifier-bayes.conf.master new file mode 100644 index 0000000000..48dc9f6b53 --- /dev/null +++ b/server/conf/rspamd_classifier-bayes.conf.master @@ -0,0 +1,15 @@ +backend = "redis"; + +servers = ""; + + +password = ""; + +autolearn { + spam_threshold = 9.0; # When to learn spam (score >= threshold) + ham_threshold = -1.5; # When to learn ham (score <= threshold) + check_balance = true; # Check spam and ham balance + min_balance = 0.9; # Keep diff for spam/ham learns for at least this value +} +per_user = false; +per_language = true; diff --git a/server/conf/rspamd_dkim_signing.conf.master b/server/conf/rspamd_dkim_signing.conf.master new file mode 100644 index 0000000000..10d89e7495 --- /dev/null +++ b/server/conf/rspamd_dkim_signing.conf.master @@ -0,0 +1,4 @@ +try_fallback = false; +use_esld = false; +path_map = "/etc/rspamd/local.d/dkim_domains.map"; +selector_map = "/etc/rspamd/local.d/dkim_selectors.map"; diff --git a/server/conf/rspamd_redis.conf.master b/server/conf/rspamd_redis.conf.master new file mode 100644 index 0000000000..08b7f8ca90 --- /dev/null +++ b/server/conf/rspamd_redis.conf.master @@ -0,0 +1,4 @@ +servers = ""; + +password = ""; + diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index 41f6b08f40..1e931d87cc 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -120,10 +120,14 @@ class rspamd_plugin { $app->plugins->registerEvent('mail_access_update', $this->plugin_name, 'spamfilter_wblist_update'); $app->plugins->registerEvent('mail_access_delete', $this->plugin_name, 'spamfilter_wblist_delete'); + //* server + $app->plugins->registerEvent('server_insert', $this->plugin_name, 'server_update'); + $app->plugins->registerEvent('server_update', $this->plugin_name, 'server_update'); + //* server ip - $app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_ip'); - $app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_ip'); - $app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_ip'); + $app->plugins->registerEvent('server_ip_insert', $this->plugin_name, 'server_update'); + $app->plugins->registerEvent('server_ip_update', $this->plugin_name, 'server_update'); + $app->plugins->registerEvent('server_ip_delete', $this->plugin_name, 'server_update'); //* spamfilter_users $app->plugins->registerEvent('spamfilter_users_insert', $this->plugin_name, 'user_settings_update'); @@ -483,28 +487,50 @@ class rspamd_plugin { } } - function server_ip($event_name, $data) { + function server_update($event_name, $data) { global $app, $conf; - // get the config - $app->uses("getconf,system"); + if(!is_dir('/etc/rspamd')) { + return; + } + $app->load('tpl'); $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); - if(is_dir('/etc/rspamd')) { - $tpl = new tpl(); - $tpl->newTemplate('rspamd_options.inc.master'); + $local_addrs = array(); + $ips = $app->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); + if(is_array($ips) && !empty($ips)){ + foreach($ips as $ip){ + $local_addrs[] = array( + 'ip' => $ip['ip_address'], + 'quoted_ip' => "\"".$ip['ip_address']."\",\n", + ); + } + } - $local_addrs = array(); - $ips = $app->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']); - if(is_array($ips) && !empty($ips)){ - foreach($ips as $ip){ - $local_addrs[] = array('quoted_ip' => "\"".$ip['ip_address']."\",\n"); - } + # local.d templates with template tags + # note: ensure these template files are in server/conf/ and symlinked in install/tpl/ + $local_d = array( + 'dkim_signing.conf', + 'options.inc', + 'redis.conf', + 'classifier-bayes.conf', + ); + foreach ($local_d as $f) { + $tpl = new tpl(); + $tpl->newTemplate("rspamd_${f}.master"); + + $tpl->setVar('dkim_path', $mail_config['dkim_path']); + $tpl->setVar('rspamd_redis_servers', $mail_config['rspamd_redis_servers']); + $tpl->setVar('rspamd_redis_password', $mail_config['rspamd_redis_password']); + $tpl->setVar('rspamd_redis_bayes_servers', $mail_config['rspamd_redis_bayes_servers']); + $tpl->setVar('rspamd_redis_bayes_password', $mail_config['rspamd_redis_bayes_password']); + if(count($local_addrs) > 0) { + $tpl->setLoop('local_addrs', $local_addrs); } - $tpl->setLoop('local_addrs', $local_addrs); - $app->system->file_put_contents('/etc/rspamd/local.d/options.inc', $tpl->grab()); + + $app->system->file_put_contents("/etc/rspamd/local.d/${f}", $tpl->grab()); if($mail_config['content_filter'] == 'rspamd'){ $app->services->restartServiceDelayed('rspamd', 'reload'); -- GitLab From 504cfcf5bb2776bc0a3f3dbab5d583a467753b8e Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 4 Mar 2021 17:08:55 -0700 Subject: [PATCH 232/403] rspamd: set permissions on files containing passwords --- install/lib/installer_base.lib.php | 4 +++- server/plugins-available/rspamd_plugin.inc.php | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 2bbd99a339..6981984f97 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1914,8 +1914,10 @@ class installer_base { rename("/etc/rspamd/local.d/greylist.conf", "/etc/rspamd/local.d/greylist.old"); } - exec('chmod a+r /etc/rspamd/local.d/* /etc/rspamd/local.d/maps.d/* /etc/rspamd/override.d/*'); + # protect passwords in these files + exec('chgrp _rspamd /etc/rspamd/local.d/redis.conf /etc/rspamd/local.d/classifier-bayes.conf /etc/rspamd/local.d/worker-controller.inc'); + exec('chmod 640 /etc/rspamd/local.d/redis.conf /etc/rspamd/local.d/classifier-bayes.conf /etc/rspamd/local.d/worker-controller.inc'); # unneccesary, since this was done above? $command = 'usermod -a -G amavis _rspamd'; diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index 1e931d87cc..cd478492a8 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -536,6 +536,11 @@ class rspamd_plugin { $app->services->restartServiceDelayed('rspamd', 'reload'); } } + + # protect passwords in these files + exec('chgrp _rspamd /etc/rspamd/local.d/redis.conf /etc/rspamd/local.d/classifier-bayes.conf /etc/rspamd/local.d/worker-controller.inc'); + exec('chmod 640 /etc/rspamd/local.d/redis.conf /etc/rspamd/local.d/classifier-bayes.conf /etc/rspamd/local.d/worker-controller.inc'); + } private function _is_valid_ip_address($ip) { -- GitLab From 33019cd9a0b243bc13773626f7fec70fb4f1bbd4 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 11 Mar 2021 17:36:06 +0100 Subject: [PATCH 233/403] - added sql update file --- install/sql/incremental/upd_0093.sql | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 install/sql/incremental/upd_0093.sql diff --git a/install/sql/incremental/upd_0093.sql b/install/sql/incremental/upd_0093.sql new file mode 100644 index 0000000000..71efb3085e --- /dev/null +++ b/install/sql/incremental/upd_0093.sql @@ -0,0 +1,25 @@ +ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ''; + +ALTER TABLE `client` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; +ALTER TABLE `client_template` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; + +ALTER TABLE mail_access DROP CONSTRAINT `server_id`; +SET SESSION old_alter_table=1; +ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`); +SET SESSION old_alter_table=0; + +ALTER TABLE mail_domain ADD COLUMN `relay_host` varchar(255) NOT NULL default '' AFTER `dkim_public`, + ADD COLUMN `relay_user` varchar(255) NOT NULL default '' AFTER `relay_host`, + ADD COLUMN `relay_pass` varchar(255) NOT NULL default '' AFTER `relay_user`; +-- Purge apps & addons installer (#5795) +DROP TABLE 'software_package'; +DROP TABLE 'software_repo'; +DROP TABLE 'software_update'; +DROP TABLE 'software_update_inst'; + +-- Brexit +UPDATE `country` SET `eu` = 'n' WHERE `iso` = 'GB'; + +-- Add limit for per domain relaying +ALTER TABLE `client` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; +ALTER TABLE `client_template` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; -- GitLab From 72a3334c1201cce67e7a215bd793f6a979bfd1c3 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 11 Mar 2021 19:08:09 +0100 Subject: [PATCH 234/403] Copy custom dovecot config on Debian 6+ sytems (#6096) --- install/dist/lib/debian60.lib.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index 154c6b99c4..d76a45c2d3 100644 --- a/install/dist/lib/debian60.lib.php +++ b/install/dist/lib/debian60.lib.php @@ -33,7 +33,7 @@ class installer extends installer_base { public function configure_dovecot() { global $conf; - + $virtual_transport = 'dovecot'; $configure_lmtp = false; @@ -48,7 +48,7 @@ class installer extends installer_base { $tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']); $ini_array = ini_to_array(stripslashes($tmp['config'])); // ini_array needs not to be checked, because already done in update.php -> updateDbAndIni() - + if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') { $virtual_transport = 'lmtp:unix:private/dovecot-lmtp'; $configure_lmtp = true; @@ -108,6 +108,10 @@ class installer extends installer_base { } else { copy('tpl/debian6_dovecot2.conf.master', $config_dir.'/'.$configfile); } + // Copy custom config file + if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master')) { + copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master', $config_dir.'/conf.d/99-ispconfig-custom-config.conf'); + } replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); if(version_compare($dovecot_version,2.1) < 0) { @@ -123,7 +127,7 @@ class installer extends installer_base { if(version_compare($dovecot_version,2.3) >= 0) { // Remove deprecated setting(s) removeLine($config_dir.'/'.$configfile, 'ssl_protocols ='); - + // Check if we have a dhparams file and if not, create it if(!file_exists('/etc/dovecot/dh.pem')) { swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.'); @@ -146,7 +150,7 @@ class installer extends installer_base { $content = str_replace('#2.3+ ','',$content); file_put_contents($config_dir.'/'.$configfile,$content); unset($content); - + } else { // remove settings which are not supported in Dovecot < 2.3 removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol ='); @@ -159,7 +163,7 @@ class installer extends installer_base { copy('tpl/debian6_dovecot.conf.master', $config_dir.'/'.$configfile); } } - + $dovecot_protocols = 'imap pop3'; //* dovecot-lmtpd @@ -196,7 +200,7 @@ class installer extends installer_base { chmod($config_dir.'/'.$configfile, 0600); chown($config_dir.'/'.$configfile, 'root'); chgrp($config_dir.'/'.$configfile, 'root'); - + // Dovecot shall ignore mounts in website directory if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null"); -- GitLab From 581bb48b2d7e3adba2444ac0611381f47620023b Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Thu, 11 Mar 2021 19:10:41 +0100 Subject: [PATCH 235/403] Add trailing space so line is removed when parsing the config --- install/tpl/debian6_dovecot2.conf.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 91d745bc39..7aae62db40 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -91,7 +91,7 @@ protocol lmtp { #2.3+ group = vmail #2.3+ mode = 0660 #2.3+ } -#2.3+ +#2.3+ #2.3+ unix_listener stats-writer { #2.3+ user = vmail #2.3+ group = vmail -- GitLab From 1429c8f385eef85340717f8d83eefbc6a0352b84 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Thu, 11 Mar 2021 22:20:06 +0100 Subject: [PATCH 236/403] - remove collection entries --- .../sql/incremental/upd_dev_collection.sql | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 71efb3085e..e69de29bb2 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,25 +0,0 @@ -ALTER TABLE `remote_user` MODIFY `remote_password` VARCHAR(200) NOT NULL DEFAULT ''; - -ALTER TABLE `client` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; -ALTER TABLE `client_template` ADD COLUMN `limit_mail_wblist` INT(11) NOT NULL DEFAULT '0' AFTER `limit_mailrouting`; - -ALTER TABLE mail_access DROP CONSTRAINT `server_id`; -SET SESSION old_alter_table=1; -ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`); -SET SESSION old_alter_table=0; - -ALTER TABLE mail_domain ADD COLUMN `relay_host` varchar(255) NOT NULL default '' AFTER `dkim_public`, - ADD COLUMN `relay_user` varchar(255) NOT NULL default '' AFTER `relay_host`, - ADD COLUMN `relay_pass` varchar(255) NOT NULL default '' AFTER `relay_user`; --- Purge apps & addons installer (#5795) -DROP TABLE 'software_package'; -DROP TABLE 'software_repo'; -DROP TABLE 'software_update'; -DROP TABLE 'software_update_inst'; - --- Brexit -UPDATE `country` SET `eu` = 'n' WHERE `iso` = 'GB'; - --- Add limit for per domain relaying -ALTER TABLE `client` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; -ALTER TABLE `client_template` ADD `limit_relayhost` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `limit_spamfilter_policy`; -- GitLab From 908f26b5749c021f191f577a100558bedcf38aec Mon Sep 17 00:00:00 2001 From: Till Brehm Date: Fri, 12 Mar 2021 16:09:34 +0000 Subject: [PATCH 237/403] Resolve "standard_index.html is not in DirectoryIndex list" --- install/tpl/apache_ispconfig.conf.master | 3 +++ server/conf/apache_ispconfig.conf.master | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master index 2a7ac0662e..c968abf367 100644 --- a/install/tpl/apache_ispconfig.conf.master +++ b/install/tpl/apache_ispconfig.conf.master @@ -1,3 +1,6 @@ +# Important: A copy of this file exists in server/conf/ folder. +# Edit both files when applying changes. + ################################################ # ISPConfig General Apache Options ################################################ diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master index b1de2a1676..2b6038c54a 100644 --- a/server/conf/apache_ispconfig.conf.master +++ b/server/conf/apache_ispconfig.conf.master @@ -1,8 +1,12 @@ +# Important: A copy of this file exists in install/tpl/ folder. +# Edit both files when applying changes. + ################################################ # ISPConfig General Apache Options ################################################ ServerTokens ProductOnly ServerSignature Off +DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm standard_index.html ################################################ # ISPConfig Logfile configuration for vlogger -- GitLab From c95537e7e991a4ef559a83d051c3f50cf1a30f53 Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sat, 13 Mar 2021 08:51:00 +0100 Subject: [PATCH 238/403] Remove broken function (#6103) --- .../software_update_plugin.inc.php | 227 ------------------ 1 file changed, 227 deletions(-) diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php index 211951685d..18db6dffac 100644 --- a/server/plugins-available/software_update_plugin.inc.php +++ b/server/plugins-available/software_update_plugin.inc.php @@ -39,243 +39,16 @@ class software_update_plugin { global $conf; return true; - } - /* This function is called when the plugin is loaded */ public function onLoad() { global $app; - - /* - Register for the events - */ - - $app->plugins->registerEvent('software_update_inst_insert', $this->plugin_name, 'process'); - //$app->plugins->registerEvent('software_update_inst_update',$this->plugin_name,'process'); - //$app->plugins->registerEvent('software_update_inst_delete',$this->plugin_name,'process'); - //* Register for actions $app->plugins->registerAction('os_update', $this->plugin_name, 'os_update'); - - - } - - private function set_install_status($inst_id, $status) { - global $app; - - $app->db->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id); - $app->dbmaster->query("UPDATE software_update_inst SET status = ? WHERE software_update_inst_id = ?", $status, $inst_id); - } - - public function process($event_name, $data) { - global $app, $conf; - - //* Get the info of the package: - $software_update_id = intval($data["new"]["software_update_id"]); - $software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = ?", $software_update_id); - $software_package = $app->db->queryOneRecord("SELECT * FROM software_package WHERE package_name = ?", $software_update['package_name']); - - if($software_package['package_type'] == 'ispconfig' && !$conf['software_updates_enabled'] == true) { - $app->log('Software Updates not enabled on this server. To enable updates, set $conf["software_updates_enabled"] = true; in config.inc.php', LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $installuser = ''; - if($software_package['package_type'] == 'ispconfig') { - $installuser = ''; - } elseif ($software_package['package_type'] == 'app') { - $installuser = 'ispapps'; - } else { - $app->log('package_type not supported', LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $temp_dir = '/tmp/'.md5(uniqid(rand())); - $app->log("The temp dir is $temp_dir", LOGLEVEL_DEBUG); - mkdir($temp_dir); - if($installuser != '') chown($temp_dir, $installuser); - - if(!is_dir($temp_dir)) { - $app->log("Unable to create temp directory.", LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - //* Replace placeholders in download URL - $software_update["update_url"] = str_replace('{key}', $software_package['package_key'], $software_update["update_url"]); - - //* Download the update package - if($installuser == '') { - $cmd = "cd ? && wget ?"; - $app->system->exec_safe($cmd, $temp_dir, $software_update["update_url"]); - } else { - $cmd = "cd $temp_dir && wget ".$software_update["update_url"]; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - $app->log("Downloading the update file from: ".$software_update["update_url"], LOGLEVEL_DEBUG); - - //$url_parts = parse_url($software_update["update_url"]); - //$update_filename = basename($url_parts["path"]); - //* Find the name of the zip file which contains the app. - $tmp_dir_handle = dir($temp_dir); - $update_filename = ''; - while (false !== ($t = $tmp_dir_handle->read())) { - if($t != '.' && $t != '..' && is_file($temp_dir.'/'.$t) && substr($t, -4) == '.zip') { - $update_filename = $t; - } - } - $tmp_dir_handle->close(); - unset($tmp_dir_handle); - unset($t); - - if($update_filename == '') { - $app->log("No package file found. Download failed? Installation aborted.", LOGLEVEL_WARN); - $app->system->exec_safe("rm -rf ?", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } - - $app->log("The update filename is $update_filename", LOGLEVEL_DEBUG); - - if(is_file($temp_dir.'/'.$update_filename)) { - - //* Checking the md5sum - if(md5_file($temp_dir.'/'.$update_filename) != $software_update["update_md5"]) { - $app->log("The md5 sum of the downloaded file is incorrect. Update aborted.", LOGLEVEL_WARN); - $app->system->exec_safe("rm -rf ", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - return false; - } else { - $app->log("MD5 checksum of the downloaded file verified.", LOGLEVEL_DEBUG); - } - - - //* unpacking the update - - if($installuser == '') { - $cmd = "cd ? && unzip ?"; - $app->system->exec_safe($cmd, $temp_dir, $update_filename); - } else { - $cmd = "cd $temp_dir && unzip $update_filename"; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - - //* Create a database, if the package requires one - if($software_package['package_type'] == 'app' && $software_package['package_requires_db'] == 'mysql') { - - $app->uses('ini_parser'); - $package_config = $app->ini_parser->parse_ini_string(stripslashes($software_package['package_config'])); - - $this->create_app_db($package_config['mysql']); - $app->log("Creating the app DB.", LOGLEVEL_DEBUG); - - //* Load the sql dump into the database - if(is_file($temp_dir.'/setup.sql')) { - $db_config = $package_config['mysql']; - if( $db_config['database_user'] != '' && - $db_config['database_password'] != '' && - $db_config['database_name'] != '' && - $db_config['database_host'] != '') { - $app->system->exec_safe("mysql --default-character-set=utf8 --force -h ? -u ? ? < ?", $db_config['database_host'], $db_config['database_user'], $db_config['database_name'], $temp_dir.'/setup.sql'); - $app->log("Loading setup.sql dump into the app db.", LOGLEVEL_DEBUG); - } - } - - } - - //* Save the package config file as app.ini - if($software_package['package_config'] != '') { - file_put_contents($temp_dir.'/app.ini', $software_package['package_config']); - $app->log("Writing ".$temp_dir.'/app.ini', LOGLEVEL_DEBUG); - } - - if(is_file($temp_dir.'/setup.sh')) { - // Execute the setup script - $app->system->exec_safe('chmod +x ?', $temp_dir.'/setup.sh'); - $app->log("Executing setup.sh file in directory $temp_dir", LOGLEVEL_DEBUG); - - if($installuser == '') { - $cmd = 'cd ? && ./setup.sh > package_install.log'; - $app->system->exec_safe($cmd, $temp_dir); - } else { - $cmd = 'cd '.$temp_dir.' && ./setup.sh > package_install.log'; - $app->system->exec_safe("su -c ? ?", $cmd, $installuser); - } - - $log_data = @file_get_contents("{$temp_dir}/package_install.log"); - if(preg_match("'.*\[OK\]\s*$'is", $log_data)) { - $app->log("Installation successful", LOGLEVEL_DEBUG); - $app->log($log_data, LOGLEVEL_DEBUG); - $this->set_install_status($data["new"]["software_update_inst_id"], "installed"); - } else { - $app->log("Installation failed:\n\n" . $log_data, LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - } else { - $app->log("setup.sh file not found", LOGLEVEL_ERROR); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - } else { - $app->log("Download of the update file failed", LOGLEVEL_WARN); - $this->set_install_status($data["new"]["software_update_inst_id"], "failed"); - } - - if($temp_dir != '' && $temp_dir != '/') $app->system->exec_safe("rm -rf ?", $temp_dir); - $app->log("Deleting the temp directory $temp_dir", LOGLEVEL_DEBUG); - } - - private function create_app_db($db_config) { - global $app, $conf; - - if( $db_config['database_user'] != '' && - $db_config['database_password'] != '' && - $db_config['database_name'] != '' && - $db_config['database_host'] != '') { - - if(!include ISPC_LIB_PATH.'/mysql_clientdb.conf') { - $app->log('Unable to open'.ISPC_LIB_PATH.'/mysql_clientdb.conf', LOGLEVEL_ERROR); - return; - } - - if($db_config['database_user'] == 'root') { - $app->log('User root not allowed for App databases', LOGLEVEL_WARNING); - return; - } - - //* Connect to the database - $link = mysqli_connect($clientdb_host, $clientdb_user, $clientdb_password); - if (!$link) { - $app->log('Unable to connect to the database'.mysqli_connect_error(), LOGLEVEL_ERROR); - return; - } - - $query_charset_table = ''; - - //* Create the new database - if (mysqli_query($link,'CREATE DATABASE '.mysqli_real_escape_string($link, $db_config['database_name']).$query_charset_table, $link)) { - $app->log('Created MySQL database: '.$db_config['database_name'], LOGLEVEL_DEBUG); - } else { - $app->log('Unable to connect to the database'.mysqli_error($link), LOGLEVEL_ERROR); - } - - if(mysqli_query("GRANT ALL ON ".mysqli_real_escape_string($link, $db_config['database_name']).".* TO '".mysqli_real_escape_string($link, $db_config['database_user'])."'@'".$db_config['database_host']."' IDENTIFIED BY '".mysqli_real_escape_string($link, $db_config['database_password'])."';", $link)) { - $app->log('Created MySQL user: '.$db_config['database_user'], LOGLEVEL_DEBUG); - } else { - $app->log('Unable to create database user'.$db_config['database_user'].' '.mysqli_error($link), LOGLEVEL_ERROR); - } - - mysqli_close($link); - - } - } //* Operating system update -- GitLab From eed63b31712824f34ba681a1a1c70aac161014af Mon Sep 17 00:00:00 2001 From: Thom Pol Date: Sat, 13 Mar 2021 09:14:47 +0100 Subject: [PATCH 239/403] Add check if conf.d folder for Dovecot exists --- install/dist/lib/debian60.lib.php | 3 +++ install/lib/installer_base.lib.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index d76a45c2d3..981e6cff92 100644 --- a/install/dist/lib/debian60.lib.php +++ b/install/dist/lib/debian60.lib.php @@ -110,6 +110,9 @@ class installer extends installer_base { } // Copy custom config file if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master')) { + if(!@is_dir($config_dir . '/conf.d')) { + mkdir($config_dir . '/conf.d'); + } copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master', $config_dir.'/conf.d/99-ispconfig-custom-config.conf'); } replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6de768f7e5..5617826313 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1536,6 +1536,9 @@ class installer_base { } // Copy custom config file if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master')) { + if(!@is_dir($config_dir . '/conf.d')) { + mkdir($config_dir . '/conf.d'); + } copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master', $config_dir.'/conf.d/99-ispconfig-custom-config.conf'); } replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); -- GitLab From a219f2cdf8d814996d9b5f5c9fa98c797ff358d5 Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 13 Mar 2021 19:21:43 +0000 Subject: [PATCH 240/403] Update .gitlab/issue_templates/Bug.md --- .gitlab/issue_templates/Bug.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 751016f70a..6496339845 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -1,16 +1,25 @@ + + ## short description What is happening and what is wrong with that? +## steps to reproduce +1. [First step] +2. [Second step] +3. [and so on...] + ## correct behaviour What should happen instead? ## environment -Server OS: (debian/ubuntu/centos/...) -Server OS version: (wheezy/trusty/centos6/...) -ISPConfig version: (3.0.5.4/3.1.5/3.1dev/...) +Server OS + version: (Debian 10/Ubuntu 20.04 /CentOS 8/...) +ISPConfig version: (3.1.15p3/3.2.3/3.2dev/...) _you can use `grep 'ISPC_APP_VERSION' /usr/local/ispconfig/server/lib/config.inc.php` to get it from the command line_ - -If it might be related to the problem +Software version of the related software: ``` insert the output of `nginx -v` or `apachectl -v` here ``` @@ -24,18 +33,15 @@ if you want to post code snippets, please use ``` your code ``` -or attach a code file. Best is to create a merge request of course. +or attach a code file. Best is to create a merge request of course. ## references -if you know of related bugs or feature requests, please reference them by using `#`, e. g. #123 -if you have done a merge request already, please reference it by using `!`, e. g. !12 +if you know of related bugs or feature requests, please reference them by using `#`, e. g. #6105 +if you have done a merge request already, please reference it by using `!`, e. g. !1444 if you know of a forum post on howtoforge.com that deals with this topic, just add the link to the forum topic here ## screenshots optional, of course. Add screenshots of the problem by clicking "Attach a file" on the bottom right. -## log entries -``` -apache / nginx error.log lines (if related) -``` \ No newline at end of file +## Related log entries -- GitLab From 5d091e6b71d16f2b19abaf30f17117b79ba733f5 Mon Sep 17 00:00:00 2001 From: Thom Date: Sat, 13 Mar 2021 20:14:13 +0000 Subject: [PATCH 241/403] Update .gitlab/issue_templates/Bug.md --- .gitlab/issue_templates/Bug.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 6496339845..d86285d53d 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -4,43 +4,41 @@ - Make sure to remove any content from the description that you did not add. For example, if there are no related log entries, remove the whole "Related log entries" part. --> -## short description -What is happening and what is wrong with that? +## Summary + -## steps to reproduce +## Steps to reproduce 1. [First step] 2. [Second step] 3. [and so on...] -## correct behaviour -What should happen instead? +## Correct behaviour + -## environment -Server OS + version: (Debian 10/Ubuntu 20.04 /CentOS 8/...) +## Environment +Server OS + version: (Debian 10/Ubuntu 20.04/CentOS 8/...) \ ISPConfig version: (3.1.15p3/3.2.3/3.2dev/...) -_you can use `grep 'ISPC_APP_VERSION' /usr/local/ispconfig/server/lib/config.inc.php` to get it from the command line_ + Software version of the related software: + ``` -insert the output of `nginx -v` or `apachectl -v` here -``` -``` -insert the output of `php -v` here +Output of the command ``` -## proposed fix +## Proposed fix optional, of course. -if you want to post code snippets, please use +if you want to post code snippets, please use ``` your code ``` or attach a code file. Best is to create a merge request of course. -## references +## References if you know of related bugs or feature requests, please reference them by using `#`, e. g. #6105 if you have done a merge request already, please reference it by using `!`, e. g. !1444 if you know of a forum post on howtoforge.com that deals with this topic, just add the link to the forum topic here -## screenshots +## Screenshots optional, of course. Add screenshots of the problem by clicking "Attach a file" on the bottom right. -- GitLab From b04c0927bb46f1b23b699aa94dd197adec4dce41 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 15 Mar 2021 12:36:43 -0600 Subject: [PATCH 242/403] fix rspamd whitelist template names --- install/lib/installer_base.lib.php | 8 ++++---- ...t.inc.master => rspamd_dkim_whitelist.inc.ispc.master} | 0 ....inc.master => rspamd_dmarc_whitelist.inc.ispc.master} | 0 ...c.master => rspamd_spf_dkim_whitelist.inc.ispc.master} | 0 ...st.inc.master => rspamd_spf_whitelist.inc.ispc.master} | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename install/tpl/{rspamd_dkim_whitelist.inc.master => rspamd_dkim_whitelist.inc.ispc.master} (100%) rename install/tpl/{rspamd_dmarc_whitelist.inc.master => rspamd_dmarc_whitelist.inc.ispc.master} (100%) rename install/tpl/{rspamd_spf_dkim_whitelist.inc.master => rspamd_spf_dkim_whitelist.inc.ispc.master} (100%) rename install/tpl/{rspamd_spf_whitelist.inc.master => rspamd_spf_whitelist.inc.ispc.master} (100%) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6de768f7e5..768ff43363 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1881,10 +1881,10 @@ class installer_base { # local.d/maps.d templates without template tags $maps_d = array( - 'dkim_whitelist.inc', - 'dmarc_whitelist.inc', - 'spf_dkim_whitelist.inc', - 'spf_whitelist.inc', + 'dkim_whitelist.inc.ispc', + 'dmarc_whitelist.inc.ispc', + 'spf_dkim_whitelist.inc.ispc', + 'spf_whitelist.inc.ispc', ); foreach ($maps_d as $f) { if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { diff --git a/install/tpl/rspamd_dkim_whitelist.inc.master b/install/tpl/rspamd_dkim_whitelist.inc.ispc.master similarity index 100% rename from install/tpl/rspamd_dkim_whitelist.inc.master rename to install/tpl/rspamd_dkim_whitelist.inc.ispc.master diff --git a/install/tpl/rspamd_dmarc_whitelist.inc.master b/install/tpl/rspamd_dmarc_whitelist.inc.ispc.master similarity index 100% rename from install/tpl/rspamd_dmarc_whitelist.inc.master rename to install/tpl/rspamd_dmarc_whitelist.inc.ispc.master diff --git a/install/tpl/rspamd_spf_dkim_whitelist.inc.master b/install/tpl/rspamd_spf_dkim_whitelist.inc.ispc.master similarity index 100% rename from install/tpl/rspamd_spf_dkim_whitelist.inc.master rename to install/tpl/rspamd_spf_dkim_whitelist.inc.ispc.master diff --git a/install/tpl/rspamd_spf_whitelist.inc.master b/install/tpl/rspamd_spf_whitelist.inc.ispc.master similarity index 100% rename from install/tpl/rspamd_spf_whitelist.inc.master rename to install/tpl/rspamd_spf_whitelist.inc.ispc.master -- GitLab From 076722f40c0e4e876af0149c498aa0ce983506fb Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 15 Mar 2021 12:54:27 -0600 Subject: [PATCH 243/403] missing slash: #6106 --- 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 6de768f7e5..a82418e504 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2772,7 +2772,7 @@ class installer_base { if(@is_link($vhost_conf_enabled_dir.'/' . $use_symlink)) { unlink($vhost_conf_enabled_dir.'/' . $use_symlink); } - if(!@is_link($vhost_conf_enabled_dir.'' . $use_symlink)) { + if(!@is_link($vhost_conf_enabled_dir.'/' . $use_symlink)) { symlink($vhost_conf_dir.'/' . $use_name, $vhost_conf_enabled_dir.'/' . $use_symlink); } } -- GitLab From f9325281311aadc184d6014d789673c6d24e620d Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 15 Mar 2021 13:25:12 -0600 Subject: [PATCH 244/403] installer: fix powerdns GRANT query --- install/lib/installer_base.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6de768f7e5..31697cfe17 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2036,8 +2036,8 @@ class installer_base { } //* Create the ISPConfig database user in the local database - $query = "GRANT ALL ON ?? TO ?@'localhost'"; - if(!$this->db->query($query, $conf['powerdns']['database'] . '.*', $conf['mysql']['ispconfig_user'])) { + $query = "GRANT ALL ON ??.* TO ?@?"; + if(!$this->db->query($query, $conf['powerdns']['database'], $conf['mysql']['ispconfig_user'], 'localhost')) { $this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage); } -- GitLab From 234ea4d1605a12bf3787d1c0d7f4d12cd45cf0e0 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 16 Mar 2021 19:03:47 +0000 Subject: [PATCH 245/403] Clean up default jailkit sections/programs (remove duplication, utilize correct sections) --- install/tpl/server.ini.master | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 028fb68a6b..7cca8c6720 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -144,9 +144,9 @@ fastcgi_config_syntax=2 [jailkit] jailkit_chroot_home=/home/[username] -jailkit_chroot_app_sections=basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh -jailkit_chroot_app_programs=/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch /usr/bin/which /usr/lib/x86_64-linux-gnu/libmemcached.so.11 /usr/lib/x86_64-linux-gnu/libmemcachedutil.so.2 /usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2 /opt/php-5.6.8/bin/php /opt/php-5.6.8/include /opt/php-5.6.8/lib -jailkit_chroot_cron_programs=/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php +jailkit_chroot_app_sections=coreutils basicshell editors extendedshell netutils ssh sftp scp jk_lsh mysql-client git +jailkit_chroot_app_programs=lesspipe pico unzip zip patch which +jailkit_chroot_cron_programs=/usr/bin/php /usr/lib/php/ /usr/share/php/ /usr/share/zoneinfo/ /usr/bin/perl /usr/share/perl/ jailkit_chroot_authorized_keys_template=/root/.ssh/authorized_keys jailkit_hardlinks=allow -- GitLab From caebfaca84caeb9b9c50ebf29c076f9d72235b76 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 16 Mar 2021 19:08:41 +0000 Subject: [PATCH 246/403] Default to strong dkim. --- install/tpl/server.ini.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 028fb68a6b..4732a85254 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -37,7 +37,7 @@ maildir_path=/var/vmail/[domain]/[localpart] homedir_path=/var/vmail maildir_format=maildir dkim_path=/var/lib/amavis/dkim -dkim_strength=1024 +dkim_strength=4096 content_filter=amavis rspamd_password= pop3_imap_daemon=courier -- GitLab From a12b68c92d0d1977d214f9bcc1f4290233ea7d21 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 16 Mar 2021 19:25:39 +0000 Subject: [PATCH 247/403] update default firewall port list --- interface/web/admin/form/firewall.tform.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/web/admin/form/firewall.tform.php b/interface/web/admin/form/firewall.tform.php index eb7dcb3acf..90614bac55 100644 --- a/interface/web/admin/form/firewall.tform.php +++ b/interface/web/admin/form/firewall.tform.php @@ -79,7 +79,7 @@ $form["tabs"]['firewall'] = array ( 'regex' => '/^$|\d{1,5}(?::\d{1,5})?(?:,\d{1,5}(?::\d{1,5})?)*$/', 'errmsg'=> 'tcp_ports_error_regex'), ), - 'default' => '20,21,22,25,53,80,110,143,443,465,587,993,995,3306,8080,8081,10000', + 'default' => '21,22,25,53,80,110,143,443,465,587,993,995,3306,4190,8080,8081,40110:40210', 'value' => '', 'width' => '30', 'maxlength' => '255' @@ -91,7 +91,7 @@ $form["tabs"]['firewall'] = array ( 'regex' => '/^$|\d{1,5}(?::\d{1,5})?(?:,\d{1,5}(?::\d{1,5})?)*$/', 'errmsg'=> 'udp_ports_error_regex'), ), - 'default' => '53,3306', + 'default' => '53', 'value' => '', 'width' => '30', 'maxlength' => '255' -- GitLab From a31d809b6b7602d189763625d88d3f0e19df1808 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 2 Jan 2021 22:35:24 +0100 Subject: [PATCH 248/403] Allow updated to rendered_zone from slave server, #5983 --- 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 cec9c55b42..122b8eff36 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -774,7 +774,7 @@ class installer_base { $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); } - $query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`) ON ?? TO ?@?"; + $query = "GRANT SELECT, UPDATE(`dnssec_initialized`, `dnssec_info`, `dnssec_last_signed`, `rendered_zone`) ON ?? TO ?@?"; if ($verbose){ echo $query ."\n"; } -- GitLab From 35c1f9bfda8413043aedb073e2f8d7f1f34ef736 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Mon, 4 Jan 2021 16:06:37 +0100 Subject: [PATCH 249/403] Drutch translation --- interface/web/dns/lib/lang/nl_dns_soa.lng | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/web/dns/lib/lang/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng index 2b2b734e3b..fda742cf14 100644 --- a/interface/web/dns/lib/lang/nl_dns_soa.lng +++ b/interface/web/dns/lib/lang/nl_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format ter referentie en export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, er is nog geen data beschikbaar.'; ?> -- GitLab From c3aa52632f0d21e0e4c97dea110b69feea6fc4ab Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Wed, 17 Mar 2021 08:53:29 +0100 Subject: [PATCH 250/403] Fix sql condition --- server/plugins-available/bind_plugin.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index 02ef052426..433c5bfdbb 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -335,7 +335,7 @@ class bind_plugin { chgrp($filename, $dns_config['bind_group']); // Store also in the db for exports. - $app->dbmaster->query("UPDATE `dns_soa` SET `rendered_zone`=?", $rendered_zone); + $app->dbmaster->query("UPDATE `dns_soa` SET `rendered_zone`=? WHERE id=?", $rendered_zone, $zone['id']); //* Check the zonefile if(is_file($filename.'.err')) unlink($filename.'.err'); -- GitLab From 1cb3ba38c1df679f87661eb474edc6339d8b7c6f Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 17 Mar 2021 08:59:26 -0600 Subject: [PATCH 251/403] default dkim_strength=2048 --- install/tpl/server.ini.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 4732a85254..1fbadd8287 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -37,7 +37,7 @@ maildir_path=/var/vmail/[domain]/[localpart] homedir_path=/var/vmail maildir_format=maildir dkim_path=/var/lib/amavis/dkim -dkim_strength=4096 +dkim_strength=2048 content_filter=amavis rspamd_password= pop3_imap_daemon=courier -- GitLab From 4991d0e548e6ea481c1012579fda497627ae6d9f Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 17 Mar 2021 12:27:58 -0600 Subject: [PATCH 252/403] rspamd: fix user_settings_update loop --- server/plugins-available/rspamd_plugin.inc.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index 41f6b08f40..f3f6d97c8f 100644 --- a/server/plugins-available/rspamd_plugin.inc.php +++ b/server/plugins-available/rspamd_plugin.inc.php @@ -200,6 +200,8 @@ class rspamd_plugin { $is_domain = true; } + $app->log("rspamd: user_settings_update() for $type $email_address", LOGLEVEL_DEBUG); + if($settings_name == '') { // missing settings file name $app->log('Empty rspamd identifier in rspamd_plugin from identifier: ' . $use_data . '/' . $identifier, LOGLEVEL_WARN); @@ -217,7 +219,7 @@ class rspamd_plugin { $entries_to_update['mail_user'] = $mailusers; } - $forwardings = $app->db->queryAllRecords("SELECT mf.* FROM mail_forwarding as mf LEFT JOIN spamfilter_users as su ON (su.email = mf.source) WHERE mf.source LIKE ? AND su.id IS NULL", '%' . $email_address); + $forwardings = $app->db->queryAllRecords("SELECT mf.* FROM mail_forwarding as mf LEFT JOIN spamfilter_users as su ON (su.email = mf.source) WHERE mf.source LIKE ? AND su.id IS NULL", '%_' . $email_address); if(is_array($forwardings) && !empty($forwardings)) { $entries_to_update['mail_forwarding'] = $forwardings; } -- GitLab From d08b278d97a1a7761cf905b82a8190ccef63a18c Mon Sep 17 00:00:00 2001 From: Tommaso Basilici Date: Thu, 18 Mar 2021 14:20:10 +0100 Subject: [PATCH 253/403] #4961 modified remote API client edit to include lock and cancel, functions moved from client_edit to functions --- interface/lib/classes/functions.inc.php | 115 ++++++++++++++++ interface/lib/classes/remote.d/client.inc.php | 9 ++ interface/web/client/client_edit.php | 127 ++---------------- 3 files changed, 134 insertions(+), 117 deletions(-) diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 4d4c011fb5..8b52cd35c0 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -528,6 +528,121 @@ class functions { } } + // Function to lock a client + public function func_client_lock($client_id,$locked) { + + global $app; + $client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ?', $client_id); + if($client_data['tmp_data'] == '') $tmp_data = array(); + else $tmp_data = unserialize($client_data['tmp_data']); + if(!is_array($tmp_data)) $tmp_data = array(); + $to_disable = array('cron' => 'id', + 'ftp_user' => 'ftp_user_id', + 'mail_domain' => 'domain_id', + 'mail_user' => 'mailuser_id', + 'mail_user_smtp' => 'mailuser_id', + 'mail_forwarding' => 'forwarding_id', + 'mail_get' => 'mailget_id', + 'openvz_vm' => 'vm_id', + 'shell_user' => 'shell_user_id', + 'webdav_user' => 'webdav_user_id', + 'web_database' => 'database_id', + 'web_domain' => 'domain_id', + 'web_folder' => 'web_folder_id', + 'web_folder_user' => 'web_folder_user_id' + ); + + $udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ?', $client_id); + $gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ?', $client_id); + $sys_groupid = $gdata['groupid']; + $sys_userid = $udata['userid']; + if($locked == 'y') { + $prev_active = array(); + $prev_sysuser = array(); + foreach($to_disable as $current => $keycolumn) { + $active_col = 'active'; + $reverse = false; + if($current == 'mail_user') { + $active_col = 'postfix'; + } elseif($current == 'mail_user_smtp') { + $current = 'mail_user'; + $active_col = 'disablesmtp'; + $reverse = true; + } + + if(!isset($prev_active[$current])) $prev_active[$current] = array(); + if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array(); + + $entries = $app->db->queryAllRecords('SELECT ?? as `id`, `sys_userid`, ?? FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $active_col, $current, $sys_groupid); + foreach($entries as $item) { + + if($item[$active_col] != 'y' && $reverse == false) $prev_active[$current][$item['id']][$active_col] = 'n'; + elseif($item[$active_col] == 'y' && $reverse == true) $prev_active[$current][$item['id']][$active_col] = 'y'; + if($item['sys_userid'] != $sys_userid) $prev_sysuser[$current][$item['id']] = $item['sys_userid']; + // we don't have to store these if y, as everything without previous state gets enabled later + + //$app->db->datalogUpdate($current, array($active_col => ($reverse == true ? 'y' : 'n'), 'sys_userid' => $_SESSION["s"]["user"]["userid"]), $keycolumn, $item['id']); + $app->db->datalogUpdate($current, array($active_col => ($reverse == true ? 'y' : 'n'), 'sys_userid' => $sys_userid), $keycolumn, $item['id']); + } +} + + $tmp_data['prev_active'] = $prev_active; + $tmp_data['prev_sys_userid'] = $prev_sysuser; + $app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $client_id); + unset($prev_active); + unset($prev_sysuser); + } elseif ($locked == 'n') { + foreach($to_disable as $current => $keycolumn) { + $active_col = 'active'; + $reverse = false; + if($current == 'mail_user') { + $active_col = 'postfix'; + } elseif($current == 'mail_user_smtp') { + $current = 'mail_user'; + $active_col = 'disablesmtp'; + $reverse = true; + } + + $entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid); + foreach($entries as $item) { + $set_active = ($reverse == true ? 'n' : 'y'); + $set_inactive = ($reverse == true ? 'y' : 'n'); + $set_sysuser = $sys_userid; + if(array_key_exists('prev_active', $tmp_data) == true + && array_key_exists($current, $tmp_data['prev_active']) == true + && array_key_exists($item['id'], $tmp_data['prev_active'][$current]) == true + && $tmp_data['prev_active'][$current][$item['id']][$active_col] == $set_inactive) $set_active = $set_inactive; + if(array_key_exists('prev_sysuser', $tmp_data) == true + && array_key_exists($current, $tmp_data['prev_sysuser']) == true + && array_key_exists($item['id'], $tmp_data['prev_sysuser'][$current]) == true + && $tmp_data['prev_sysuser'][$current][$item['id']] != $sys_userid) $set_sysuser = $tmp_data['prev_sysuser'][$current][$item['id']]; + + $app->db->datalogUpdate($current, array($active_col => $set_active, 'sys_userid' => $set_sysuser), $keycolumn, $item['id']); + } + } + if(array_key_exists('prev_active', $tmp_data)) unset($tmp_data['prev_active']); + $app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $client_id); + } + unset($tmp_data); + unset($entries); + unset($to_disable); + + } + // Function to cancel disable/enable a client + public function func_client_cancel($client_id,$cancel) { + global $app; + if ($cancel == 'y') { + $sql = "UPDATE sys_user SET active = '0' WHERE client_id = ?"; + $result = $app->db->query($sql, $client_id); + } elseif($cancel == 'n') { + $sql = "UPDATE sys_user SET active = '1' WHERE client_id = ?"; + $result = $app->db->query($sql, $client_id); + } else { + $result = FALSE; + } + return $result; + } + } ?> diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php index 57412e5e19..fa20802b7d 100644 --- a/interface/lib/classes/remote.d/client.inc.php +++ b/interface/lib/classes/remote.d/client.inc.php @@ -243,6 +243,15 @@ class remoting_client extends remoting { $affected_rows = $this->updateQuery('../client/form/' . (isset($params['limit_client']) && $params['limit_client'] != 0 ? 'reseller' : 'client') . '.tform.php', $reseller_id, $client_id, $params, 'client:' . ($reseller_id ? 'reseller' : 'client') . ':on_after_update'); $app->remoting_lib->ispconfig_sysuser_update($params, $client_id); + + // if canceled + if ($params['canceled']) { + $result = functions::func_client_cancel($client_id, $params['canceled']); + } + // if locked + if ($params['locked']) { + $result = functions::func_client_lock($client_id, $params['locked']); + } return $affected_rows; } diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php index 3d2e4e805d..9bd114daad 100644 --- a/interface/web/client/client_edit.php +++ b/interface/web/client/client_edit.php @@ -425,123 +425,16 @@ class page_action extends tform_actions { $app->db->query($sql, $password, $client_id); } - if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n'; - if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["locked"] != $this->oldDataRecord['locked']) { - /** lock all the things like web, mail etc. - easy to extend */ - - - // get tmp_data of client - $client_data = $app->db->queryOneRecord('SELECT `tmp_data` FROM `client` WHERE `client_id` = ?', $this->id); - - if($client_data['tmp_data'] == '') $tmp_data = array(); - else $tmp_data = unserialize($client_data['tmp_data']); - - if(!is_array($tmp_data)) $tmp_data = array(); - - // database tables with their primary key columns - $to_disable = array('cron' => 'id', - 'ftp_user' => 'ftp_user_id', - 'mail_domain' => 'domain_id', - 'mail_user' => 'mailuser_id', - 'mail_user_smtp' => 'mailuser_id', - 'mail_forwarding' => 'forwarding_id', - 'mail_get' => 'mailget_id', - 'openvz_vm' => 'vm_id', - 'shell_user' => 'shell_user_id', - 'webdav_user' => 'webdav_user_id', - 'web_database' => 'database_id', - 'web_domain' => 'domain_id', - 'web_folder' => 'web_folder_id', - 'web_folder_user' => 'web_folder_user_id' - ); - - $udata = $app->db->queryOneRecord('SELECT `userid` FROM `sys_user` WHERE `client_id` = ?', $this->id); - $gdata = $app->db->queryOneRecord('SELECT `groupid` FROM `sys_group` WHERE `client_id` = ?', $this->id); - $sys_groupid = $gdata['groupid']; - $sys_userid = $udata['userid']; - - $entries = array(); - if($this->dataRecord['locked'] == 'y') { - $prev_active = array(); - $prev_sysuser = array(); - foreach($to_disable as $current => $keycolumn) { - $active_col = 'active'; - $reverse = false; - if($current == 'mail_user') { - $active_col = 'postfix'; - } elseif($current == 'mail_user_smtp') { - $current = 'mail_user'; - $active_col = 'disablesmtp'; - $reverse = true; - } - - if(!isset($prev_active[$current])) $prev_active[$current] = array(); - if(!isset($prev_sysuser[$current])) $prev_sysuser[$current] = array(); - - $entries = $app->db->queryAllRecords('SELECT ?? as `id`, `sys_userid`, ?? FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $active_col, $current, $sys_groupid); - foreach($entries as $item) { - - if($item[$active_col] != 'y' && $reverse == false) $prev_active[$current][$item['id']][$active_col] = 'n'; - elseif($item[$active_col] == 'y' && $reverse == true) $prev_active[$current][$item['id']][$active_col] = 'y'; - if($item['sys_userid'] != $sys_userid) $prev_sysuser[$current][$item['id']] = $item['sys_userid']; - // we don't have to store these if y, as everything without previous state gets enabled later - - $app->db->datalogUpdate($current, array($active_col => ($reverse == true ? 'y' : 'n'), 'sys_userid' => $_SESSION["s"]["user"]["userid"]), $keycolumn, $item['id']); - } - } - - $tmp_data['prev_active'] = $prev_active; - $tmp_data['prev_sys_userid'] = $prev_sysuser; - $app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id); - unset($prev_active); - unset($prev_sysuser); - } elseif($this->dataRecord['locked'] == 'n') { - foreach($to_disable as $current => $keycolumn) { - $active_col = 'active'; - $reverse = false; - if($current == 'mail_user') { - $active_col = 'postfix'; - } elseif($current == 'mail_user_smtp') { - $current = 'mail_user'; - $active_col = 'disablesmtp'; - $reverse = true; - } - - $entries = $app->db->queryAllRecords('SELECT ?? as `id` FROM ?? WHERE `sys_groupid` = ?', $keycolumn, $current, $sys_groupid); - foreach($entries as $item) { - $set_active = ($reverse == true ? 'n' : 'y'); - $set_inactive = ($reverse == true ? 'y' : 'n'); - $set_sysuser = $sys_userid; - if(array_key_exists('prev_active', $tmp_data) == true - && array_key_exists($current, $tmp_data['prev_active']) == true - && array_key_exists($item['id'], $tmp_data['prev_active'][$current]) == true - && $tmp_data['prev_active'][$current][$item['id']][$active_col] == $set_inactive) $set_active = $set_inactive; - if(array_key_exists('prev_sysuser', $tmp_data) == true - && array_key_exists($current, $tmp_data['prev_sysuser']) == true - && array_key_exists($item['id'], $tmp_data['prev_sysuser'][$current]) == true - && $tmp_data['prev_sysuser'][$current][$item['id']] != $sys_userid) $set_sysuser = $tmp_data['prev_sysuser'][$current][$item['id']]; - - $app->db->datalogUpdate($current, array($active_col => $set_active, 'sys_userid' => $set_sysuser), $keycolumn, $item['id']); - } - } - if(array_key_exists('prev_active', $tmp_data)) unset($tmp_data['prev_active']); - $app->db->query("UPDATE `client` SET `tmp_data` = ? WHERE `client_id` = ?", serialize($tmp_data), $this->id); - } - unset($tmp_data); - unset($entries); - unset($to_disable); - } - - if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n'; - if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) { - if($this->dataRecord['canceled'] == 'y') { - $sql = "UPDATE sys_user SET active = '0' WHERE client_id = ?"; - $app->db->query($sql, $this->id); - } elseif($this->dataRecord['canceled'] == 'n') { - $sql = "UPDATE sys_user SET active = '1' WHERE client_id = ?"; - $app->db->query($sql, $this->id); - } - } + // lock and cancel + if(!isset($this->dataRecord['locked'])) $this->dataRecord['locked'] = 'n'; + if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["locked"] != $this->oldDataRecord['locked']) { + $lock = functions::func_client_lock($this->id,$this->dataRecord["locked"]); + } + + if(!isset($this->dataRecord['canceled'])) $this->dataRecord['canceled'] = 'n'; + if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && $this->dataRecord["canceled"] != $this->oldDataRecord['canceled']) { + $cancel = functions::func_client_cancel($this->id,$this->dataRecord["canceled"]); + } // language changed if(isset($conf['demo_mode']) && $conf['demo_mode'] != true && isset($this->dataRecord['language']) && $this->dataRecord['language'] != '' && $this->oldDataRecord['language'] != $this->dataRecord['language']) { -- GitLab From 8be8f7a82fea7d9b44e6d0d1aca554116c4922cc Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Mon, 22 Mar 2021 09:18:48 +0100 Subject: [PATCH 254/403] Highlight offline services in table, #6117 --- interface/web/themes/default/assets/stylesheets/ispconfig.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index 9d44048e82..963476f501 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -802,6 +802,9 @@ input[type="password"].form-control[readonly] { .systemmonitor-state.state-info .statusMsg { display: none; } +.systemmonitor-state .offline { + color: red; +} span.notification_text { display: block; -- GitLab From 61e25a09229372648ee160f14e2448fc58727248 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Mon, 22 Mar 2021 20:12:02 +0100 Subject: [PATCH 255/403] Online services as green --- interface/web/themes/default/assets/stylesheets/ispconfig.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/web/themes/default/assets/stylesheets/ispconfig.css b/interface/web/themes/default/assets/stylesheets/ispconfig.css index 963476f501..c53b988632 100644 --- a/interface/web/themes/default/assets/stylesheets/ispconfig.css +++ b/interface/web/themes/default/assets/stylesheets/ispconfig.css @@ -802,6 +802,9 @@ input[type="password"].form-control[readonly] { .systemmonitor-state.state-info .statusMsg { display: none; } +.systemmonitor-state .online { + color: green; +} .systemmonitor-state .offline { color: red; } -- GitLab From 935e8870218418ebb86ac98eb858cb2e2fc2df5a Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 23 Mar 2021 15:21:55 -0600 Subject: [PATCH 256/403] postfix: fix 'enable receiving' checkbox --- install/tpl/mysql-virtual_email2email.cf.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master index f420a104d9..21d5146f2c 100644 --- a/install/tpl/mysql-virtual_email2email.cf.master +++ b/install/tpl/mysql-virtual_email2email.cf.master @@ -2,7 +2,7 @@ user = {mysql_server_ispconfig_user} password = {mysql_server_ispconfig_password} dbname = {mysql_server_database} hosts = {mysql_server_ip} -query = SELECT email FROM mail_user WHERE email = '%s' AND forward_in_lda = 'n' AND disabledeliver = 'n' AND disablesmtp = 'n' AND server_id = {server_id} +query = SELECT email FROM mail_user WHERE email = '%s' AND forward_in_lda = 'n' AND disabledeliver = 'n' AND postfix = 'y' AND server_id = {server_id} AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id}) UNION SELECT cc AS email FROM mail_user WHERE email = '%s' AND cc != '' AND (forward_in_lda = 'n' OR disabledeliver = 'y') AND disablesmtp = 'n' AND server_id = {server_id} -- GitLab From 32048facf803dcdd08ea6bcca295158633b57762 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 23 Mar 2021 15:36:35 -0600 Subject: [PATCH 257/403] updater: reset umask after creating tmpdir --- server/scripts/update_runner.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/scripts/update_runner.sh b/server/scripts/update_runner.sh index 5647272f3a..8c885f7299 100644 --- a/server/scripts/update_runner.sh +++ b/server/scripts/update_runner.sh @@ -40,10 +40,12 @@ cd /tmp if [ -n "${_UPD}" ] then { + save_umask=`umask` umask 0077 \ && tmpdir=`mktemp -dt "$(basename $0).XXXXXXXXXX"` \ && test -d "${tmpdir}" \ && cd "${tmpdir}" + umask $save_umask } || { echo 'mktemp failed' exit 1 -- GitLab From b801952990365ed0c74d30d089ecec981d157375 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 23 Mar 2021 15:41:08 -0600 Subject: [PATCH 258/403] ensure created rspamd directories have correct permission --- install/lib/installer_base.lib.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 6de768f7e5..9c7e139c37 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -1800,14 +1800,17 @@ class installer_base { if(!is_dir('/etc/rspamd/local.d/')){ mkdir('/etc/rspamd/local.d/', 0755, true); + chmod('/etc/rspamd/local.d/', 0755); } if(!is_dir('/etc/rspamd/local.d/maps.d/')){ mkdir('/etc/rspamd/local.d/maps.d/', 0755, true); + chmod('/etc/rspamd/local.d/maps.d/', 0755); } if(!is_dir('/etc/rspamd/override.d/')){ mkdir('/etc/rspamd/override.d/', 0755, true); + chmod('/etc/rspamd/override.d/', 0755); } if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) { -- GitLab From a849544259034788204ef2f22131bb8f94c84a28 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 24 Mar 2021 11:18:59 -0600 Subject: [PATCH 259/403] dovecot: include custom config earlier --- install/tpl/debian6_dovecot2.conf.master | 10 +++++----- install/tpl/debian_dovecot2.conf.master | 10 +++++----- install/tpl/fedora_dovecot2.conf.master | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 91d745bc39..7c83812dd6 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -16,6 +16,7 @@ ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDH ssl_prefer_server_ciphers = no mail_max_userip_connections = 100 mail_plugins = quota +!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql @@ -68,21 +69,21 @@ service imap-login { process_limit = 512 } protocol imap { - mail_plugins = quota imap_quota + mail_plugins = $mail_plugins quota imap_quota auth_verbose = yes } protocol pop3 { pop3_uidl_format = %08Xu%08Xv - mail_plugins = quota + mail_plugins = $mail_plugins quota auth_verbose = yes } protocol lda { postmaster_address = webmaster@localhost - mail_plugins = sieve quota + mail_plugins = $mail_plugins sieve quota } protocol lmtp { postmaster_address = webmaster@localhost - mail_plugins = quota sieve + mail_plugins = $mail_plugins quota sieve } #2.3+ service stats { @@ -134,4 +135,3 @@ namespace inbox { special_use = \Trash } } -!include_try conf.d/99-ispconfig-custom-config.conf diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index acbb5ccdff..067f5676e2 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -16,6 +16,7 @@ ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDH ssl_prefer_server_ciphers = no mail_max_userip_connections = 100 mail_plugins = quota +!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql @@ -65,21 +66,21 @@ service imap-login { process_limit = 512 } protocol imap { - mail_plugins = quota imap_quota + mail_plugins = $mail_plugins quota imap_quota auth_verbose = yes } protocol pop3 { pop3_uidl_format = %08Xu%08Xv - mail_plugins = quota + mail_plugins = $mail_plugins quota auth_verbose = yes } protocol lda { postmaster_address = webmaster@localhost - mail_plugins = sieve quota + mail_plugins = $mail_plugins sieve quota } protocol lmtp { postmaster_address = webmaster@localhost - mail_plugins = quota sieve + mail_plugins = $mail_plugins quota sieve } @@ -111,4 +112,3 @@ plugin { quota_status_nouser = DUNNO quota_status_overquota = "552 5.2.2 Mailbox is full" } -!include_try conf.d/99-ispconfig-custom-config.conf diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index 0b31c23b4e..c518fbad74 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -13,6 +13,7 @@ ssl_min_protocol = TLSv1.2 ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl_prefer_server_ciphers = no mail_plugins = quota +!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot-sql.conf driver = sql @@ -62,21 +63,21 @@ service imap-login { process_limit = 500 } protocol imap { - mail_plugins = quota imap_quota + mail_plugins = $mail_plugins quota imap_quota auth_verbose = yes } protocol pop3 { pop3_uidl_format = %08Xu%08Xv - mail_plugins = quota + mail_plugins = $mail_plugins quota auth_verbose = yes } protocol lda { - mail_plugins = sieve quota + mail_plugins = $mail_plugins sieve quota postmaster_address = root@localhost } protocol lmtp { postmaster_address = webmaster@localhost - mail_plugins = quota sieve + mail_plugins = $mail_plugins quota sieve } #2.3+ service stats { @@ -128,4 +129,3 @@ namespace inbox { special_use = \Trash } } -!include_try conf.d/99-ispconfig-custom-config.conf -- GitLab From f424031f8e2a4ba9427041dbd742e64edbc49130 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Thu, 25 Mar 2021 09:57:59 -0600 Subject: [PATCH 260/403] jailkit cron: always chown/chmod home dir --- server/plugins-available/cron_jailkit_plugin.inc.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php index a186a12886..8bd33b3de0 100644 --- a/server/plugins-available/cron_jailkit_plugin.inc.php +++ b/server/plugins-available/cron_jailkit_plugin.inc.php @@ -339,10 +339,11 @@ class cron_jailkit_plugin { if(!is_dir($this->parent_domain['document_root'].$jailkit_chroot_userhome)) { $app->system->mkdir($this->parent_domain['document_root'].$jailkit_chroot_userhome, 0750, true); - $app->system->chown($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_user']); - $app->system->chgrp($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_group']); } + $app->system->chown($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_user']); + $app->system->chgrp($this->parent_domain['document_root'].$jailkit_chroot_userhome, $this->parent_domain['system_group']); + } function _get_home_dir($username) -- GitLab From d15f5a7d058162fff137501fd139d504e06fdab2 Mon Sep 17 00:00:00 2001 From: Thom Date: Mon, 29 Mar 2021 15:45:33 +0000 Subject: [PATCH 261/403] Only add http2 to nginx vhost if SSL is enabled (#6127) --- install/lib/installer_base.lib.php | 4 ++-- install/tpl/nginx_apps.vhost.master | 4 ++-- install/tpl/nginx_ispconfig.vhost.master | 4 ++-- server/conf/nginx_apps.vhost.master | 4 ++-- server/plugins-available/apps_vhost_plugin.inc.php | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index eb3a65bd96..42a3b1792a 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2627,7 +2627,7 @@ class installer_base { // Enable SSL if a cert is in place. if(is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.crt') && is_file($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.key')) { - $content = str_replace('{ssl_on}', 'ssl', $content); + $content = str_replace('{ssl_on}', 'ssl http2', $content); $content = str_replace('{ssl_comment}', '', $content); } else { $content = str_replace('{ssl_on}', '', $content); @@ -3524,7 +3524,7 @@ class installer_base { $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content); if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) { - $content = str_replace('{ssl_on}', 'ssl', $content); + $content = str_replace('{ssl_on}', 'ssl http2', $content); $content = str_replace('{ssl_comment}', '', $content); $content = str_replace('{fastcgi_ssl}', 'on', $content); } else { diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index de48420054..181f4c807e 100644 --- a/install/tpl/nginx_apps.vhost.master +++ b/install/tpl/nginx_apps.vhost.master @@ -1,6 +1,6 @@ server { - listen {apps_vhost_ip}{apps_vhost_port} {ssl_on} http2; - listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on http2; + listen {apps_vhost_ip}{apps_vhost_port} {ssl_on}; + listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master index e1c39ee98b..dbe44d7064 100644 --- a/install/tpl/nginx_ispconfig.vhost.master +++ b/install/tpl/nginx_ispconfig.vhost.master @@ -1,6 +1,6 @@ server { - listen {vhost_port} {ssl_on} http2; - listen [::]:{vhost_port} {ssl_on} ipv6only=on http2; + listen {vhost_port} {ssl_on}; + listen [::]:{vhost_port} {ssl_on} ipv6only=on; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index de48420054..181f4c807e 100644 --- a/server/conf/nginx_apps.vhost.master +++ b/server/conf/nginx_apps.vhost.master @@ -1,6 +1,6 @@ server { - listen {apps_vhost_ip}{apps_vhost_port} {ssl_on} http2; - listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on http2; + listen {apps_vhost_ip}{apps_vhost_port} {ssl_on}; + listen [::]:{apps_vhost_port} {ssl_on} ipv6only=on; {ssl_comment}ssl_protocols TLSv1.2; {ssl_comment}ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt; diff --git a/server/plugins-available/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php index d391633b62..91a994b109 100644 --- a/server/plugins-available/apps_vhost_plugin.inc.php +++ b/server/plugins-available/apps_vhost_plugin.inc.php @@ -209,7 +209,7 @@ class apps_vhost_plugin { /* Check if SSL should be enabled: */ if(is_file('/usr/local/ispconfig/interface/ssl/ispserver.crt') && is_file('/usr/local/ispconfig/interface/ssl/ispserver.key')) { $content = str_replace('{ssl_comment}', '', $content); - $content = str_replace('{ssl_on}', 'ssl', $content); + $content = str_replace('{ssl_on}', 'ssl http2', $content); } else { $content = str_replace('{ssl_comment}', '#', $content); $content = preg_replace('/(\s)\{ssl_on\}/', '', $content); -- GitLab From e08928d2b7d9ca1fd93bad8975189bba2abf55c3 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 10:48:50 +0200 Subject: [PATCH 262/403] - enable acme.sh upgrade / set default server to letsencrypt --- install/lib/installer_base.lib.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 42a3b1792a..8d9ee9bf7e 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -51,6 +51,21 @@ class installer_base { return ($val == 0 ? true : false); } + private function update_acme() { + $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); + $acme = reset($acme); + $val = 0; + + if($acme) { + $cmd = $acme . ' --upgrade --auto-upgrade ; ' . $acme . ' --set-default-ca --server letsencrypt'; + $ret = null; + $val = 0; + exec($cmd. ' 2>&1', $ret, $val); + } + + return ($val == 0 ? true : false); + } + //: TODO Implement the translation function and language files for the installer. public function lng($text) { return $text; @@ -2923,6 +2938,11 @@ class installer_base { } } + if($acme && is_executable($acme)) { + // we do this even on install to enable automatic updates + $this->update_acme(); + } + $restore_conf_symlink = false; // we only need this for apache, so use fixed conf index -- GitLab From 30c922c3d5c286260d5dd5c94ea29a3e8d15f922 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 10:53:20 +0200 Subject: [PATCH 263/403] - update for acme.sh if installed (also if not re-creating cert for ispc) --- install/install.php | 3 +++ install/lib/installer_base.lib.php | 10 ++++------ install/update.php | 3 +++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/install/install.php b/install/install.php index 7bc3836223..a5233744c8 100644 --- a/install/install.php +++ b/install/install.php @@ -597,6 +597,9 @@ if(!$issue_asked) { } } +// update acme.sh if installed +$inst->update_acme(); + if($conf['services']['web'] == true) { //** Configure apps vhost swriteln('Configuring Apps vhost'); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 8d9ee9bf7e..1664ddc210 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -56,7 +56,7 @@ class installer_base { $acme = reset($acme); $val = 0; - if($acme) { + if($acme && is_executable($acme)) { $cmd = $acme . ' --upgrade --auto-upgrade ; ' . $acme . ' --set-default-ca --server letsencrypt'; $ret = null; $val = 0; @@ -2932,17 +2932,15 @@ class installer_base { $acme = reset($acme); if($acme && is_executable($acme)) { swriteln('Installed acme.sh and using it for certificate creation during install.'); + + // we do this even on install to enable automatic updates + $this->update_acme(); } else { swriteln('Failed installing acme.sh. Will not be able to issue certificate during install.'); } } } - if($acme && is_executable($acme)) { - // we do this even on install to enable automatic updates - $this->update_acme(); - } - $restore_conf_symlink = false; // we only need this for apache, so use fixed conf index diff --git a/install/update.php b/install/update.php index e821eac203..0122f27678 100644 --- a/install/update.php +++ b/install/update.php @@ -566,6 +566,9 @@ if(!$issue_asked) { } } +// update acme.sh if installed +$inst->update_acme(); + $inst->install_ispconfig(); // Cleanup -- GitLab From daa41dbb2a43a3a766b1b540fa2bb0eaf5076456 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 11:07:03 +0200 Subject: [PATCH 264/403] - add missing columns to powerdns --- install/dist/lib/gentoo.lib.php | 4 ++-- install/lib/installer_base.lib.php | 4 ++-- install/sql/powerdns.sql | 25 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index 78dffabf85..83a4b5ffaf 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -531,10 +531,10 @@ class installer extends installer_base //* load the powerdns databse dump if($conf['mysql']['admin_password'] == '') { - caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' --force '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); } else { - caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' --force '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); } diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 42a3b1792a..95c1eecbd8 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -2049,10 +2049,10 @@ class installer_base { //* load the powerdns databse dump if($conf['mysql']['admin_password'] == '') { - caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' --force '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); } else { - caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", + caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' --force '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); } diff --git a/install/sql/powerdns.sql b/install/sql/powerdns.sql index c9bf8280f2..d803f70fb0 100644 --- a/install/sql/powerdns.sql +++ b/install/sql/powerdns.sql @@ -20,6 +20,8 @@ CREATE TABLE IF NOT EXISTS `records` ( `ttl` int(11) default NULL, `prio` int(11) default NULL, `change_date` int(11) default NULL, + `disabled` tinyint(1) default 0, + `auth` tinyint(1) default 1, `ispconfig_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `rec_name_index` (`name`), @@ -32,3 +34,26 @@ CREATE TABLE IF NOT EXISTS `supermasters` ( `nameserver` varchar(255) NOT NULL, `account` varchar(40) default NULL ) ENGINE=InnoDB; + +CREATE TABLE IF NOT EXISTS `domainmetadata` ( + `id` int auto_increment, + `domain_id` int NOT NULL, + `kind` varchar(32), + `content` TEXT, + PRIMARY KEY (`id`) +) Engine=InnoDB; + + +-- add new columns if not existing +SET @dbname = DATABASE(); + +SELECT count(*) INTO @exist FROM `information_schema`.`columns` WHERE `table_schema` = @dbname AND `column_name` = 'auth' AND `table_name` = 'records' LIMIT 1; +SET @query = IF(@exist <= 0, 'ALTER TABLE `records` ADD COLUMN `auth` tinyint(1) default 0 AFTER `change_date`', 'SELECT \'Column Exists\' STATUS'); +PREPARE stmt FROM @query; +EXECUTE stmt; + +SELECT count(*) INTO @exist FROM `information_schema`.`columns` WHERE `table_schema` = @dbname AND `column_name` = 'disabled' AND `table_name` = 'records' LIMIT 1; +SET @query = IF(@exist <= 0, 'ALTER TABLE `records` ADD COLUMN `disabled` tinyint(1) default 0 AFTER `change_date`', 'SELECT \'Column Exists\' STATUS'); +PREPARE stmt FROM @query; +EXECUTE stmt; + -- GitLab From 4637b536337742d87a00c269c3927b5adb5ee0e9 Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 11:21:04 +0200 Subject: [PATCH 265/403] - fixed wrong default value for auth --- install/sql/powerdns.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/sql/powerdns.sql b/install/sql/powerdns.sql index d803f70fb0..640e06eb06 100644 --- a/install/sql/powerdns.sql +++ b/install/sql/powerdns.sql @@ -48,7 +48,7 @@ CREATE TABLE IF NOT EXISTS `domainmetadata` ( SET @dbname = DATABASE(); SELECT count(*) INTO @exist FROM `information_schema`.`columns` WHERE `table_schema` = @dbname AND `column_name` = 'auth' AND `table_name` = 'records' LIMIT 1; -SET @query = IF(@exist <= 0, 'ALTER TABLE `records` ADD COLUMN `auth` tinyint(1) default 0 AFTER `change_date`', 'SELECT \'Column Exists\' STATUS'); +SET @query = IF(@exist <= 0, 'ALTER TABLE `records` ADD COLUMN `auth` tinyint(1) default 1 AFTER `change_date`', 'SELECT \'Column Exists\' STATUS'); PREPARE stmt FROM @query; EXECUTE stmt; -- GitLab From 6d9d4c592882a4f05576c66eee6095f207f961ec Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 14:19:11 +0000 Subject: [PATCH 266/403] Apply 1 suggestion(s) to 1 file(s) --- server/conf/rspamd_classifier-bayes.conf.master | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/conf/rspamd_classifier-bayes.conf.master b/server/conf/rspamd_classifier-bayes.conf.master index 48dc9f6b53..c9e83495aa 100644 --- a/server/conf/rspamd_classifier-bayes.conf.master +++ b/server/conf/rspamd_classifier-bayes.conf.master @@ -6,8 +6,8 @@ servers = ""; password = "";
autolearn { - spam_threshold = 9.0; # When to learn spam (score >= threshold) - ham_threshold = -1.5; # When to learn ham (score <= threshold) + spam_threshold = 6.0; + ham_threshold = -0.5; # When to learn ham (score <= threshold) check_balance = true; # Check spam and ham balance min_balance = 0.9; # Keep diff for spam/ham learns for at least this value } -- GitLab From fcff3cd195ad9ac917bf5b050413647ecca4b3da Mon Sep 17 00:00:00 2001 From: Marius Burkard Date: Wed, 31 Mar 2021 17:50:24 +0000 Subject: [PATCH 267/403] Apply 1 suggestion(s) to 1 file(s) --- 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 1664ddc210..ae2b288cdb 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -51,7 +51,7 @@ class installer_base { return ($val == 0 ? true : false); } - private function update_acme() { + public function update_acme() { $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); $acme = reset($acme); $val = 0; -- GitLab From c3cb53482e8dcf9f3c55a68ec6446655705b8715 Mon Sep 17 00:00:00 2001 From: Thom Date: Wed, 31 Mar 2021 18:53:28 +0000 Subject: [PATCH 268/403] Run wget and tar silently on update --- server/scripts/update_runner.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/scripts/update_runner.sh b/server/scripts/update_runner.sh index 8c885f7299..89f883bc52 100644 --- a/server/scripts/update_runner.sh +++ b/server/scripts/update_runner.sh @@ -51,10 +51,10 @@ then exit 1 } - wget -O ISPConfig-3.tar.gz "${URL}" + wget -O -Q ISPConfig-3.tar.gz "${URL}" if [ -f ISPConfig-3.tar.gz ] then - tar xvzf ISPConfig-3.tar.gz --strip-components=1 + tar xzf ISPConfig-3.tar.gz --strip-components=1 cd install/ php -q \ -d disable_classes= \ -- GitLab From c799186909a7e4ba6ef4fa858cc801f9cc0e32d9 Mon Sep 17 00:00:00 2001 From: Thom Date: Wed, 31 Mar 2021 19:00:27 +0000 Subject: [PATCH 269/403] Fix typo --- server/scripts/update_runner.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/scripts/update_runner.sh b/server/scripts/update_runner.sh index 89f883bc52..f83dc28d9e 100644 --- a/server/scripts/update_runner.sh +++ b/server/scripts/update_runner.sh @@ -51,7 +51,7 @@ then exit 1 } - wget -O -Q ISPConfig-3.tar.gz "${URL}" + wget -q -O ISPConfig-3.tar.gz "${URL}" if [ -f ISPConfig-3.tar.gz ] then tar xzf ISPConfig-3.tar.gz --strip-components=1 -- GitLab From 5e2b43c84f2d821f010b64b29da5cd8094bba54d Mon Sep 17 00:00:00 2001 From: Thom Date: Wed, 31 Mar 2021 19:24:05 +0000 Subject: [PATCH 270/403] Add echo's for download/unpack process --- server/scripts/update_runner.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/scripts/update_runner.sh b/server/scripts/update_runner.sh index f83dc28d9e..e432fc006a 100644 --- a/server/scripts/update_runner.sh +++ b/server/scripts/update_runner.sh @@ -51,9 +51,11 @@ then exit 1 } + echo "Downloading ISPConfig update." wget -q -O ISPConfig-3.tar.gz "${URL}" if [ -f ISPConfig-3.tar.gz ] then + echo "Unpacking ISPConfig update." tar xzf ISPConfig-3.tar.gz --strip-components=1 cd install/ php -q \ -- GitLab From bb68be204db7a5708325f7e1a25e5216067e8899 Mon Sep 17 00:00:00 2001 From: Thom Date: Wed, 31 Mar 2021 21:22:09 +0000 Subject: [PATCH 271/403] include_try for general dovecot at the end of the config --- install/tpl/debian6_dovecot2.conf.master | 3 ++- install/tpl/debian_dovecot2.conf.master | 3 ++- install/tpl/fedora_dovecot2.conf.master | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 7c3e31879d..36ae86fa6d 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -16,7 +16,6 @@ ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDH ssl_prefer_server_ciphers = no mail_max_userip_connections = 100 mail_plugins = quota -!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql @@ -135,3 +134,5 @@ namespace inbox { special_use = \Trash } } + +!include_try conf.d/99-ispconfig-custom-config.conf \ No newline at end of file diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 067f5676e2..12288e2cde 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -16,7 +16,6 @@ ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDH ssl_prefer_server_ciphers = no mail_max_userip_connections = 100 mail_plugins = quota -!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql @@ -112,3 +111,5 @@ plugin { quota_status_nouser = DUNNO quota_status_overquota = "552 5.2.2 Mailbox is full" } + +!include_try conf.d/99-ispconfig-custom-config.conf \ No newline at end of file diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index c518fbad74..d4cd148ef0 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -13,7 +13,6 @@ ssl_min_protocol = TLSv1.2 ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl_prefer_server_ciphers = no mail_plugins = quota -!include_try conf.d/99-ispconfig-custom-config.conf passdb { args = /etc/dovecot-sql.conf driver = sql @@ -129,3 +128,5 @@ namespace inbox { special_use = \Trash } } + +!include_try conf.d/99-ispconfig-custom-config.conf -- GitLab From 768a531afb97646d6a9a7ffc3070220a8c058500 Mon Sep 17 00:00:00 2001 From: Thom Date: Fri, 2 Apr 2021 08:03:48 +0000 Subject: [PATCH 272/403] Remove duplicate data placeholder (#6138) --- server/conf/bind_pri.domain.master | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master index e5af0ca311..efaa06a28d 100644 --- a/server/conf/bind_pri.domain.master +++ b/server/conf/bind_pri.domain.master @@ -54,7 +54,7 @@ $TTL {tmpl_var name='ttl'} {tmpl_var name='name'} {tmpl_var name='ttl'} SRV {tmpl_var name='aux'} {tmpl_var name='data'}
-{tmpl_var name='name'} {tmpl_var name='ttl'} SSHFP {tmpl_var name='data'} {tmpl_var name='data'} +{tmpl_var name='name'} {tmpl_var name='ttl'} SSHFP {tmpl_var name='data'} {tmpl_var name='name'} {tmpl_var name='ttl'} TLSA {tmpl_var name='data'} -- GitLab From afc1c2ecaf4ea263c26645d4338a2ed77b262311 Mon Sep 17 00:00:00 2001 From: Daniel Jagszent Date: Wed, 7 Apr 2021 14:23:40 +0200 Subject: [PATCH 273/403] Ensure that we always have two capture groups in nginx redirect regex expressions We sometimes had one and mostly had two capture groups. Now we always have two capture groups and thus can always use $2 for the redirect target. Fixes #6144 --- server/conf/nginx_vhost.conf.master | 4 ++-- server/plugins-available/nginx_plugin.inc.php | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index d5e457b9e3..50c0cf5183 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -60,13 +60,13 @@ server { if ($http_host "") { - rewrite ^(.*)$ $1 ; + rewrite ^(.*)$ $2 ; } - if ($http_host != "") { rewrite ^(.*)$ $1 ; } + if ($http_host != "") { rewrite ^(.*)$ $2 ; } location / { diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 92d8bac7f9..2a1ba6c13a 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1499,7 +1499,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; + $rewrite_exclude = '(?!/(\.well-known/acme-challenge))/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; @@ -1551,7 +1551,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; + $rewrite_exclude = '(?!/(\.well-known/acme-challenge))/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; @@ -1601,7 +1601,7 @@ class nginx_plugin { } } else { // external URL - $rewrite_exclude = '(?!\.well-known/acme-challenge)/'; + $rewrite_exclude = '(?!/(\.well-known/acme-challenge))/'; if($data['new']['redirect_type'] == 'proxy'){ $vhost_data['use_proxy'] = 'y'; $rewrite_subdir = $tmp_redirect_path_parts['path']; -- GitLab From 38c7515bb1ad44ca7af451e0326813fe493598c2 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Wed, 7 Apr 2021 17:32:19 -0600 Subject: [PATCH 274/403] sieve: case insensitive move to junk test matched 'BAYES' for 'Yes' --- server/conf/sieve_filter.master | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index 16a39ec180..fd216d3d64 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -7,7 +7,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { +if anyof (header :is ["X-Spam", "X-Spam-Flag"] "Yes", header :matches "X-Spam-Status" "Yes, *") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -33,7 +33,7 @@ require ["fileinto", "mailbox", "regex", "date", "relational", "vacation", "imap # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { +if anyof (header :is ["X-Spam", "X-Spam-Flag"] "Yes", header :matches "X-Spam-Status" "Yes, *") { fileinto :create "Junk"; # Stop here so that we do not reply on spams stop; @@ -46,7 +46,7 @@ if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-S ################################################################# # Move spam to spam folder -if anyof (header :contains "X-Spam-Flag" "YES", header :contains ["X-Spam", "X-Spam-Status"] "Yes") { +if anyof (header :is ["X-Spam", "X-Spam-Flag"] "Yes", header :matches "X-Spam-Status" "Yes, *") { # Stop here so that we do not reply on spams stop; } -- GitLab From c5e82d49695b4af4d5eff67db8eca8b9af6f9515 Mon Sep 17 00:00:00 2001 From: Thom Date: Thu, 8 Apr 2021 16:00:28 +0000 Subject: [PATCH 275/403] Fix broken check for correct index file (#6147) --- server/conf/awstats_index.php.master | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/server/conf/awstats_index.php.master b/server/conf/awstats_index.php.master index b3e694ebbf..a82de8a0ca 100644 --- a/server/conf/awstats_index.php.master +++ b/server/conf/awstats_index.php.master @@ -43,23 +43,17 @@ if ($handle = opendir('.')) arsort($awprev); $options = ""; -foreach ($awprev as $key => $value) -{ - - if(file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) { - $awstatsindex = 'awsindex.html'; - } elseif(file_exists($value.'/awsindex.html') && !file_exists($value.'/goaindex.html')) { - $awstatsindex = 'awsindex.html'; - } else { - $awstatsindex = 'goaindex.html'; - } - +foreach ($awprev as $key => $value) { + // Define name for the index file + $awstatsindex = 'awsindex.html'; + if(!file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) { + $awstatsindex = 'goaindex.html'; + } + // Set name for first entry in month list if($key == $current) $options .= "\n"; else $options .= "\n"; } -$awstatsindex = 'awsindex.html'; - $html = "\n\n\nStats\n"; $html .= " + + +
+

dns_ds_add($session_id, $client_id, $params);

+
+

Description:

+

Adds a dns authoritative nameserver record if type is ds.


+

Input Variables:

+

$session_id, $client_id, $params

+

Parameters (in $params):

+

server_id  (int(11))

+

zone  (int(11))

+

name  (varchar(64))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

+

data  (varchar(255))

+

aux  (int(11))

+

ttl  (int(11))

+

active  (enum('n','y'))

+

stamp  (timestamp)

+

serial  (int(10))

+

Output:

+

Returns the ID of the newly added ds resource record.

+ +
+ + diff --git a/remoting_client/API-docs/dns_ds_delete.html b/remoting_client/API-docs/dns_ds_delete.html new file mode 100644 index 0000000000..6e54496d0a --- /dev/null +++ b/remoting_client/API-docs/dns_ds_delete.html @@ -0,0 +1,29 @@ + +ISPCOnfig 3 remote API documentation + + + + + + + + + + +
+

dns_ds_delete($session_id, $primary_id);

+
+

Description:

+

Deletes target dns ds resource record.


+

Input Variables:

+

$session_id, $primary_id

+

Parameters (in $params):

+

None

+

Output:

+

Returns the number of deleted records.

+ +
+ + diff --git a/remoting_client/API-docs/dns_ds_get.html b/remoting_client/API-docs/dns_ds_get.html new file mode 100644 index 0000000000..f8d8785b54 --- /dev/null +++ b/remoting_client/API-docs/dns_ds_get.html @@ -0,0 +1,29 @@ + +ISPCOnfig 3 remote API documentation + + + + + + + + + + +
+

dns_ds_get($session_id, $primary_id);

+
+

Description:

+

Retrieves information about target dns ds resource record.


+

Input Variables:

+

$session_id, $primary_id

+

Parameters (in $params):

+

None

+

Output:

+

Returns all fields and values of the chosen dns ds resource record.

+ +
+ + diff --git a/remoting_client/API-docs/dns_ds_update.html b/remoting_client/API-docs/dns_ds_update.html new file mode 100644 index 0000000000..6b04a847b9 --- /dev/null +++ b/remoting_client/API-docs/dns_ds_update.html @@ -0,0 +1,38 @@ + +ISPCOnfig 3 remote API documentation + + + + + + + + + + +
+

dns_ds_update($session_id, $client_id, $primary_id, $params);

+
+Description: +

Updates an authoritative nameserver record if type is ds.


+Input Variables: +

$session_id, $client_id, $primary_id, $params

+Parameters (in $params): +

server_id  (int(11))

+

zone  (int(11))

+

name  (varchar(64))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

+

data  (varchar(255))

+

aux  (int(11))

+

ttl  (int(11))

+

active  (enum('n','y'))

+

stamp  (timestamp)

+

serial  (int(10))

+Output: +

Returns the number of affected rows.

+ +
+ + diff --git a/remoting_client/API-docs/dns_hinfo_add.html b/remoting_client/API-docs/dns_hinfo_add.html index c1bac26bdd..acd89b3d34 100644 --- a/remoting_client/API-docs/dns_hinfo_add.html +++ b/remoting_client/API-docs/dns_hinfo_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_hinfo_update.html b/remoting_client/API-docs/dns_hinfo_update.html index b2a266cef7..463b25b84a 100644 --- a/remoting_client/API-docs/dns_hinfo_update.html +++ b/remoting_client/API-docs/dns_hinfo_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_mx_add.html b/remoting_client/API-docs/dns_mx_add.html index d2c08877fe..e306b81a18 100644 --- a/remoting_client/API-docs/dns_mx_add.html +++ b/remoting_client/API-docs/dns_mx_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_mx_update.html b/remoting_client/API-docs/dns_mx_update.html index 81acd1f706..d75a8343d3 100644 --- a/remoting_client/API-docs/dns_mx_update.html +++ b/remoting_client/API-docs/dns_mx_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_naptr_add.html b/remoting_client/API-docs/dns_naptr_add.html index d691d65b3a..a8b5d966bf 100644 --- a/remoting_client/API-docs/dns_naptr_add.html +++ b/remoting_client/API-docs/dns_naptr_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_naptr_update.html b/remoting_client/API-docs/dns_naptr_update.html index 97f40f056f..98c4f03183 100644 --- a/remoting_client/API-docs/dns_naptr_update.html +++ b/remoting_client/API-docs/dns_naptr_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_ns_add.html b/remoting_client/API-docs/dns_ns_add.html index d231d37e50..8fd9564bbb 100644 --- a/remoting_client/API-docs/dns_ns_add.html +++ b/remoting_client/API-docs/dns_ns_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_ns_update.html b/remoting_client/API-docs/dns_ns_update.html index fa35029efd..32258a1504 100644 --- a/remoting_client/API-docs/dns_ns_update.html +++ b/remoting_client/API-docs/dns_ns_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_ptr_add.html b/remoting_client/API-docs/dns_ptr_add.html index 8e9a29a74a..d2331660d2 100644 --- a/remoting_client/API-docs/dns_ptr_add.html +++ b/remoting_client/API-docs/dns_ptr_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_ptr_update.html b/remoting_client/API-docs/dns_ptr_update.html index 026a44eee1..25097708ae 100644 --- a/remoting_client/API-docs/dns_ptr_update.html +++ b/remoting_client/API-docs/dns_ptr_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_rp_add.html b/remoting_client/API-docs/dns_rp_add.html index 3f2bde4fce..e20f5186c3 100644 --- a/remoting_client/API-docs/dns_rp_add.html +++ b/remoting_client/API-docs/dns_rp_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_rp_update.html b/remoting_client/API-docs/dns_rp_update.html index a1adbd289a..1e7a92db1f 100644 --- a/remoting_client/API-docs/dns_rp_update.html +++ b/remoting_client/API-docs/dns_rp_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_srv_add.html b/remoting_client/API-docs/dns_srv_add.html index 342965687b..5a2649cadb 100644 --- a/remoting_client/API-docs/dns_srv_add.html +++ b/remoting_client/API-docs/dns_srv_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_srv_update.html b/remoting_client/API-docs/dns_srv_update.html index d7caef2d60..8a2a6107bf 100644 --- a/remoting_client/API-docs/dns_srv_update.html +++ b/remoting_client/API-docs/dns_srv_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_txt_add.html b/remoting_client/API-docs/dns_txt_add.html index 11c3d89463..d99f790846 100644 --- a/remoting_client/API-docs/dns_txt_add.html +++ b/remoting_client/API-docs/dns_txt_add.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/API-docs/dns_txt_update.html b/remoting_client/API-docs/dns_txt_update.html index 9bb7f6ac30..374bede8fb 100644 --- a/remoting_client/API-docs/dns_txt_update.html +++ b/remoting_client/API-docs/dns_txt_update.html @@ -22,7 +22,7 @@

server_id  (int(11))

zone  (int(11))

name  (varchar(64))

-

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ptr','rp','srv','txt'))

+

type  (enum('a','aaaa','alias','cname','hinfo','mx','naptr','ns','ds','ptr','rp','srv','txt'))

data  (varchar(255))

aux  (int(11))

ttl  (int(11))

diff --git a/remoting_client/examples/dns_ds_add.php b/remoting_client/examples/dns_ds_add.php new file mode 100644 index 0000000000..b673150ec1 --- /dev/null +++ b/remoting_client/examples/dns_ds_add.php @@ -0,0 +1,47 @@ + $soap_location, + 'uri' => $soap_uri, + 'trace' => 1, + 'exceptions' => 1)); + + +try { + if($session_id = $client->login($username, $password)) { + echo 'Logged successfull. Session ID:'.$session_id.'
'; + } + + //* Set the function parameters. + //* 'data' are given for example MUST be edited with appropriate DS record + $client_id = 1; + $params = array( + 'server_id' => 1, + 'zone' => 7, + 'name' => 'nameserver', + 'type' => 'ds', + 'data' => '13456 13 2 0EXD84534054012XFN7880EDFR23Z56Y34GRC64KOY704DFTEV87AE A34ZDC45', + 'aux' => '0', + 'ttl' => '3600', + 'active' => 'y', + 'stamp' => 'CURRENT_TIMESTAMP', + 'serial' => '1', + ); + + $id = $client->dns_ds_add($session_id, $client_id, $params); + + echo "ID: ".$id."
"; + + if($client->logout($session_id)) { + echo 'Logged out.
'; + } + + +} catch (SoapFault $e) { + echo $client->__getLastResponse(); + die('SOAP Error: '.$e->getMessage()); +} + +?> diff --git a/remoting_client/examples/dns_ds_delete.php b/remoting_client/examples/dns_ds_delete.php new file mode 100644 index 0000000000..28794ca6fe --- /dev/null +++ b/remoting_client/examples/dns_ds_delete.php @@ -0,0 +1,35 @@ + $soap_location, + 'uri' => $soap_uri, + 'trace' => 1, + 'exceptions' => 1)); + + +try { + if($session_id = $client->login($username, $password)) { + echo 'Logged successfull. Session ID:'.$session_id.'
'; + } + + //* Parameters + $id = 8; + + + $affected_rows = $client->dns_ds_delete($session_id, $id); + + echo "Number of records that have been deleted: ".$affected_rows."
"; + + if($client->logout($session_id)) { + echo 'Logged out.
'; + } + + +} catch (SoapFault $e) { + echo $client->__getLastResponse(); + die('SOAP Error: '.$e->getMessage()); +} + +?> diff --git a/remoting_client/examples/dns_ds_get.php b/remoting_client/examples/dns_ds_get.php new file mode 100644 index 0000000000..6dffa18c10 --- /dev/null +++ b/remoting_client/examples/dns_ds_get.php @@ -0,0 +1,34 @@ + $soap_location, + 'uri' => $soap_uri, + 'trace' => 1, + 'exceptions' => 1)); + + +try { + if($session_id = $client->login($username, $password)) { + echo 'Logged successfull. Session ID:'.$session_id.'
'; + } + + //* Set the function parameters. + $id = 8; + + $dns_record = $client->dns_ds_get($session_id, $id); + + print_r($dns_record); + + if($client->logout($session_id)) { + echo 'Logged out.
'; + } + + +} catch (SoapFault $e) { + echo $client->__getLastResponse(); + die('SOAP Error: '.$e->getMessage()); +} + +?> diff --git a/remoting_client/examples/dns_ds_update.php b/remoting_client/examples/dns_ds_update.php new file mode 100644 index 0000000000..94f5cb10a4 --- /dev/null +++ b/remoting_client/examples/dns_ds_update.php @@ -0,0 +1,42 @@ + $soap_location, + 'uri' => $soap_uri, + 'trace' => 1, + 'exceptions' => 1)); + + +try { + if($session_id = $client->login($username, $password)) { + echo 'Logged successfull. Session ID:'.$session_id.'
'; + } + + //* Parameters + $id = 8; + $client_id = 1; + + + //* Get the dns record + $dns_record = $client->dns_ds_get($session_id, $id); + + //* Change active to inactive + $dns_record['active'] = 'n'; + + $affected_rows = $client->dns_ds_update($session_id, $client_id, $id, $dns_record); + + echo "Number of records that have been changed in the database: ".$affected_rows."
"; + + if($client->logout($session_id)) { + echo 'Logged out.
'; + } + + +} catch (SoapFault $e) { + echo $client->__getLastResponse(); + die('SOAP Error: '.$e->getMessage()); +} + +?> -- GitLab From 6b35dec6c993e8a2fc77466ff6e204bcbba137cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Bla=C5=BEej?= Date: Sun, 26 Dec 2021 20:53:08 +0000 Subject: [PATCH 396/403] issue 6265: add slovak translation for email and web templates --- server/conf/index/standard_index.html_sk | 60 +++++++++++++++++++ server/conf/index/user_standard_index.html_sk | 60 +++++++++++++++++++ server/conf/mail/db_quota_notification_sk.txt | 13 ++++ .../conf/mail/db_quota_ok_notification_sk.txt | 13 ++++ .../conf/mail/mail_quota_notification_sk.txt | 14 +++++ .../mail/mail_quota_ok_notification_sk.txt | 14 +++++ .../conf/mail/web_quota_notification_sk.txt | 14 +++++ .../mail/web_quota_ok_notification_sk.txt | 14 +++++ .../conf/mail/web_traffic_notification_sk.txt | 8 +++ .../mail/web_traffic_notification_warn_sk.txt | 8 +++ server/conf/mail/welcome_email_sk.txt | 4 ++ 11 files changed, 222 insertions(+) create mode 100644 server/conf/index/standard_index.html_sk create mode 100644 server/conf/index/user_standard_index.html_sk create mode 100644 server/conf/mail/db_quota_notification_sk.txt create mode 100644 server/conf/mail/db_quota_ok_notification_sk.txt create mode 100644 server/conf/mail/mail_quota_notification_sk.txt create mode 100644 server/conf/mail/mail_quota_ok_notification_sk.txt create mode 100644 server/conf/mail/web_quota_notification_sk.txt create mode 100644 server/conf/mail/web_quota_ok_notification_sk.txt create mode 100644 server/conf/mail/web_traffic_notification_sk.txt create mode 100644 server/conf/mail/web_traffic_notification_warn_sk.txt create mode 100644 server/conf/mail/welcome_email_sk.txt diff --git a/server/conf/index/standard_index.html_sk b/server/conf/index/standard_index.html_sk new file mode 100644 index 0000000000..d6edcdeb9f --- /dev/null +++ b/server/conf/index/standard_index.html_sk @@ -0,0 +1,60 @@ + + + + Vitajte! + + + + + + +
+ +
+

Toto je štandardná stránka Vašej webstránky.

+

Môžete ju bez obáv vymazať alebo nahradiť iným súborom. Toto je súbor index.html v adresári web.

+

Ak máte akékoľvek otázky kontaktujte podporu.

+
+ +
+ + diff --git a/server/conf/index/user_standard_index.html_sk b/server/conf/index/user_standard_index.html_sk new file mode 100644 index 0000000000..36e8e90db8 --- /dev/null +++ b/server/conf/index/user_standard_index.html_sk @@ -0,0 +1,60 @@ + + + + Vitajte! + + + + + + +
+ +
+

Toto je štandardná stránka Vašej webstránky {USER_USERNAME}

+

Môžete ju bez obáv vymazať alebo nahradiť iným súborom. Toto je súbor index.html v adresári user/{USER_USERNAME}/web.

+

Ak máte akékoľvek otázky kontaktujte podporu.

+
+ +
+ + diff --git a/server/conf/mail/db_quota_notification_sk.txt b/server/conf/mail/db_quota_notification_sk.txt new file mode 100644 index 0000000000..c90c985407 --- /dev/null +++ b/server/conf/mail/db_quota_notification_sk.txt @@ -0,0 +1,13 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Upozornenie na veľkosť databázy + +Databáza {database_name} je blízko alebo prekročila limit veľkosti. + +Databáza: {database_name} +Využité miesto: {used} +Limit: {quota} +Percento využitia: {ratio} diff --git a/server/conf/mail/db_quota_ok_notification_sk.txt b/server/conf/mail/db_quota_ok_notification_sk.txt new file mode 100644 index 0000000000..10dc74ca81 --- /dev/null +++ b/server/conf/mail/db_quota_ok_notification_sk.txt @@ -0,0 +1,13 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Veľkosť databázy ok + +Databáza {database_name} už nie je blízko ani neprekračuje limit veľkosti. + +Databáza: {database_name} +Využité miesto: {used} +Limit: {quota} +Percento využitia: {ratio} diff --git a/server/conf/mail/mail_quota_notification_sk.txt b/server/conf/mail/mail_quota_notification_sk.txt new file mode 100644 index 0000000000..f9abcab03a --- /dev/null +++ b/server/conf/mail/mail_quota_notification_sk.txt @@ -0,0 +1,14 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Upozornenie na veľkosť poštovej schránky + +Poštová schránka {email} je blízko alebo prekročila limit veľkosti. + +Poštová schránka: {email} +Meno: {name} +Využité miesto: {used} +Limit: {quota} +Percento využitia: {ratio} diff --git a/server/conf/mail/mail_quota_ok_notification_sk.txt b/server/conf/mail/mail_quota_ok_notification_sk.txt new file mode 100644 index 0000000000..1750a5ecd5 --- /dev/null +++ b/server/conf/mail/mail_quota_ok_notification_sk.txt @@ -0,0 +1,14 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Veľkosť poštovej schránky ok + +Poštová schránka {email} už nie je blízko ani neprekračuje limit veľkosti. + +Poštová schránka: {email} +Meno: {name} +Využité miesto: {used} +Limit: {quota} +Percento využitia: {ratio} diff --git a/server/conf/mail/web_quota_notification_sk.txt b/server/conf/mail/web_quota_notification_sk.txt new file mode 100644 index 0000000000..62a73a7404 --- /dev/null +++ b/server/conf/mail/web_quota_notification_sk.txt @@ -0,0 +1,14 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Upozornenie na veľkosť webstránky + +Webstránka {domain} je blízko alebo prekročila limit veľkosti. + +Doména: {domain} +Využité miesto: {used} +Mäkký limit: {soft} +Tvrdý limit: {hard} +Percento využitia: {ratio} diff --git a/server/conf/mail/web_quota_ok_notification_sk.txt b/server/conf/mail/web_quota_ok_notification_sk.txt new file mode 100644 index 0000000000..88f36432a0 --- /dev/null +++ b/server/conf/mail/web_quota_ok_notification_sk.txt @@ -0,0 +1,14 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Veľkosť webstránky ok + +Webstránka {domain} už nie je blízko ani neprekračuje limit veľkosti. + +Doména: {domain} +Využité miesto: {used} +Mäkký limit: {soft} +Tvrdý limit: {hard} +Percento využitia: {ratio} diff --git a/server/conf/mail/web_traffic_notification_sk.txt b/server/conf/mail/web_traffic_notification_sk.txt new file mode 100644 index 0000000000..8cac0e9613 --- /dev/null +++ b/server/conf/mail/web_traffic_notification_sk.txt @@ -0,0 +1,8 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Upozornenie na dátovú premávku webstránky + +Webstránka {domain} prekročila limit dátovej premávky a bola zablokovaná. diff --git a/server/conf/mail/web_traffic_notification_warn_sk.txt b/server/conf/mail/web_traffic_notification_warn_sk.txt new file mode 100644 index 0000000000..7f83616a5e --- /dev/null +++ b/server/conf/mail/web_traffic_notification_warn_sk.txt @@ -0,0 +1,8 @@ +MIME-Version: 1.0 +Content-type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit +From: {admin_mail} +Reply-To: {admin_mail} +Subject: Upozornenie na dátovú premávku webstránky + +Webstránka {domain} prekročila limit dátovej premávky. diff --git a/server/conf/mail/welcome_email_sk.txt b/server/conf/mail/welcome_email_sk.txt new file mode 100644 index 0000000000..98f6d8ecc6 --- /dev/null +++ b/server/conf/mail/welcome_email_sk.txt @@ -0,0 +1,4 @@ +From: {admin_name} <{admin_mail}> +Subject: Vitajte vo Vašej novej emailovej schránke. + +Vitajte vo Vašej novej emailovej schránke. Váš správca. -- GitLab From 8add9a8661e8c4cc97161501b784bf2ed195796c Mon Sep 17 00:00:00 2001 From: Till Date: Fri, 7 Jan 2022 12:04:47 +0100 Subject: [PATCH 397/403] Fixed issue in removeLine function of system lib. --- server/lib/classes/system.inc.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 37418149ae..7e4e7ae447 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -1707,10 +1707,7 @@ class system{ $out = ''; foreach($lines as $line) { if($strict == 0 && preg_match('/^REGEX:(.*)$/', $search_pattern)) { - if(preg_match(substr($search_pattern, 6), $line)) { - $out .= $new_line."\n"; - $found = 1; - } else { + if(!preg_match(substr($search_pattern, 6), $line)) { $out .= $line; } } elseif($strict == 0) { -- GitLab From b517b7c5ad8f6b8237526c6fe0554ac453795a55 Mon Sep 17 00:00:00 2001 From: Mladen B Date: Thu, 13 Jan 2022 18:17:47 +0100 Subject: [PATCH 398/403] Changed the file location for $conf['admin_ip_whitelist_file'], as suggested. --- interface/lib/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php index a2bdaecd0d..c492680513 100644 --- a/interface/lib/config.inc.php +++ b/interface/lib/config.inc.php @@ -160,6 +160,6 @@ define('LOGLEVEL_WARN', 1); define('LOGLEVEL_ERROR', 2); //** Admin IP whitelist file -$conf['admin_ip_whitelist_file'] = '/etc/ispconfig_admin_ip_whitelist'; +$conf['admin_ip_whitelist_file'] = '/usr/local/ispconfig/security/admin_ip.whitelist'; ?> -- GitLab From 861f2b9804aac33037fcf36d16c9ff5849a56490 Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Fri, 14 Jan 2022 23:17:28 +0100 Subject: [PATCH 399/403] Add translation lines for all other languages --- interface/web/dns/lib/lang/ar_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/bg_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/br_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/ca_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/cz_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/de_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/dk_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/el_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/es_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/fi_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/fr_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/hr_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/hu_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/id_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/it_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/ja_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/pl_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/pt_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/ro_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/ru_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/se_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/sk_dns_soa.lng | 2 ++ interface/web/dns/lib/lang/tr_dns_soa.lng | 2 ++ 23 files changed, 46 insertions(+) diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng index 0d90b7091b..4333c3793a 100644 --- a/interface/web/dns/lib/lang/ar_dns_soa.lng +++ b/interface/web/dns/lib/lang/ar_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/bg_dns_soa.lng b/interface/web/dns/lib/lang/bg_dns_soa.lng index 4cd3c705ac..c1e57edf8b 100644 --- a/interface/web/dns/lib/lang/bg_dns_soa.lng +++ b/interface/web/dns/lib/lang/bg_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/br_dns_soa.lng b/interface/web/dns/lib/lang/br_dns_soa.lng index 81b2bb24c7..e6c8982de0 100644 --- a/interface/web/dns/lib/lang/br_dns_soa.lng +++ b/interface/web/dns/lib/lang/br_dns_soa.lng @@ -42,3 +42,5 @@ $wb['error_not_allowed_server_id'] = 'O servidor selecionado não é permitido p $wb['soa_cannot_be_changed_txt'] = 'A zona (SOA) não pode ser modificada. Por favor, contate o administrador se deseja modificar esta zona.'; $wb['configuration_error_txt'] = 'ERRO DE CONFIGURAÇÃO'; $wb['dnssec_algo_txt'] = 'Algoritmo DNSSEC'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; diff --git a/interface/web/dns/lib/lang/ca_dns_soa.lng b/interface/web/dns/lib/lang/ca_dns_soa.lng index ee2fdb07b6..2ac84a17df 100644 --- a/interface/web/dns/lib/lang/ca_dns_soa.lng +++ b/interface/web/dns/lib/lang/ca_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/cz_dns_soa.lng b/interface/web/dns/lib/lang/cz_dns_soa.lng index ef6fdf82d8..73c2582117 100644 --- a/interface/web/dns/lib/lang/cz_dns_soa.lng +++ b/interface/web/dns/lib/lang/cz_dns_soa.lng @@ -42,3 +42,5 @@ $wb['error_not_allowed_server_id'] = 'Vybraný server není pro tento účet pov $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algoritmus'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng index 14897b24e4..7338e15433 100644 --- a/interface/web/dns/lib/lang/de_dns_soa.lng +++ b/interface/web/dns/lib/lang/de_dns_soa.lng @@ -42,4 +42,6 @@ $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithmus'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/dk_dns_soa.lng b/interface/web/dns/lib/lang/dk_dns_soa.lng index a4ff50f14f..6759024041 100644 --- a/interface/web/dns/lib/lang/dk_dns_soa.lng +++ b/interface/web/dns/lib/lang/dk_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'The Zone (SOA) can not be changed. Please contact your administrator to change the zone.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/el_dns_soa.lng b/interface/web/dns/lib/lang/el_dns_soa.lng index a22c9de413..4ceed78dc9 100644 --- a/interface/web/dns/lib/lang/el_dns_soa.lng +++ b/interface/web/dns/lib/lang/el_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/es_dns_soa.lng b/interface/web/dns/lib/lang/es_dns_soa.lng index b1484e749a..b1061373f5 100644 --- a/interface/web/dns/lib/lang/es_dns_soa.lng +++ b/interface/web/dns/lib/lang/es_dns_soa.lng @@ -42,4 +42,6 @@ $wb['xfer_error_regex'] = 'Notificar también a: Por favor, usa una dirección I $wb['xfer_txt'] = 'Permitir transferencia de zonas a
estas IP (lista separada por comas)'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/fi_dns_soa.lng b/interface/web/dns/lib/lang/fi_dns_soa.lng index d90de950b0..36f95abab0 100644 --- a/interface/web/dns/lib/lang/fi_dns_soa.lng +++ b/interface/web/dns/lib/lang/fi_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/fr_dns_soa.lng b/interface/web/dns/lib/lang/fr_dns_soa.lng index d2449c323e..dd66dc1986 100644 --- a/interface/web/dns/lib/lang/fr_dns_soa.lng +++ b/interface/web/dns/lib/lang/fr_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/hr_dns_soa.lng b/interface/web/dns/lib/lang/hr_dns_soa.lng index d738ff1e18..5d88b47087 100644 --- a/interface/web/dns/lib/lang/hr_dns_soa.lng +++ b/interface/web/dns/lib/lang/hr_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng index 38d3272f04..fdabdd99c2 100644 --- a/interface/web/dns/lib/lang/hu_dns_soa.lng +++ b/interface/web/dns/lib/lang/hu_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/id_dns_soa.lng b/interface/web/dns/lib/lang/id_dns_soa.lng index 2c1842e6f2..d6cb9d78da 100644 --- a/interface/web/dns/lib/lang/id_dns_soa.lng +++ b/interface/web/dns/lib/lang/id_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/it_dns_soa.lng b/interface/web/dns/lib/lang/it_dns_soa.lng index 714c6c7056..56dfd03daa 100644 --- a/interface/web/dns/lib/lang/it_dns_soa.lng +++ b/interface/web/dns/lib/lang/it_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/ja_dns_soa.lng b/interface/web/dns/lib/lang/ja_dns_soa.lng index a2e5e20c71..70d9414d26 100644 --- a/interface/web/dns/lib/lang/ja_dns_soa.lng +++ b/interface/web/dns/lib/lang/ja_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng index 7502a59237..d83e0aeeb0 100644 --- a/interface/web/dns/lib/lang/pl_dns_soa.lng +++ b/interface/web/dns/lib/lang/pl_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/pt_dns_soa.lng b/interface/web/dns/lib/lang/pt_dns_soa.lng index 7d4c692855..e1e8490b7d 100644 --- a/interface/web/dns/lib/lang/pt_dns_soa.lng +++ b/interface/web/dns/lib/lang/pt_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/ro_dns_soa.lng b/interface/web/dns/lib/lang/ro_dns_soa.lng index f1125b6981..87382ffa6f 100644 --- a/interface/web/dns/lib/lang/ro_dns_soa.lng +++ b/interface/web/dns/lib/lang/ro_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/ru_dns_soa.lng b/interface/web/dns/lib/lang/ru_dns_soa.lng index f6043010d4..36a4c89cdf 100644 --- a/interface/web/dns/lib/lang/ru_dns_soa.lng +++ b/interface/web/dns/lib/lang/ru_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'Выбранный сервер не до $wb['soa_cannot_be_changed_txt'] = 'Зона (SOA) не может быть изменена. Пожалуйста, обратитесь к администратору, чтобы изменить зону.'; $wb['configuration_error_txt'] = 'ОШИБКА КОНФИГУРАЦИИ'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng index a27181699d..0e9732b43e 100644 --- a/interface/web/dns/lib/lang/se_dns_soa.lng +++ b/interface/web/dns/lib/lang/se_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/sk_dns_soa.lng b/interface/web/dns/lib/lang/sk_dns_soa.lng index a03b15d477..115df56725 100644 --- a/interface/web/dns/lib/lang/sk_dns_soa.lng +++ b/interface/web/dns/lib/lang/sk_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'The selected server is not allowed for thi $wb['soa_cannot_be_changed_txt'] = 'Die Zone (SOA) kann nicht verändert werden. Bitte kontaktieren Sie ihren Administrator, um die Zone zu ändern.'; $wb['configuration_error_txt'] = 'CONFIGURATION ERROR'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> diff --git a/interface/web/dns/lib/lang/tr_dns_soa.lng b/interface/web/dns/lib/lang/tr_dns_soa.lng index e5d55678cb..fc1bc60a82 100644 --- a/interface/web/dns/lib/lang/tr_dns_soa.lng +++ b/interface/web/dns/lib/lang/tr_dns_soa.lng @@ -42,4 +42,6 @@ $wb['error_not_allowed_server_id'] = 'Seçilmiş sunucuda bu hesap kullanılamaz $wb['soa_cannot_be_changed_txt'] = 'Bölge (SOA) değiştirilemez. Lütfen bölgeyi değiştirmek için yöneticiniz ile görüşün.'; $wb['configuration_error_txt'] = 'YAPILANDIRMA SORUNU'; $wb['dnssec_algo_txt'] = 'DNSSEC Algorithm'; +$wb['rendered_zone_txt'] = 'Bind zone format for reference and export.'; +$wb['rendered_zone_unavailable_txt'] = 'Sorry, no data is available yet.'; ?> -- GitLab From 0cdd669ccfdc66a8bc784a9fa32ce2fc528685ff Mon Sep 17 00:00:00 2001 From: Herman van Rink Date: Sat, 15 Jan 2022 13:04:06 +0100 Subject: [PATCH 400/403] Add config checkbox for dns-zone-rendering --- .../web/admin/form/system_config.tform.php | 6 +++++ .../web/admin/lib/lang/ar_system_config.lng | 1 + .../web/admin/lib/lang/bg_system_config.lng | 1 + .../web/admin/lib/lang/br_system_config.lng | 1 + .../web/admin/lib/lang/ca_system_config.lng | 1 + .../web/admin/lib/lang/cz_system_config.lng | 1 + .../web/admin/lib/lang/de_system_config.lng | 1 + .../web/admin/lib/lang/dk_system_config.lng | 1 + .../web/admin/lib/lang/el_system_config.lng | 1 + .../web/admin/lib/lang/en_system_config.lng | 1 + .../web/admin/lib/lang/es_system_config.lng | 1 + .../web/admin/lib/lang/fi_system_config.lng | 1 + .../web/admin/lib/lang/fr_system_config.lng | 1 + .../web/admin/lib/lang/hr_system_config.lng | 1 + .../web/admin/lib/lang/hu_system_config.lng | 1 + .../web/admin/lib/lang/id_system_config.lng | 1 + .../web/admin/lib/lang/it_system_config.lng | 1 + .../web/admin/lib/lang/ja_system_config.lng | 1 + .../web/admin/lib/lang/nl_system_config.lng | 1 + .../web/admin/lib/lang/pl_system_config.lng | 1 + .../web/admin/lib/lang/pt_system_config.lng | 1 + .../web/admin/lib/lang/ro_system_config.lng | 1 + .../web/admin/lib/lang/ru_system_config.lng | 1 + .../web/admin/lib/lang/se_system_config.lng | 1 + .../web/admin/lib/lang/sk_system_config.lng | 1 + .../web/admin/lib/lang/tr_system_config.lng | 1 + .../templates/system_config_dns_edit.htm | 10 ++++++- interface/web/dns/form/dns_soa.tform.php | 26 +++++++++++-------- 28 files changed, 55 insertions(+), 12 deletions(-) diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index c7d15ffcf4..bce858b522 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -481,6 +481,12 @@ $form["tabs"]['dns'] = array ( 'value' => '', 'name' => 'default_slave_dnsserver' ), + 'dns_show_zoneexport' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), //################################# // END Datatable fields //################################# diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng index 5d21ab4c2e..a10274c670 100644 --- a/interface/web/admin/lib/lang/ar_system_config.lng +++ b/interface/web/admin/lib/lang/ar_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng index 1b8d10541d..898020365f 100644 --- a/interface/web/admin/lib/lang/bg_system_config.lng +++ b/interface/web/admin/lib/lang/bg_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng index 6cf3bf58bb..1fb510ace0 100644 --- a/interface/web/admin/lib/lang/br_system_config.lng +++ b/interface/web/admin/lib/lang/br_system_config.lng @@ -106,3 +106,4 @@ $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; $wb['monitor_key_txt'] = 'Senha do Monitor'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng index 9f9f362288..68ca245f3d 100644 --- a/interface/web/admin/lib/lang/ca_system_config.lng +++ b/interface/web/admin/lib/lang/ca_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng index 23dbc9c41e..c6f45e7d46 100644 --- a/interface/web/admin/lib/lang/cz_system_config.lng +++ b/interface/web/admin/lib/lang/cz_system_config.lng @@ -106,3 +106,4 @@ $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; $wb['monitor_key_txt'] = 'Monitor keyword'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng index 7d372a820e..328124f6e7 100644 --- a/interface/web/admin/lib/lang/de_system_config.lng +++ b/interface/web/admin/lib/lang/de_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng index 18160789a9..71533e77d0 100644 --- a/interface/web/admin/lib/lang/dk_system_config.lng +++ b/interface/web/admin/lib/lang/dk_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng index 7e2df97a49..f64df47bc9 100644 --- a/interface/web/admin/lib/lang/el_system_config.lng +++ b/interface/web/admin/lib/lang/el_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng index 7db4270c12..2f32d4feaa 100644 --- a/interface/web/admin/lib/lang/en_system_config.lng +++ b/interface/web/admin/lib/lang/en_system_config.lng @@ -106,4 +106,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng index 92633c1601..471975be43 100644 --- a/interface/web/admin/lib/lang/es_system_config.lng +++ b/interface/web/admin/lib/lang/es_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng index 1a12444057..30dd462a29 100644 --- a/interface/web/admin/lib/lang/fi_system_config.lng +++ b/interface/web/admin/lib/lang/fi_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng index a79bf9dafd..ac606922a0 100644 --- a/interface/web/admin/lib/lang/fr_system_config.lng +++ b/interface/web/admin/lib/lang/fr_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng index 7a3426eff5..0f29ae0c0c 100644 --- a/interface/web/admin/lib/lang/hr_system_config.lng +++ b/interface/web/admin/lib/lang/hr_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng index 5fb8f7cd6e..1258e6acfe 100644 --- a/interface/web/admin/lib/lang/hu_system_config.lng +++ b/interface/web/admin/lib/lang/hu_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng index b1df781b76..60eff076d3 100644 --- a/interface/web/admin/lib/lang/id_system_config.lng +++ b/interface/web/admin/lib/lang/id_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng index ddfc072ff2..f77dc68061 100644 --- a/interface/web/admin/lib/lang/it_system_config.lng +++ b/interface/web/admin/lib/lang/it_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng index 8ff20d13ca..b5601ea800 100644 --- a/interface/web/admin/lib/lang/ja_system_config.lng +++ b/interface/web/admin/lib/lang/ja_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng index 0caa9228e0..107c42395e 100644 --- a/interface/web/admin/lib/lang/nl_system_config.lng +++ b/interface/web/admin/lib/lang/nl_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng index 92b167c60d..1bb2098765 100644 --- a/interface/web/admin/lib/lang/pl_system_config.lng +++ b/interface/web/admin/lib/lang/pl_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng index 491aa6272c..41becdf5cb 100644 --- a/interface/web/admin/lib/lang/pt_system_config.lng +++ b/interface/web/admin/lib/lang/pt_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng index fc268d2241..2fc1a00b56 100644 --- a/interface/web/admin/lib/lang/ro_system_config.lng +++ b/interface/web/admin/lib/lang/ro_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng index ae12c4b4c1..d829d1ca97 100644 --- a/interface/web/admin/lib/lang/ru_system_config.lng +++ b/interface/web/admin/lib/lang/ru_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng index fa302c344a..fa67bc2bc9 100644 --- a/interface/web/admin/lib/lang/se_system_config.lng +++ b/interface/web/admin/lib/lang/se_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng index 6735e91c53..317b435eae 100644 --- a/interface/web/admin/lib/lang/sk_system_config.lng +++ b/interface/web/admin/lib/lang/sk_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng index b767101e22..a6e6299375 100644 --- a/interface/web/admin/lib/lang/tr_system_config.lng +++ b/interface/web/admin/lib/lang/tr_system_config.lng @@ -105,4 +105,5 @@ $wb['show_support_messages_txt'] = 'Show message function in help module'; $wb['show_aps_menu_txt'] = 'Show APS menu'; $wb['show_aps_menu_note_txt'] = 'APS will be removed from the panel in the near future.'; $wb['show_aps_menu_note_url_txt'] = 'Click here for more information.'; +$wb['dns_show_zoneexport_txt'] = 'Show zone export.'; ?> diff --git a/interface/web/admin/templates/system_config_dns_edit.htm b/interface/web/admin/templates/system_config_dns_edit.htm index f3d0b20dda..9636b4a261 100644 --- a/interface/web/admin/templates/system_config_dns_edit.htm +++ b/interface/web/admin/templates/system_config_dns_edit.htm @@ -11,10 +11,18 @@ {tmpl_var name='default_dnsserver'} + +
+ +
+ {tmpl_var name='dns_show_zoneexport'} +
+
+
-
\ No newline at end of file + diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index 92f07d7883..6259cceddb 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -322,17 +322,21 @@ $form["tabs"]['dns_soa'] = array ( //################################# ) ); -$form["tabs"]['dns_rendered_zone'] = array ( - 'title' => "Zone rendering", - 'width' => 100, - 'template' => "templates/dns_soa_rendered.htm", - 'fields' => array ( - 'rendered_zone' => array ( - 'datatype' => 'TEXT', - 'formtype' => 'TEXTAREA', - ), - ) -); + +$sys_config = $app->getconf->get_global_config('dns'); +if($sys_config['dns_show_zoneexport'] == 'y') { + $form["tabs"]['dns_rendered_zone'] = array ( + 'title' => "Zone rendering", + 'width' => 100, + 'template' => "templates/dns_soa_rendered.htm", + 'fields' => array ( + 'rendered_zone' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + ), + ) + ); +} // show update acl to admins only. if(!$app->auth->is_admin()) unset($form["tabs"]['dns_soa']['fields']['update_acl']); -- GitLab From 7a037916df511962e7e03b47da3d88ebd90adf00 Mon Sep 17 00:00:00 2001 From: Judah - MW <6523-maximaweb@users.noreply.git.ispconfig.org> Date: Tue, 18 Jan 2022 09:45:21 +0000 Subject: [PATCH 401/403] Changed hardcoded quota warning levels to be adjustable in server config --- install/tpl/server.ini.master | 3 ++ .../web/admin/form/server_config.tform.php | 36 +++++++++++++++++++ .../web/admin/lib/lang/ar_server_config.lng | 3 ++ .../web/admin/lib/lang/bg_server_config.lng | 3 ++ .../web/admin/lib/lang/br_server_config.lng | 3 ++ .../web/admin/lib/lang/ca_server_config.lng | 3 ++ .../web/admin/lib/lang/cz_server_config.lng | 3 ++ .../web/admin/lib/lang/de_server_config.lng | 3 ++ .../web/admin/lib/lang/dk_server_config.lng | 3 ++ .../web/admin/lib/lang/el_server_config.lng | 3 ++ .../web/admin/lib/lang/en_server_config.lng | 3 ++ .../web/admin/lib/lang/es_server_config.lng | 3 ++ .../web/admin/lib/lang/fi_server_config.lng | 3 ++ .../web/admin/lib/lang/fr_server_config.lng | 3 ++ .../web/admin/lib/lang/hr_server_config.lng | 3 ++ .../web/admin/lib/lang/hu_server_config.lng | 3 ++ .../web/admin/lib/lang/id_server_config.lng | 3 ++ .../web/admin/lib/lang/it_server_config.lng | 3 ++ .../web/admin/lib/lang/ja_server_config.lng | 3 ++ .../web/admin/lib/lang/nl_server_config.lng | 3 ++ .../web/admin/lib/lang/pl_server_config.lng | 3 ++ .../web/admin/lib/lang/pt_server_config.lng | 3 ++ .../web/admin/lib/lang/ro_server_config.lng | 3 ++ .../web/admin/lib/lang/ru_server_config.lng | 3 ++ .../web/admin/lib/lang/se_server_config.lng | 3 ++ .../web/admin/lib/lang/sk_server_config.lng | 3 ++ .../web/admin/lib/lang/tr_server_config.lng | 3 ++ .../templates/server_config_mail_edit.htm | 5 +++ .../templates/server_config_web_edit.htm | 10 ++++++ .../classes/cron.d/300-quota_notify.inc.php | 12 +++---- 30 files changed, 135 insertions(+), 6 deletions(-) diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 36d48d913e..8799e1f34c 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -58,6 +58,7 @@ mailbox_size_limit=0 message_size_limit=0 mailbox_quota_stats=y realtime_blackhole_list=zen.spamhaus.org +overquota_notify_threshold=90 overquota_notify_admin=y overquota_notify_client=y overquota_notify_freq=7 @@ -118,9 +119,11 @@ connect_userid_to_webid_start=10000 web_folder_protection=y php_ini_check_minutes=1 overtraffic_disable_web=y +overquota_notify_threshold=90 overquota_notify_admin=y overquota_notify_client=y overquota_notify_freq=7 +overquota_db_notify_threshold=90 overquota_db_notify_admin=y overquota_db_notify_client=y overquota_notify_onok=n diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 47a48a3c27..a7947ba147 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -740,6 +740,18 @@ $form["tabs"]['mail'] = array( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'overquota_notify_threshold' => array( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '90', + 'validators' => array( + 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'), + 1 => array('type' => 'RANGE', 'range' => '0:100', 'errmsg' => 'overquota_notify_threshold_error'), + ), + 'value' => '', + 'width' => '20', + 'maxlength' => '3' + ), 'overquota_notify_admin' => array( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', @@ -1082,6 +1094,18 @@ $form["tabs"]['web'] = array( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'overquota_notify_threshold' => array( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '90', + 'validators' => array( + 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'), + 1 => array('type' => 'RANGE', 'range' => '0:100', 'errmsg' => 'overquota_notify_threshold_error'), + ), + 'value' => '', + 'width' => '20', + 'maxlength' => '3' + ), 'overquota_notify_admin' => array( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', @@ -1094,6 +1118,18 @@ $form["tabs"]['web'] = array( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'overquota_db_notify_threshold' => array( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '90', + 'validators' => array( + 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'overquota_notify_threshold_error'), + 1 => array('type' => 'RANGE', 'range' => '0:100', 'errmsg' => 'overquota_notify_threshold_error'), + ), + 'value' => '', + 'width' => '20', + 'maxlength' => '3' + ), 'overquota_db_notify_admin' => array( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index ac03605279..fe494f4bd7 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index b9d6e648ce..837d254dac 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index ac551c588c..7c08431fdb 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -200,6 +200,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Enviar notificação de tráfego excedido $wb['overtraffic_notify_client_txt'] = 'Enviar notificação de tráfego excedido para o cliente'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Por favor, insira nomes de host válidos para RBLs.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Enviar alerta da cota para o administrador'; $wb['overquota_notify_client_txt'] = 'Enviar alerta da cota para o cliente'; $wb['overquota_notify_onok_txt'] = 'Enviar mensagem da cota para o cliente'; @@ -223,6 +225,7 @@ $wb['v6_prefix_length'] = 'O prefixo é muito longo de acordo com as definiçõe $wb['backup_dir_is_mount_txt'] = 'O diretório de backup está montando?'; $wb['backup_dir_mount_cmd_txt'] = 'Comando mount, se o diretório não está montado'; $wb['backup_delete_txt'] = 'Remover backups de domínios/site'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Enviar alerta da cota do Banco de Dados para o administrador'; $wb['overquota_db_notify_client_txt'] = 'Enviar alerta da cota do Banco de Dados para o cliente'; $wb['monitor_system_updates_txt'] = 'Verificar por atualizações do sistema'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index 25ed761836..2ced57478a 100644 --- a/interface/web/admin/lib/lang/ca_server_config.lng +++ b/interface/web/admin/lib/lang/ca_server_config.lng @@ -196,6 +196,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -219,6 +221,7 @@ $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['monitor_system_updates_txt'] = 'Check for Linux updates'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index 6da8dfc0bb..590a8d9796 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -179,6 +179,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Při překročení limitu přenesených d $wb['overtraffic_notify_client_txt'] = 'Při překročení limitu přenesených dat, poslat oznámení klientovi'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání kvót adminovi'; $wb['overquota_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání kvót klientovi'; $wb['overquota_notify_onok_txt'] = 'Poslat zprávu klientovi, že kvóta je již v pořádku'; @@ -269,6 +271,7 @@ $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror'; $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Odstranit zálohy pokud byla smazána doména/webové stránky'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót adminovi'; $wb['overquota_db_notify_client_txt'] = 'Poslat varování o překročení nebo vyčerpání DB kvót klientovi'; $wb['php_handler_txt'] = 'Výchozí PHP obslužná rutina'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index d0b43059c4..557d313704 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -199,6 +199,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Überschreiten des Datentransfer Limits a $wb['overtraffic_notify_client_txt'] = 'Überschreiten des Datentransfer Limits an den Kunden senden'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Bitte geben Sie gültige RBL-Hostnamen an.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Quota-Warnungen an den Administrator senden'; $wb['overquota_notify_client_txt'] = 'Quota-Warnungen an den Kunden senden'; $wb['overquota_notify_onok_txt'] = 'Meldung an den Kunden senden, wenn Belegung wieder ok'; @@ -276,6 +278,7 @@ $wb['cron_init_script_error_regex'] = 'Invalid cron init script.'; $wb['crontab_dir_error_regex'] = 'Invalid crontab directory.'; $wb['cron_wget_error_regex'] = 'Invalid cron wget path.'; $wb['network_filesystem_txt'] = 'Netzwerk-Dateisystem'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Datenbank-Quota-Warnungen an den Administrator senden'; $wb['overquota_db_notify_client_txt'] = 'Datenbank-Quota-Warnungen an den Kunden senden'; $wb['php_ini_check_minutes_txt'] = 'Prüfe php.ini alle X Minuten auf Änderungen'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index b1ebcec391..ccf12bc3e2 100644 --- a/interface/web/admin/lib/lang/dk_server_config.lng +++ b/interface/web/admin/lib/lang/dk_server_config.lng @@ -182,6 +182,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send over-trafik meddelelse til admin'; $wb['overtraffic_notify_client_txt'] = 'Send over-trafik meddelelse til kunde'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Angiv gyldige RBL værtsnavne.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send kvote advarsler til admin'; $wb['overquota_notify_client_txt'] = 'Send kvote advarsler til kunde'; $wb['overquota_notify_onok_txt'] = 'Send kvote ok meddelelse til kunde'; @@ -272,6 +274,7 @@ $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror'; $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index b147f15e5c..468560c751 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror'; $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 4125b2648e..0d09d4222a 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -206,6 +206,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -229,6 +231,7 @@ $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['monitor_system_updates_txt'] = 'Check for Linux updates'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index 67e77efac8..7b1364b2ac 100644 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -187,8 +187,11 @@ $wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'El directorio de configuraci $wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'El directorio de configuración para Vhost habilitados de Nginx es inválido.'; $wb['nginx_vhost_conf_enabled_dir_txt'] = 'Directorio de configuración de host virtual de Nginx habilitado'; $wb['no_notifications_txt'] = 'Sin notificaciones'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Enviar advertencias de cuota de base de datos al administrador'; $wb['overquota_db_notify_client_txt'] = 'Enviar advertencias de cuota de base de datos a los clientes'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Enviar advertencias de cuota excedida al administrador'; $wb['overquota_notify_client_txt'] = 'Enviar advertencias de cuota excedida al cliente'; $wb['overquota_notify_freq_note_txt'] = '0 = enviar mensaje solo una vez, sin volver a notificar'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index dac02a14b7..8dc41ff17d 100644 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index 0599b8bbed..9aecf3ba21 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -181,6 +181,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -271,6 +273,7 @@ $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror'; $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index e0894ceb82..5d81f21d24 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['network_filesystem_txt'] = 'Network Filesystem'; $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 97774f9ecd..e1c69b610c 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index 814e963f64..e871616ffe 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index f9e30f3937..c485bd00a1 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -181,6 +181,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Trasmetti notifiche superamento traffico $wb['overtraffic_notify_client_txt'] = 'Trasmetti notifiche superamento traffico al cliente'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Per cortesia specificare nomi host RBL validi.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Trasmetti allarmi quota ad admin'; $wb['overquota_notify_client_txt'] = 'Trasmetti allarmi quota al cliente'; $wb['overquota_notify_onok_txt'] = 'Trasmetti messaggio quota ok al cliente'; @@ -271,6 +273,7 @@ $wb['vhost_rewrite_v6_txt'] = 'Rewrite IPv6 on Mirror'; $wb['v6_prefix_length'] = 'Prefix too long according to defined IPv6 '; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; $wb['backup_delete_txt'] = 'Delete backups on domain/website delete'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index 52ac44a351..2547989627 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index e9e412b609..ac24a8b5f9 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index f9d43d3bfd..d5e0dbe0f6 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Prześlij informacje o przekroczeniu tran $wb['overtraffic_notify_client_txt'] = 'Prześlij informacje o przekroczeniu transferu do klienta'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 468413a1de..85011d112f 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index e20fb9ee9f..95bf27a4f1 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index 1799b075f4..6ebd4ebe0e 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Присылать уведомление $wb['overtraffic_notify_client_txt'] = 'Присылать уведомление трафика клиенту'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Пожалуйста, укажите действительные имена хостов RBL.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Присылать предупреждения квоты администратору'; $wb['overquota_notify_client_txt'] = 'Присылать предупреждения квоты клиенту'; $wb['overquota_notify_onok_txt'] = 'Присылать сообщение квоты ОК клиенту'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Отключить сообщения bind9 дл $wb['apps_vhost_enabled_txt'] = 'Apps-vhost включен'; $wb['do_not_try_rescue_mongodb_txt'] = 'Отключить мониторинг MongoDB'; $wb['backup_dir_mount_cmd_txt'] = 'Выполните команду монтирования, если каталог резервного копирования не установлен'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Присылать предупреждения квоты DB администратору'; $wb['overquota_db_notify_client_txt'] = 'Присылать предупреждения квоты DB клиенту'; $wb['php_handler_txt'] = 'Обработчик PHP по умолчанию'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index fe3c2e9234..99b1f714fa 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index bc7f9f514b..7fa947a4b0 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -193,6 +193,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Send overtraffic notification to admin'; $wb['overtraffic_notify_client_txt'] = 'Send overtraffic notification to client'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Please specify valid RBL hostnames.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Send quota warnings to admin'; $wb['overquota_notify_client_txt'] = 'Send quota warnings to client'; $wb['overquota_notify_onok_txt'] = 'Send quota ok message to client'; @@ -273,6 +275,7 @@ $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['do_not_try_rescue_mongodb_txt'] = 'Disable MongoDB monitoring'; $wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Send DB quota warnings to admin'; $wb['overquota_db_notify_client_txt'] = 'Send DB quota warnings to client'; $wb['php_handler_txt'] = 'Default PHP Handler'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index 0d0c84f2c7..565b7b1f48 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -200,6 +200,8 @@ $wb['overtraffic_notify_admin_txt'] = 'Trafik Aşımı Bildirimi Yöneticiye Gö $wb['overtraffic_notify_client_txt'] = 'Trafik Aşımı Bildirimi Müşteriye Gönderilsin'; $wb['overtraffic_disable_web_txt'] = 'Disable websites that exceed traffic limit'; $wb['rbl_error_regex'] = 'Lütfen geçerli RBL sunucu adları yazın.'; +$wb['overquota_notify_threshold_txt'] = 'Quota warning usage level'; +$wb['overquota_notify_threshold_error'] = 'Quota warning usage level must be between 0-100%'; $wb['overquota_notify_admin_txt'] = 'Kota Uyarıları Yöneticiye Gönderilsin'; $wb['overquota_notify_client_txt'] = 'Kota Uyarıları Müşteriye Gönderilsin'; $wb['overquota_notify_onok_txt'] = 'Kota Tamam İletisi Müşteriye Gönderilsin'; @@ -223,6 +225,7 @@ $wb['v6_prefix_length'] = 'Ön ek tanımlanmış IPv6 adresine göre çok uzun ' $wb['backup_dir_is_mount_txt'] = 'Yedek Klasörü Takılı mı?'; $wb['backup_dir_mount_cmd_txt'] = 'Mount komutu, yedek klasörü takılı değil ise'; $wb['backup_delete_txt'] = 'Etki alanı ya da web sitesi silindiğinde yedekler de silinsin'; +$wb['overquota_db_notify_threshold_txt'] = 'DB quota warning usage level'; $wb['overquota_db_notify_admin_txt'] = 'Veritabanı Kotası Bildirimleri Yöneticiye Gönderilsin'; $wb['overquota_db_notify_client_txt'] = 'Veritabanı Kotası Bildirimleri Müşteriye Gönderilsin'; $wb['monitor_system_updates_txt'] = 'Linux Güncellemeleri Denetlensin'; diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index 0eac988961..d23a23a59c 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -146,6 +146,11 @@ {tmpl_var name='mailbox_quota_stats'} +
+ +
+
%
+
diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm index ca1d54344c..5cf5c43a75 100644 --- a/interface/web/admin/templates/server_config_web_edit.htm +++ b/interface/web/admin/templates/server_config_web_edit.htm @@ -144,6 +144,11 @@
{tmpl_var name='overtraffic_disable_web'}
+
+
+ +
+
%
@@ -156,6 +161,11 @@
{tmpl_var name='overquota_notify_client'}
+
+
+ +
+
%
diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php index 5e1bb92276..ac7ae0aa5c 100644 --- a/server/lib/classes/cron.d/300-quota_notify.inc.php +++ b/server/lib/classes/cron.d/300-quota_notify.inc.php @@ -210,8 +210,8 @@ class cronjob_quota_notify extends cronjob { $rec['hard'] .= ' KB'; } - // send notifications only if 90% or more of the quota are used - if($used_ratio < 0.9) { + // send notifications only if the website is over the quota threshold + if($used_ratio <= $web_config['overquota_notify_threshold'] / 100) { // reset notification date if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', array("last_quota_notification" => null), 'domain_id', $rec['domain_id']); @@ -339,8 +339,8 @@ class cronjob_quota_notify extends cronjob { $rec['used'] = round($rec['used'] / 1048576, 4).' MB'; } - // send notifications only if 90% or more of the quota are used - if($used_ratio < 0.9) { + // send notifications only if the mail account is over the quota threshold + if($used_ratio <= $mail_config['overquota_notify_threshold'] / 100) { // reset notification date if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('mail_user', array("last_quota_notification" => null), 'mailuser_id', $rec['mailuser_id']); @@ -455,8 +455,8 @@ class cronjob_quota_notify extends cronjob { if ($quota > 0) $used_ratio = $monitor['size'] / $quota; else $used_ratio = 0; - //* send notifications only if 90% or more of the quota are used - if($used_ratio > 0.9 && $used_ratio != 0) { + //* send notifications only if the database is over the quota threshold + if($used_ratio >= $web_config['overquota_db_notify_threshold'] / 100 && $used_ratio != 0) { //* could a notification be sent? $send_notification = false; -- GitLab From 8414f388f50e0b70b2a3a1b2e4a758831a21d878 Mon Sep 17 00:00:00 2001 From: Mladen B Date: Thu, 20 Jan 2022 08:36:16 +0100 Subject: [PATCH 402/403] Moved all the functions on top of the file. --- interface/web/login/index.php | 56 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/interface/web/login/index.php b/interface/web/login/index.php index 84fd49bc1e..a888aab6e7 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -28,34 +28,6 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -require_once '../../lib/config.inc.php'; -require_once '../../lib/app.inc.php'; - -include_once '../common.php'; - -// Check if we have an active users session and no login_as. -if ($_SESSION['s']['user']['active'] == 1 && @$_POST['login_as'] != 1) { - header('Location: /index.php'); - die(); -} - -$app->uses('tpl'); -$app->tpl->newTemplate('main_login.tpl.htm'); -$app->tpl->setInclude('content_tpl', 'templates/index.htm'); - -$error = ''; - -$app->load_language_file('web/login/lib/lang/'.$conf["language"].'.lng'); - -// Maintenance mode -$maintenance_mode = false; -$maintenance_mode_error = ''; -$server_config_array = $app->getconf->get_global_config('misc'); -if ($app->is_under_maintenance()) { - $maintenance_mode = true; - $maintenance_mode_error = $app->lng('error_maintenance_mode'); -} - /** * @param app $app * @param $error @@ -408,6 +380,34 @@ function is_login_as(app $app, $username, $password) return $loginAs; } +require_once '../../lib/config.inc.php'; +require_once '../../lib/app.inc.php'; + +include_once '../common.php'; + +// Check if we have an active users session and no login_as. +if ($_SESSION['s']['user']['active'] == 1 && @$_POST['login_as'] != 1) { + header('Location: /index.php'); + die(); +} + +$app->uses('tpl'); +$app->tpl->newTemplate('main_login.tpl.htm'); +$app->tpl->setInclude('content_tpl', 'templates/index.htm'); + +$error = ''; + +$app->load_language_file('web/login/lib/lang/'.$conf["language"].'.lng'); + +// Maintenance mode +$maintenance_mode = false; +$maintenance_mode_error = ''; +$server_config_array = $app->getconf->get_global_config('misc'); +if ($app->is_under_maintenance()) { + $maintenance_mode = true; + $maintenance_mode_error = $app->lng('error_maintenance_mode'); +} + //* Login Form was sent if (count($_POST) > 0) { process_login_request($app, $error, $conf, $module); -- GitLab From 20a609227c8522e7d68372a2708a71a242830e14 Mon Sep 17 00:00:00 2001 From: Mladen B Date: Thu, 20 Jan 2022 08:38:55 +0100 Subject: [PATCH 403/403] Used file() instead of file_get_contents() and explode(). --- interface/web/login/index.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/web/login/index.php b/interface/web/login/index.php index a888aab6e7..2bcb380d95 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -182,8 +182,7 @@ function is_admin_ip_whitelisted($ip, $conf) // if the file doesn't exist, we assume that webmaster doesn't use this feature if (!file_exists($conf['admin_ip_whitelist_file'])) return true; - $file_content = file_get_contents($conf['admin_ip_whitelist_file']); - $file_lines = explode("\n", $file_content); + $file_lines = file($conf['admin_ip_whitelist_file']); $matches = array_filter($file_lines, function($v) use ($ip) { $line = trim($v); -- GitLab