diff --git a/.gitignore b/.gitignore index 32f43c2430e66a26c0100ade3e1685f1836d458a..81d5108cae397b9151249495acd54897a8f1fe45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +.idea /nbproject/private/ .phplint-cache *.swp diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4e4a201bfcbb17bd997c528650ffcd13e5cf735f..e7a4bf81481d388375c2e50d0d47efe1f6c086e4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,8 @@ stages: - syntax - syntax_diff + - test + - build # ### Stage syntax @@ -15,6 +17,7 @@ syntax:lint: - schedules - web - merge_requests + - /^\d+\.\d+\.\d+(p\d+)?$/ script: - echo "Syntax checking PHP files" @@ -30,6 +33,12 @@ syntax_diff:lint: - pushes - branches + except: + - schedules + - web + - merge_requests + - /^\d+\.\d+\.\d+(p\d+)?$/ + script: - echo "Syntax checking PHP files" - bash ./.git-scripts/syntax.sh commit @@ -49,3 +58,47 @@ syntax_diff:lint: # - echo "For more information http://www.icosaedro.it/phplint/" # - vendor/bin/phplint + +#test:install: +# stage: test +# image: jerob/docker-ispconfig +# only: +# - schedules +# - web +# - /^\d+\.\d+\.\d+$/ +# +# 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 +# +# needs: ["syntax:lint"] + +build:package: + stage: build + image: edbizarro/gitlab-ci-pipeline-php:7.2 + only: + refs: + - /^\d+\.\d+\.\d+(p\d+)?$/ + - web + + script: + - echo "Building release." + - if [[ "$VER" == "" ]] ; then VER="$CI_COMMIT_TAG" ; fi + - if [[ "$VER" == "" ]] ; then VER="3.2dev"$(date +%s) ; fi + - if [[ "$VER" != "" ]] ; then echo "Replacing 3.2dev by $VER" ; sed -i -r 's/3\.2dev/'${VER}'/g' install/tpl/config.inc.php.master install/sql/ispconfig3.sql ; fi + - RET=0 + - tar -cpzf ISPConfig-${VER}.tar.gz --exclude "ISPConfig-${VER}.tar.gz" --exclude ".git*" --exclude ".phplint.yml" --transform 's,^\./,ispconfig3_install/,' . || RET=$? + - if [[ $RET > 1 ]] ; then exit $RET ; fi + - echo "Listing tar contents for verification" + - tar -tvf ISPConfig-${VER}.tar.gz + - echo "Uploading file to download server" + - curl -u "${DEPLOY_FTP_USER}:${DEPLOY_FTP_PASSWORD}" -T ISPConfig-${VER}.tar.gz ftp://${DEPLOY_FTP_SERVER}/web/ + - if [[ "$VER" =~ ^[0-9]+\.[0-9]+\.[0-9]+(p[0-9]+)?$ ]] ; then echo "Stable release ${VER}" ; curl -u "${DEPLOY_FTP_USER}:${DEPLOY_FTP_PASSWORD}" -T ISPConfig-${VER}.tar.gz ftp://${DEPLOY_FTP_SERVER}/web/ISPConfig-3-stable.tar.gz ; echo -n "${VER}" > ispconfig3_version.txt ; curl -u "${DEPLOY_FTP_USER}:${DEPLOY_FTP_PASSWORD}" -T ispconfig3_version.txt ftp://${DEPLOY_FTP_SERVER}/web/ ; else echo "Dev release ${VER}" ; fi + - rm ISPConfig-${VER}.tar.gz + - echo "Download url is https://download.ispconfig.org/ISPConfig-${VER}.tar.gz" + + needs: ["syntax:lint"] + allow_failure: false \ No newline at end of file diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 751016f70ad21999ff87d79d5e8191e1e1ae5d84..d86285d53d321b491b17bc8cfd3b228190f3773a 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -1,41 +1,45 @@ -## short description -What is happening and what is wrong with that? + -## correct behaviour -What should happen instead? +## Summary + -## environment -Server OS: (debian/ubuntu/centos/...) -Server OS version: (wheezy/trusty/centos6/...) -ISPConfig version: (3.0.5.4/3.1.5/3.1dev/...) -_you can use `grep 'ISPC_APP_VERSION' /usr/local/ispconfig/server/lib/config.inc.php` to get it from the command line_ +## Steps to reproduce +1. [First step] +2. [Second step] +3. [and so on...] -If it might be related to the problem -``` -insert the output of `nginx -v` or `apachectl -v` here -``` +## Correct behaviour + + +## Environment +Server OS + version: (Debian 10/Ubuntu 20.04/CentOS 8/...) \ +ISPConfig version: (3.1.15p3/3.2.3/3.2dev/...) + +Software version of the related software: + ``` -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. +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 +## 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. -## log entries -``` -apache / nginx error.log lines (if related) -``` \ No newline at end of file +## Related log entries diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b515c5348d24a4c042076a9ae5e4c764a522950f..3a4a7de71fac0c761db397a24d37111979ada037 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,99 +1,319 @@ -# 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 +* If you are a new user, please send an email to: dev [at] ispconfig [dot] org to receive rights to fork the project. +* 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 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: \ +"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 shorttags. A Shorttag is always use 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 +329,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(....) diff --git a/README.md b/README.md index 1ffa1519938200eda108baa58dce4ea548ffc935..901cb2a7b9578ba22bd6fc066c2e7842cb2ca685 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,46 @@ # ISPConfig - Hosting Control Panel - +![ISPConfig logo](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 +- Mailserver management +- DNS server management - Virtualization (OpenVZ) -- Administrator, reseller and client login -- Configuration mirroring and clusters -- Open Source software (BSD license) +- Administrator, reseller, client and mailuser login +- Open Source software ([BSD license](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: BIND9 and PowerDNS[^1] +- Database: MariaDB and MySQL + +[^1]: not actively tested + +## Supported operating systems +- Debian 9 - 11, and testing +- Ubuntu 16.04 - 20.04 +- CentOS 7 and 8 + +## Auto-install script +You can install the "Perfect Server" with ISPConfig using [our official autoinstaller](https://www.howtoforge.com/ispconfig-autoinstall-debian-ubuntu/) + +## 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[^2] and Confixx 3). For more information, see https://www.ispconfig.org/add-ons/ispconfig-migration-tool/ + +[^2]: The Migration Toolkit now contains 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 read the contributing guidelines: [CONTRIBUTING.MD](CONTRIBUTING.md) + diff --git a/helper_scripts/cert_check.sh b/helper_scripts/cert_check.sh new file mode 100644 index 0000000000000000000000000000000000000000..148ab59f7aa20abf5babb259c29299700096071c --- /dev/null +++ b/helper_scripts/cert_check.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +chkdata() { + F=$1 + CRT=$2 + KEY=$3 + if [[ "$CRT" != "" && "$KEY" != "" ]] ; then + if [[ ! -f "$CRT" ]] ; then + echo "[WARN] CERTIFICATE FILE ${CRT} MISSING FOR ${F}" ; + else + echo -n "Checking ${CRT}" ; + CHK=$(openssl x509 -in "${CRT}" -text -noout >/dev/null 2>&1 ; echo $?); + if [[ $CHK -ne 0 ]] ; then + echo " FAILED!" ; + else + echo " OK" ; + fi + fi + if [[ ! -f "$KEY" ]] ; then + echo "[WARN] KEY FILE ${KEY} MISSING FOR ${F}" ; + else + echo -n "Checking ${KEY}" ; + CHK=$(openssl rsa -in "${KEY}" -check -noout >/dev/null 2>&1 ; echo $?); + if [[ $CHK -ne 0 ]] ; then + echo " FAILED!" ; + else + echo " OK" ; + fi + fi + + if [[ -f "$CRT" && -f "$KEY" ]] ; then + echo -n "Checking that key and certificate match"; + MDCRT=$(openssl x509 -noout -modulus -in "${CRT}" | openssl md5) ; + MDKEY=$(openssl rsa -noout -modulus -in "${KEY}" | openssl md5) ; + if [[ "$MDCRT" != "$MDKEY" ]] ; then + echo " FAILED!" ; + else + echo " OK" ; + fi + fi + echo "---" ; + elif [[ "$CRT" != "" || "$KEY" != "" ]] ; then + echo "[WARN] Check SSL config of ${F}"; + echo "---" ; + fi +} + +if [[ -d /etc/apache2/sites-enabled ]] ; then + echo "Checking enabled apache vhosts" ; + for FIL in /etc/apache2/sites-enabled/* ; do + CRT=$(grep 'SSLCertificateFile' "${FIL}" | grep -E -v '^[[:space:]]*#' | awk '{print $2}' | head -n 1) ; + KEY=$(grep 'SSLCertificateKeyFile' "${FIL}" | grep -E -v '^[[:space:]]*#' | awk '{print $2}' | head -n 1) ; + chkdata "$FIL" "$CRT" "$KEY" ; + done +fi + +if [[ -d /etc/nginx/sites-enabled ]] ; then + echo "Checking enabled nginx vhosts" ; + for FIL in /etc/nginx/sites-enabled/* ; do + CRT=$(grep 'ssl_certificate' "${FIL}" | grep -E -v '^[[:space:]]*#' | awk '{print $2}' | head -n 1) ; + CRT=${CRT%;} + KEY=$(grep 'ssl_certificate_key' "${FIL}" | grep -E -v '^[[:space:]]*#' | awk '{print $2}' | head -n 1) ; + KEY=${KEY%;} + chkdata "$FIL" "$CRT" "$KEY" ; + done +fi \ No newline at end of file diff --git a/helper_scripts/test_install_docker.sh b/helper_scripts/test_install_docker.sh new file mode 100755 index 0000000000000000000000000000000000000000..4de61c38957dff6ddd1ce9ae823ca93974cdcd18 --- /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 diff --git a/install/dist/conf/centos52.conf.php b/install/dist/conf/centos52.conf.php index 12044d3ce07d36d42e166c961c4939b4d82ba01f..6dff93f65f3a609cb32111f483fdb10727efbec4 100644 --- a/install/dist/conf/centos52.conf.php +++ b/install/dist/conf/centos52.conf.php @@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i $conf['amavis']['config_dir'] = '/etc'; $conf['amavis']['init_script'] = 'amavisd'; +//* Rspamd +$conf['rspamd']['installed'] = false; // will be detected automatically during installation +$conf['rspamd']['config_dir'] = '/etc/rspamd'; +$conf['rspamd']['init_script'] = 'rspamd'; + //* ClamAV $conf['clamav']['installed'] = false; // will be detected automatically during installation $conf['clamav']['init_script'] = 'clamd'; diff --git a/install/dist/conf/centos53.conf.php b/install/dist/conf/centos53.conf.php index 12044d3ce07d36d42e166c961c4939b4d82ba01f..6dff93f65f3a609cb32111f483fdb10727efbec4 100644 --- a/install/dist/conf/centos53.conf.php +++ b/install/dist/conf/centos53.conf.php @@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i $conf['amavis']['config_dir'] = '/etc'; $conf['amavis']['init_script'] = 'amavisd'; +//* Rspamd +$conf['rspamd']['installed'] = false; // will be detected automatically during installation +$conf['rspamd']['config_dir'] = '/etc/rspamd'; +$conf['rspamd']['init_script'] = 'rspamd'; + //* ClamAV $conf['clamav']['installed'] = false; // will be detected automatically during installation $conf['clamav']['init_script'] = 'clamd'; diff --git a/install/dist/conf/debian100.conf.php b/install/dist/conf/debian100.conf.php index 28d82b80794fad567dec6720a890596bd4838bcb..0861af83deb1729230d9d978e0cdd38b0d0371d4 100644 --- a/install/dist/conf/debian100.conf.php +++ b/install/dist/conf/debian100.conf.php @@ -153,6 +153,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i $conf['amavis']['config_dir'] = '/etc/amavis'; $conf['amavis']['init_script'] = 'amavis'; +//* Rspamd +$conf['rspamd']['installed'] = false; // will be detected automatically during installation +$conf['rspamd']['config_dir'] = '/etc/rspamd'; +$conf['rspamd']['init_script'] = 'rspamd'; + //* ClamAV $conf['clamav']['installed'] = false; // will be detected automatically during installation $conf['clamav']['init_script'] = 'clamav-daemon'; diff --git a/install/dist/conf/debian110.conf.php b/install/dist/conf/debian110.conf.php new file mode 100644 index 0000000000000000000000000000000000000000..c60152df5c846daa79feaa03868cc65236f0e32a --- /dev/null +++ b/install/dist/conf/debian110.conf.php @@ -0,0 +1,239 @@ + diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php index 6ea9112dff854e87e39fac2c521d48cecf5fe840..cbc380fffb931252aba4593aad1a8376a0b4d84a 100644 --- a/install/dist/conf/debiantesting.conf.php +++ b/install/dist/conf/debiantesting.conf.php @@ -32,7 +32,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //* Main $conf['language'] = 'en'; -$conf['distname'] = 'debian100'; +$conf['distname'] = 'debian110'; $conf['hostname'] = 'server1.domain.tld'; // Full hostname $conf['ispconfig_install_dir'] = '/usr/local/ispconfig'; $conf['ispconfig_config_dir'] = '/usr/local/ispconfig'; @@ -83,8 +83,8 @@ $conf['apache']['version'] = '2.4'; $conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available'; $conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled'; $conf['apache']['vhost_port'] = '8080'; -$conf['apache']['php_ini_path_apache'] = '/etc/php/7.3/apache2/php.ini'; -$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.3/cgi/php.ini'; +$conf['apache']['php_ini_path_apache'] = '/etc/php/7.4/apache2/php.ini'; +$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.4/cgi/php.ini'; //* Website base settings $conf['web']['website_basedir'] = '/var/www'; @@ -99,7 +99,7 @@ $conf['web']['apps_vhost_user'] = 'ispapps'; $conf['web']['apps_vhost_group'] = 'ispapps'; //* Fastcgi -$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.3/cgi/'; +$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.4/cgi/'; $conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/'; $conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi'; @@ -210,11 +210,11 @@ $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']['php_fpm_init_script'] = 'php7.3-fpm'; -$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.3/fpm/php.ini'; -$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.3/fpm/pool.d'; +$conf['nginx']['php_fpm_init_script'] = 'php7.4-fpm'; +$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.4/fpm/php.ini'; +$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.4/fpm/pool.d'; $conf['nginx']['php_fpm_start_port'] = 9010; -$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.3-fpm'; +$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.4-fpm'; //* OpenVZ $conf['openvz']['installed'] = false; diff --git a/install/dist/conf/fedora32.conf.php b/install/dist/conf/fedora32.conf.php new file mode 100644 index 0000000000000000000000000000000000000000..6701bb8729f66efaf198deed3b2037bc15475049 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..873376fa2cc5ddfbb1dcb63a360040083f196d32 --- /dev/null +++ b/install/dist/conf/fedora33.conf.php @@ -0,0 +1,229 @@ + diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php index 19c9a4f6259600499d493c66718cf64bb7ff0a13..23453ae48fc5fea77fbd965a8d57d28cafd49032 100644 --- a/install/dist/conf/fedora9.conf.php +++ b/install/dist/conf/fedora9.conf.php @@ -154,7 +154,7 @@ $conf['rspamd']['init_script'] = 'rspamd'; //* ClamAV $conf['clamav']['installed'] = false; // will be detected automatically during installation -$conf['clamav']['init_script'] = 'clamd.amavisd'; +$conf['clamav']['init_script'] = 'clamd@amavisd'; //* Pureftpd $conf['pureftpd']['installed'] = false; // will be detected automatically during installation diff --git a/install/dist/conf/opensuse110.conf.php b/install/dist/conf/opensuse110.conf.php index e389c3b2a0ea727d619b453c477ef0a8f0964122..37f5a14d3b8e28f8517ac42e07690c8197480cb3 100644 --- a/install/dist/conf/opensuse110.conf.php +++ b/install/dist/conf/opensuse110.conf.php @@ -147,6 +147,11 @@ $conf['amavis']['installed'] = false; // will be detected automatically during i $conf['amavis']['config_dir'] = '/etc/amavis'; $conf['amavis']['init_script'] = 'amavis'; +//* Rspamd +$conf['rspamd']['installed'] = false; // will be detected automatically during installation +$conf['rspamd']['config_dir'] = '/etc/rspamd'; +$conf['rspamd']['init_script'] = 'rspamd'; + //* ClamAV $conf['clamav']['installed'] = false; // will be detected automatically during installation $conf['clamav']['init_script'] = 'clamd'; diff --git a/install/dist/lib/centos_base.lib.php b/install/dist/lib/centos_base.lib.php index 0fe988439d8098c255bf216489ab6e0053d99e2e..8c71db34a66531ec2cecc8f496ccb2113e4253d1 100644 --- a/install/dist/lib/centos_base.lib.php +++ b/install/dist/lib/centos_base.lib.php @@ -83,31 +83,28 @@ class installer_centos extends installer_dist { $config_dir = $conf['postfix']['config_dir']; - // Adding amavis-services to the master.cf file if the service does not already exists - $add_amavis = !$this->get_postfix_service('amavis','unix'); - $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet'); - $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet'); - - if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) { - //* backup master.cf - if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - // adjust amavis-config - if($add_amavis) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10025) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10027) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - } + // Adding amavis-services to the master.cf file + + // backup master.cf + if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); + + // first remove the old service definitions + $this->remove_postfix_service('amavis','unix'); + $this->remove_postfix_service('127.0.0.1:10025','inet'); + $this->remove_postfix_service('127.0.0.1:10027','inet'); + + // then add them back + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); + af($config_dir.'/master.cf', $content); + unset($content); removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn # REMOVE ME', 1); replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1); diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index 154c6b99c487f7b009cd5b7741111c5617d853d7..981e6cff92a70216656435bddb10a393f01dca54 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,13 @@ 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')) { + 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); 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 +130,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 +153,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 +166,7 @@ class installer extends installer_base { copy('tpl/debian6_dovecot.conf.master', $config_dir.'/'.$configfile); } } - + $dovecot_protocols = 'imap pop3'; //* dovecot-lmtpd @@ -196,7 +203,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"); diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 506659f6e76b5064c406098b7541ce8f654986d2..71809ac81ea0ec084a5dfa83031e3bb2e7859da2 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -47,282 +47,6 @@ class installer_dist extends installer_base { } } - function configure_postfix($options = '') - { - global $conf,$autoinstall; - $cf = $conf['postfix']; - $config_dir = $cf['config_dir']; - - if(!is_dir($config_dir)){ - $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'); - - //* mysql-virtual_alias_domains.cf - $this->process_postfix_config('mysql-verify_recipients.cf'); - - //* postfix-dkim - $filename='tag_as_originating.re'; - $full_file_name=$config_dir.'/'.$filename; - if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~'); - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master'); - wf($full_file_name, $content); - - $filename='tag_as_foreign.re'; - $full_file_name=$config_dir.'/'.$filename; - if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~'); - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master'); - wf($full_file_name, $content); - - //* Creating virtual mail user and group - $command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname']; - if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - - $command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m'; - if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - - //* These postconf commands will be executed on installation and update - $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ?", $conf['server_id']); - $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); - unset($server_ini_rec); - - //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update - $rbl_list = ''; - if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') { - $rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list'])); - foreach ($rbl_hosts as $key => $value) { - $rbl_list .= ", reject_rbl_client ". $value; - } - } - unset($rbl_hosts); - - //* If Postgrey is installed, configure it - $greylisting = ''; - if($conf['postgrey']['installed'] == true) { - $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; - } - - $reject_sender_login_mismatch = ''; - $reject_authenticated_sender_login_mismatch = ''; - if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) { - $reject_sender_login_mismatch = ', reject_sender_login_mismatch'; - $reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, '; - } - - # placeholder includes comment char - $stress_adaptive_placeholder = '#{stress_adaptive} '; - $stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder; - - $reject_unknown_client_hostname=''; - if (isset($server_ini_array['mail']['reject_unknown']) && ($server_ini_array['mail']['reject_unknown'] == 'client' || $server_ini_array['mail']['reject_unknown'] == 'client_helo')) { - $reject_unknown_client_hostname=',reject_unknown_client_hostname'; - } - $reject_unknown_helo_hostname=''; - if ((!isset($server_ini_array['mail']['reject_unknown'])) || $server_ini_array['mail']['reject_unknown'] == 'helo' || $server_ini_array['mail']['reject_unknown'] == 'client_helo') { - $reject_unknown_helo_hostname=',reject_unknown_helo_hostname'; - } - - unset($server_ini_array); - - $myhostname = str_replace('.','\.',$conf['hostname']); - - $postconf_placeholders = array('{config_dir}' => $config_dir, - '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], - '{vmail_userid}' => $cf['vmail_userid'], - '{vmail_groupid}' => $cf['vmail_groupid'], - '{rbl_list}' => $rbl_list, - '{greylisting}' => $greylisting, - '{reject_slm}' => $reject_sender_login_mismatch, - '{reject_aslm}' => $reject_authenticated_sender_login_mismatch, - '{myhostname}' => $myhostname, - $stress_adaptive_placeholder => $stress_adaptive, - '{reject_unknown_client_hostname}' => $reject_unknown_client_hostname, - '{reject_unknown_helo_hostname}' => $reject_unknown_helo_hostname, - ); - - $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master'); - $postconf_tpl = strtr($postconf_tpl, $postconf_placeholders); - $postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines - - //* These postconf commands will be executed on installation only - if($this->is_update == false) { - $postconf_commands = array_merge($postconf_commands, array( - 'myhostname = '.$conf['hostname'], - 'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain', - 'mynetworks = 127.0.0.0/8 [::1]/128' - )); - } - - //* Create the header and body check files - touch($config_dir.'/header_checks'); - touch($config_dir.'/mime_header_checks'); - touch($config_dir.'/nested_header_checks'); - touch($config_dir.'/body_checks'); - - //* Create the mailman files - if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data'); - //if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases'); - if(is_file('/var/lib/mailman/data/aliases')) unlink('/var/lib/mailman/data/aliases'); - if(!is_link('/var/lib/mailman/data/aliases')) symlink('/etc/mailman/aliases', '/var/lib/mailman/data/aliases'); - if(!is_dir('/etc/mailman')) mkdir('/etc/mailman'); - if(!is_file('/etc/mailman/aliases')) touch('/etc/mailman/aliases'); - exec('postalias /var/lib/mailman/data/aliases'); - if(!is_file('/etc/mailman/virtual-mailman')) touch('/etc/mailman/virtual-mailman'); - exec('postmap /etc/mailman/virtual-mailman'); - if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman'); - exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); - - //* Create auxillary postfix conf files - $configfile = 'helo_access'; - if(is_file($config_dir.'/'.$configfile)) { - copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); - chmod($config_dir.'/'.$configfile.'~', 0400); - } - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); - $content = strtr($content, $postconf_placeholders); - # todo: look up this server's ip addrs and loop through each - # todo: look up domains hosted on this server and loop through each - wf($config_dir.'/'.$configfile, $content); - - $configfile = 'blacklist_helo'; - if(is_file($config_dir.'/'.$configfile)) { - copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); - chmod($config_dir.'/'.$configfile.'~', 0400); - } - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); - $content = strtr($content, $postconf_placeholders); - wf($config_dir.'/'.$configfile, $content); - - //* Make a backup copy of the main.cf file - copy($config_dir.'/main.cf', $config_dir.'/main.cf~'); - - //* Executing the postconf commands - foreach($postconf_commands as $cmd) { - $command = "postconf -e '$cmd'"; - caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command); - } - - if(!stristr($options, 'dont-create-certs')) { - //* Create the SSL certificate - if(AUTOINSTALL){ - $command = 'cd '.$config_dir.'; ' - ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509"; - } else { - $command = 'cd '.$config_dir.'; ' - .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509'; - } - exec($command); - - $command = 'chmod o= '.$config_dir.'/smtpd.key'; - caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command); - } - - //** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop. - $command = 'chmod 755 /var/spool/authdaemon'; - caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command); - - //* Changing maildrop lines in posfix master.cf - if(is_file($config_dir.'/master.cf')){ - copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - } - if(is_file($config_dir.'/master.cf~')){ - exec('chmod 400 '.$config_dir.'/master.cf~'); - } - $configfile = $config_dir.'/master.cf'; - $content = rf($configfile); - // if postfix package is from fedora or centios main repo - $content = str_replace('# flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}', - ' flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}', - $content); - - // If postfix package is from centos plus repo - $content = str_replace('# flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}', - ' flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}', - $content); - - $content = str_replace(' flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}', - ' flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}', - $content); - - - $content = str_replace('#maildrop unix - n n - - pipe', - 'maildrop unix - n n - - pipe', - $content); - - wf($configfile, $content); - - //* Writing the Maildrop mailfilter file - $configfile = 'mailfilter'; - if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)){ - copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~'); - } - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master"); - $content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content); - wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content); - - //* Create the directory for the custom mailfilters - $command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters'; - caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - - //* Chmod and chown the .mailfilter file - $command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter'; - caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - - $command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter'; - caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - - } - public function configure_saslauthd() { global $conf; @@ -606,31 +330,28 @@ class installer_dist extends installer_base { $config_dir = $conf['postfix']['config_dir']; - // Adding amavis-services to the master.cf file if the service does not already exists - $add_amavis = !$this->get_postfix_service('amavis','unix'); - $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet'); - $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet'); - - if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) { - //* backup master.cf - if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - // adjust amavis-config - if($add_amavis) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10025) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10027) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - } + // Adding amavis-services to the master.cf file + + // backup master.cf + if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); + + // first remove the old service definitions + $this->remove_postfix_service('amavis','unix'); + $this->remove_postfix_service('127.0.0.1:10025','inet'); + $this->remove_postfix_service('127.0.0.1:10027','inet'); + + // then add them back + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); + af($config_dir.'/master.cf', $content); + unset($content); removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn # REMOVE ME', 1); replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1); @@ -1227,8 +948,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){ @@ -1372,6 +1093,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/interface/web/admin/software_package_del.php b/install/dist/lib/fedora32.lib.php similarity index 65% rename from interface/web/admin/software_package_del.php rename to install/dist/lib/fedora32.lib.php index e1387f39c43459b7261f1d90d19798a78c4a7d3e..3dcd7494d3326bd3618d229c950518e8c200f3e4 100644 --- a/interface/web/admin/software_package_del.php +++ b/install/dist/lib/fedora32.lib.php @@ -1,7 +1,7 @@ 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.'); +class installer extends installer_centos { -// 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'); + protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock'; + + // everything else is inherited from installer_centos class } - - - - - ?> diff --git a/interface/web/admin/software_repo_edit.php b/install/dist/lib/fedora33.lib.php similarity index 64% rename from interface/web/admin/software_repo_edit.php rename to install/dist/lib/fedora33.lib.php index 6d52da2b56799f0274239b42bba857bd4388ec8b..3dcd7494d3326bd3618d229c950518e8c200f3e4 100644 --- a/interface/web/admin/software_repo_edit.php +++ b/install/dist/lib/fedora33.lib.php @@ -1,6 +1,7 @@ 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 { +class installer extends installer_centos { + protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock'; + + // everything else is inherited from installer_centos class } -$page = new page_action; -$page->onLoad(); - ?> diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index acd4dbcf618cbdd79388b8bc26cd3b828f9b9f0d..ebb742a3683e1c64b72cbc7e477223a1527928a8 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'); @@ -157,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'; @@ -440,31 +444,28 @@ class installer extends installer_base $config_dir = $conf['postfix']['config_dir']; - // Adding amavis-services to the master.cf file if the service does not already exists - $add_amavis = !$this->get_postfix_service('amavis','unix'); - $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet'); - $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet'); - - if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) { - //* backup master.cf - if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - // adjust amavis-config - if($add_amavis) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10025) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10027) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - } + // Adding amavis-services to the master.cf file + + // backup master.cf + if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); + + // first remove the old service definitions + $this->remove_postfix_service('amavis','unix'); + $this->remove_postfix_service('127.0.0.1:10025','inet'); + $this->remove_postfix_service('127.0.0.1:10027','inet'); + + // then add them back + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); + af($config_dir.'/master.cf', $content); + unset($content); //* Add the clamav user to the amavis group exec('usermod -a -G amavis clamav'); @@ -527,10 +528,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'); } @@ -1115,8 +1116,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){ @@ -1252,6 +1253,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 cb145ea7df3c98a18b67bd0f76a600c78c2bdf92..7cc368a14e3fdab0351f06f6c088c9c1d6611257 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 @@ -219,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'); @@ -555,31 +513,28 @@ class installer_dist extends installer_base { $config_dir = $conf['postfix']['config_dir']; - // Adding amavis-services to the master.cf file if the service does not already exists - $add_amavis = !$this->get_postfix_service('amavis','unix'); - $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet'); - $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet'); - - if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) { - //* backup master.cf - if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - // adjust amavis-config - if($add_amavis) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10025) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10027) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - } + // Adding amavis-services to the master.cf file + + // backup master.cf + if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); + + // first remove the old service definitions + $this->remove_postfix_service('amavis','unix'); + $this->remove_postfix_service('127.0.0.1:10025','inet'); + $this->remove_postfix_service('127.0.0.1:10027','inet'); + + // then add them back + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); + af($config_dir.'/master.cf', $content); + unset($content); // Add the clamav user to the vscan group //exec('groupmod --add-user clamav vscan'); @@ -1215,8 +1170,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){ @@ -1369,6 +1324,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/tpl/gentoo/amavisd-ispconfig.conf.master b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master index 7e42c8a362b86f9255fbd46aa16c3a546b727a34..c60b50e2fa9aa47e3a9a93b187c701ba7c6d7e34 100644 --- a/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master +++ b/install/dist/tpl/gentoo/amavisd-ispconfig.conf.master @@ -51,7 +51,8 @@ use strict; $sql_select_policy = 'SELECT *,spamfilter_users.id'. ' FROM spamfilter_users LEFT JOIN spamfilter_policy ON spamfilter_users.policy_id=spamfilter_policy.id'. - ' WHERE spamfilter_users.email IN (%k) ORDER BY spamfilter_users.priority DESC'; + ' WHERE spamfilter_users.email IN (%k) AND spamfilter_users.policy_id != 0'. + ' ORDER BY spamfilter_users.priority DESC'; $sql_select_white_black_list = 'SELECT wb FROM spamfilter_wblist'. diff --git a/install/install.php b/install/install.php index 121e3a13cce6edc5894c69eb54d355ce9c7fd0bf..b94c1c7f6f78346b3b63ddb4583c766b2d47d7b3 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"); @@ -161,8 +160,13 @@ if(!is_writable(dirname(ISPC_LOG_FILE))){ die("ERROR: Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n"); } +//** Check for ISPConfig 2.x versions if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) { - die('This software cannot be installed on a server wich runs ISPConfig 2.x.'); + if(is_dir('/home/admispconfig')) { + die('This software cannot be installed on a server which runs ISPConfig 2.x.'); + } else { + die('This software cannot be installed on a server which runs ISPConfig 2.x; the presence of the /root/ispconfig/ directory may indicate an ISPConfig 2.x installation, otherwise you can remove or rename it to continue.'); + } } if(is_dir('/usr/local/ispconfig')) { @@ -172,6 +176,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(); @@ -593,6 +602,9 @@ if(!$issue_asked) { } } +// update acme.sh if installed +$inst->update_acme(); + if($conf['services']['web'] == true) { //** Configure apps vhost swriteln('Configuring Apps vhost'); @@ -607,10 +619,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(); diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index 2ed873d9baf4799e80d5c556232a8cb4f50d51bc..6ff32bb785f27dd2c71adb610b23f1a0ce14e992 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -238,6 +238,13 @@ function get_distname() { $distid = 'debian60'; $distbaseid = 'debian'; swriteln("Operating System: Debian 10.0 (Buster) or compatible\n"); + } elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '11') { + $distname = 'Debian'; + $distver = 'Bullseye'; + $distconfid = 'debian110'; + $distid = 'debian60'; + $distbaseid = 'debian'; + swriteln("Operating System: Debian 11.0 (Bullseye) or compatible\n"); } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) { $distname = 'Debian'; $distver = 'Testing'; @@ -308,6 +315,18 @@ function get_distname() { $distid = 'fedora9'; $distbaseid = 'fedora'; swriteln("Operating System: Fedora 11 or compatible\n"); + } 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'; + $distbaseid = 'fedora'; + swriteln("Operating System: Fedora 33 or compatible\n"); } elseif(stristr($content, 'CentOS release 5.2 (Final)')) { $distname = 'CentOS'; $distver = '5.2'; @@ -870,9 +889,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'; diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 8ed64d05d06c31203f10a0314bd27a21ff4adca3..eb69090579d393cff2dc639dda72401675df970d 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -34,8 +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 $min_php = '5.4'; // minimal php-version for update / install + public $is_update = false; // true if it is an update, false if it is a new install protected $mailman_group = 'list'; @@ -43,6 +42,30 @@ 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); + } + + public function update_acme() { + $acme = explode("\n", shell_exec('which acme.sh /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); + $acme = reset($acme); + $val = 0; + + if($acme && is_executable($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; @@ -151,10 +174,32 @@ 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'); + } + + 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 @@ -192,7 +237,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; } @@ -646,9 +691,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){ @@ -746,7 +788,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"; } @@ -1023,58 +1065,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 @@ -1111,7 +1107,7 @@ class installer_base { $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); unset($server_ini_rec); - //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update + //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removal after an update $rbl_list = ''; if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') { $rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list'])); @@ -1194,6 +1190,12 @@ class installer_base { $content = strtr($content, $postconf_placeholders); $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content))); } + $configfile = 'postfix_custom.conf'; + if(file_exists($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))); + } // Remove comment lines, these would give fatal errors when passed to postconf. $postconf_commands = array_filter($postconf_commands, function($line) { return preg_match('/^[^#]/', $line); }); @@ -1212,6 +1214,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'); @@ -1458,7 +1461,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 ); @@ -1504,7 +1507,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; } } @@ -1546,6 +1549,13 @@ 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')) { + 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); replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0); if(version_compare($dovecot_version, 2.1, '<')) { @@ -1637,6 +1647,12 @@ class installer_base { public function configure_amavis() { global $conf; + //* These postconf commands will be executed on installation and update + $server_ini_rec = $this->db->queryOneRecord("SELECT mail_server, config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']); + $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); + $mail_server = ($server_ini_rec['mail_server']) ? true : false; + unset($server_ini_rec); + // amavisd user config file $configfile = 'amavisd_user_config'; if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) copy($conf['amavis']['config_dir'].'/conf.d/50-user', $conf['amavis']['config_dir'].'/50-user~'); @@ -1649,64 +1665,84 @@ class installer_base { $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content); wf($conf['amavis']['config_dir'].'/conf.d/50-user', $content); chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640); + chgrp($conf['amavis']['config_dir'].'/conf.d/50-user', 'amavis'); - // TODO: chmod and chown on the config file - - // test if lmtp if available - $configure_lmtp = $this->get_postfix_service('lmtp','unix'); + $config_dir = $conf['postfix']['config_dir']; + $quoted_config_dir = preg_quote($config_dir, '|'); - // Adding the amavisd commands to the postfix configuration - // Add array for no error in foreach and maybe future options - $postconf_commands = array (); + $mail_config = $server_ini_array['mail']; + //* only change postfix config if amavisd is active filter + if($mail_server && $mail_config['content_filter'] === 'amavisd') { + // test if lmtp if available + $configure_lmtp = $this->get_postfix_service('lmtp','unix'); - // Check for amavisd -> pure webserver with postfix for mailing without antispam - if ($conf['amavis']['installed']) { - $content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis'; - $postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024"; - $postconf_commands[] = 'receive_override_options = no_address_mappings'; - } + // Adding the amavisd commands to the postfix configuration + $postconf_commands = array (); - // Make a backup copy of the main.cf file - copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2'); + // Check for amavisd -> pure webserver with postfix for mailing without antispam + if ($conf['amavis']['installed']) { + $content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis'; + $postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024"; + $postconf_commands[] = 'receive_override_options = no_address_mappings'; + $postconf_commands[] = 'address_verify_virtual_transport = smtp:[127.0.0.1]:10025'; + $postconf_commands[] = 'address_verify_transport_maps = static:smtp:[127.0.0.1]:10025'; + } - // Executing the postconf commands - foreach($postconf_commands as $cmd) { - $command = "postconf -e '$cmd'"; - caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); - } + $options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions")); + $new_options = array(); + 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)) { + continue; + } + $new_options[] = $value; + } + if ($configure_lmtp) { + 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:${config_dir}/mysql-verify_recipients.cf")); + break; + } + } + # postfix < 3.3 needs this when using reject_unverified_recipient: + if(version_compare($postfix_version, 3.3, '<')) { + $postconf_commands[] = "enable_original_recipient = yes"; + } + } + $postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options); - $config_dir = $conf['postfix']['config_dir']; + // Make a backup copy of the main.cf file + copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~2'); - // Adding amavis-services to the master.cf file if the service does not already exists -// $add_amavis = !$this->get_postfix_service('amavis','unix'); -// $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet'); -// $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet'); - //*TODO: check templates against existing postfix-services to make sure we use the template + // Executing the postconf commands + foreach($postconf_commands as $cmd) { + $command = "postconf -e '$cmd'"; + caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + } - // Or just remove the old service definitions and add them again? - $add_amavis = $this->remove_postfix_service('amavis','unix'); - $add_amavis_10025 = $this->remove_postfix_service('127.0.0.1:10025','inet'); - $add_amavis_10027 = $this->remove_postfix_service('127.0.0.1:10027','inet'); + // Adding amavis-services to the master.cf file - if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) { - //* backup master.cf + // backup master.cf if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~'); - // adjust amavis-config - if($add_amavis) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10025) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } - if ($add_amavis_10027) { - $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); - af($config_dir.'/master.cf', $content); - unset($content); - } + + // first remove the old service definitions + $this->remove_postfix_service('amavis','unix'); + $this->remove_postfix_service('127.0.0.1:10025','inet'); + $this->remove_postfix_service('127.0.0.1:10027','inet'); + + // then add them back + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master'); + af($config_dir.'/master.cf', $content); + unset($content); + + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master'); + af($config_dir.'/master.cf', $content); + unset($content); } // Add the clamav user to the amavis group @@ -1736,14 +1772,21 @@ class installer_base { global $conf; //* These postconf commands will be executed on installation and update - $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']); + $server_ini_rec = $this->db->queryOneRecord("SELECT mail_server, config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']); $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); + $mail_server = ($server_ini_rec['mail_server']) ? true : false; unset($server_ini_rec); + $config_dir = $conf['postfix']['config_dir']; + $quoted_config_dir = preg_quote($config_dir, '|'); + $mail_config = $server_ini_array['mail']; - if($mail_config['content_filter'] === 'rspamd') { - exec("postconf -X 'receive_override_options'"); - exec("postconf -X 'content_filter'"); + //* only change postfix config if rspamd is active filter + if($mail_server && $mail_config['content_filter'] === 'rspamd') { + exec("postconf -X receive_override_options"); + exec("postconf -X content_filter"); + exec("postconf -X address_verify_virtual_transport"); + exec("postconf -X address_verify_transport_maps"); exec("postconf -e 'smtpd_milters = inet:localhost:11332'"); exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'"); @@ -1768,11 +1811,18 @@ 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+1, 0, array('reject_sender_login_mismatch')); + 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++) { + if ($new_options[$i] == 'permit_sasl_authenticated') { + array_splice($new_options, $i, 0, array('reject_sender_login_mismatch')); break; } } @@ -1787,6 +1837,9 @@ class installer_base { if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) { continue; } + if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) { + continue; + } $new_options[] = $value; } exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'"); @@ -1794,23 +1847,31 @@ 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/')){ 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) == '/' ) { $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) { @@ -1821,104 +1882,106 @@ class installer_base { fclose($fps); unset($dkim_domains); - $tpl = new tpl(); - $tpl->newTemplate('rspamd_users.conf.master'); - - $whitelist_ips = array(); - $ips = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']); + # 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){ - $whitelist_ips[] = array('ip' => $ip['ip_address']); + $local_addrs[] = array( + 'ip' => $ip['ip_address'], + 'quoted_ip' => "\"".$ip['ip_address']."\",\n" + ); } } - $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'); - } + # 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', # dkim_signing.conf no longer uses template tags, could move below + 'options.inc', + 'redis.conf', + 'classifier-bayes.conf', + ); + foreach ($local_d as $f) { + $tpl = new tpl(); + if (file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) { + $tpl->newTemplate($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master"); + } else { + $tpl->newTemplate("rspamd_${f}.master"); + } - 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'); - } + $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); + } - 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'); + wf("/etc/rspamd/local.d/${f}", $tpl->grab()); } - 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'); + # local.d templates without template tags + $local_d = array( + 'groups.conf', + 'antivirus.conf', + 'mx_check.conf', + 'milter_headers.conf', + 'neural.conf', + 'neural_group.conf', + 'users.conf', + 'groups.conf', + 'arc.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_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'); + # override.d templates without template tags + $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.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'); + # local.d/maps.d templates without template tags + $maps_d = array( + '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")) { + 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/${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'); + # 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"); } - $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/override.d/*'); + 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'; caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); @@ -1942,7 +2005,11 @@ class installer_base { unset($server_ini_string); $tpl = new tpl(); - $tpl->newTemplate('rspamd_worker-controller.inc.master'); + if (file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_worker-controller.inc.master")) { + $tpl->newTemplate($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_worker-controller.inc.master"); + } else { + $tpl->newTemplate("rspamd_worker-controller.inc.master"); + } $rspamd_password = $mail_config['rspamd_password']; $crypted_password = trim(exec('rspamadm pw -p ' . escapeshellarg($rspamd_password))); if($crypted_password) { @@ -2057,17 +2124,17 @@ 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); } //* 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'); } @@ -2557,7 +2624,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','#'); @@ -2640,6 +2707,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($conf['ispconfig_install_dir'].'/interface/ssl/ispserver.key')) { + $content = str_replace('{ssl_on}', 'ssl http2', $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 { @@ -2682,10 +2758,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); @@ -2788,7 +2860,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); } } @@ -2859,8 +2931,13 @@ class installer_base { $check_acme_file = $acme_cert_dir . '/cert.pem'; } } - swriteln('Using certificate path ' . $acme_cert_dir); + + if(!is_dir($conf['ispconfig_log_dir'])) { + mkdir($conf['ispconfig_log_dir'], 0755, true); + } + $acme_log = $conf['ispconfig_log_dir'] . '/acme.log'; + $ip_address_match = false; if(!(($svr_ip4 && in_array($svr_ip4, $dns_ips)) || ($svr_ip6 && in_array($svr_ip6, $dns_ips)))) { swriteln('Server\'s public ip(s) (' . $svr_ip4 . ($svr_ip6 ? ', ' . $svr_ip6 : '') . ') not found in A/AAAA records for ' . $hostname . ': ' . implode(', ', $dns_ips)); @@ -2871,22 +2948,36 @@ 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 if(file_exists(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_pre_hook.sh') && !file_exists('/usr/local/bin/letsencrypt_pre_hook.sh')) { + if(is_link('/usr/local/bin/letsencrypt_pre_hook.sh')) { + unlink('/usr/local/bin/letsencrypt_pre_hook.sh'); + } symlink(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_pre_hook.sh', '/usr/local/bin/letsencrypt_pre_hook.sh'); chown('/usr/local/bin/letsencrypt_pre_hook.sh', 'root'); chmod('/usr/local/bin/letsencrypt_pre_hook.sh', 0700); } if(file_exists(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_post_hook.sh') && !file_exists('/usr/local/bin/letsencrypt_post_hook.sh')) { + if(is_link('/usr/local/bin/letsencrypt_post_hook.sh')) { + unlink('/usr/local/bin/letsencrypt_post_hook.sh'); + } symlink(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_post_hook.sh', '/usr/local/bin/letsencrypt_post_hook.sh'); chown('/usr/local/bin/letsencrypt_post_hook.sh', 'root'); chmod('/usr/local/bin/letsencrypt_post_hook.sh', 0700); } if(file_exists(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_renew_hook.sh') && !file_exists('/usr/local/bin/letsencrypt_renew_hook.sh')) { + if(is_link('/usr/local/bin/letsencrypt_renew_hook.sh')) { + unlink('/usr/local/bin/letsencrypt_renew_hook.sh'); + } symlink(ISPC_INSTALL_ROOT . '/server/scripts/letsencrypt_renew_hook.sh', '/usr/local/bin/letsencrypt_renew_hook.sh'); chown('/usr/local/bin/letsencrypt_renew_hook.sh', 'root'); chmod('/usr/local/bin/letsencrypt_renew_hook.sh', 0700); @@ -2906,13 +2997,31 @@ class installer_base { } // Get the default LE client name and version - $le_client = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot')); + $le_client = explode("\n", shell_exec('which certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot letsencrypt')); $le_client = reset($le_client); // Check for Neilpang acme.sh as well - $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); + $acme = explode("\n", shell_exec('which acme.sh /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 acme.sh /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.'); + + // 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.'); + } + } + } + $restore_conf_symlink = false; // we only need this for apache, so use fixed conf index @@ -2942,44 +3051,91 @@ class installer_base { $issued_successfully = false; + // Backup existing ispserver ssl files + // + // We may find valid or broken symlinks or actual files here. + // + // - dangling links are broken and get perm renamed (should just delete?). + // possibly web server can't start because vhost file points to non-existing cert files, + // we're not trying to catch or fix that (and not making it worse) + // + // - link to valid file is tmp renamed, and file copied to original name. + // if cert request is successful, remove the old symlink; + // if cert request fails, remove file copy and rename symlink to original name + // + // - actual file copied to tmp name. + // if cert request is successful, rename tmp copy to perm rename; + // if cert request fails, delete tmp copy + $cert_files = array( $ssl_crt_file, $ssl_key_file, $ssl_pem_file ); + foreach ($cert_files as $f) { + if (is_link($f) && ! file_exists($f)) { + rename($f, $f.'-'.$date->format('YmdHis').'.bak'); + } elseif (is_link($f)) { + rename($f, $f.'-temporary.bak'); + copy($f.'-temporary.bak', $f); + } elseif(file_exists($f)) { + copy($f, $f.'-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); + + # acme.sh does not set umask, resulting in incorrect permissions (ispconfig issue #6015) + $old_umask = umask(0022); + + // Switch from zerossl to letsencrypt CA + exec("$acme --set-default-ca --server letsencrypt"); $out = null; $ret = null; if($conf['nginx']['installed'] == true || $conf['apache']['installed'] == true) { - exec("$acme --issue -w /usr/local/ispconfig/interface/acme -d " . escapeshellarg($hostname) . " $renew_hook", $out, $ret); + exec("$acme --issue --log $acme_log -w /usr/local/ispconfig/interface/acme -d " . escapeshellarg($hostname) . " $renew_hook", $out, $ret); } // Else, it is not webserver, so we use standalone else { - exec("$acme --issue --standalone -d " . escapeshellarg($hostname) . " $hook", $out, $ret); + exec("$acme --issue --log $acme_log --standalone -d " . escapeshellarg($hostname) . " $hook", $out, $ret); } 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 //$acme_cert = "--cert-file $acme_cert_dir/cert.pem"; $acme_key = "--key-file " . escapeshellarg($ssl_key_file); $acme_chain = "--fullchain-file " . escapeshellarg($ssl_crt_file); - exec("$acme --install-cert -d " . escapeshellarg($hostname) . " $acme_key $acme_chain"); + exec("$acme --install-cert --log $acme_log -d " . escapeshellarg($hostname) . " $acme_key $acme_chain"); $issued_successfully = true; + umask($old_umask); + + // Make temporary backup of self-signed certs permanent + foreach ($cert_files as $f) { + if (is_link($f.'-temporary.bak')) { + unlink($f.'-temporary.bak'); + } elseif(file_exists($f.'-temporary.bak')) { + rename($f.'-temporary.bak', $f.'-'.$date->format('YmdHis').'.bak'); + } + } + } else { swriteln('Issuing certificate via acme.sh failed. Please check that your hostname can be verified by letsencrypt'); + + umask($old_umask); + + // Restore/cleanup temporary backup of self-signed certs + foreach ($cert_files as $f) { + if (is_link($f.'-temporary.bak')) { + @unlink($f); + rename($f.'-temporary.bak', $f); + } elseif(file_exists($f.'-temporary.bak')) { + unlink($f.'-temporary.bak'); + } + } } // Else, we attempt to use the official LE certbot client certbot } else { @@ -3011,24 +3167,39 @@ 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; + foreach (array( $ssl_crt_file, $ssl_key_file) as $f) { + if (file_exists($f) && ! is_link($f)) { + unlink($f); + } + } 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 + foreach ($cert_files as $f) { + if (is_link($f.'-temporary.bak')) { + unlink($f.'-temporary.bak'); + } elseif(file_exists($f.'-temporary.bak')) { + rename($f.'-temporary.bak', $f.'-'.$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/cleanup temporary backup of self-signed certs + foreach ($cert_files as $f) { + if (is_link($f.'-temporary.bak')) { + @unlink($f); + rename($f.'-temporary.bak', $f); + } elseif(file_exists($f.'-temporary.bak')) { + unlink($f.'-temporary.bak'); + } + } + } } else { swriteln('Did not find any valid acme client (acme.sh or certbot)'); @@ -3056,17 +3227,11 @@ class installer_base { } // We can still use the old self-signed method - $ssl_pw = substr(md5(mt_rand()), 0, 6); - exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096"); + $openssl_cmd = 'openssl req -nodes -newkey rsa:4096 -x509 -days 3650 -keyout ' . escapeshellarg($ssl_key_file) . ' -out ' . escapeshellarg($ssl_crt_file); if(AUTOINSTALL){ - exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file"); - } else { - exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file"); + $openssl_cmd .= ' -subj ' . escapeshellarg('/C=' . $autoinstall['ssl_cert_country'] . '/ST=' . $autoinstall['ssl_cert_state'] . '/L=' . $autoinstall['ssl_cert_locality'] . '/O=' . $autoinstall['ssl_cert_organisation'] . '/OU=' . $autoinstall['ssl_cert_organisation_unit'] . '/CN=' . $autoinstall['ssl_cert_common_name']); } - exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650"); - exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure"); - rename($ssl_key_file, $ssl_key_file.'.secure'); - rename($ssl_key_file.'.insecure', $ssl_key_file); + exec($openssl_cmd); } // Build ispserver.pem file and chmod it @@ -3415,8 +3580,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){ @@ -3481,7 +3646,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 { @@ -3560,6 +3725,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')) { diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php index 33b89786a681bef63233494817cfec4a13ddaebf..d88d64d6cd414f85387f10882b979bf44fbc7e6e 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; } diff --git a/install/patches/upd_0094.php b/install/patches/upd_0094.php new file mode 100644 index 0000000000000000000000000000000000000000..304828931e7a10f08f022664c1ab861b94ad4d40 --- /dev/null +++ b/install/patches/upd_0094.php @@ -0,0 +1,17 @@ +db->query("DELETE FROM mail_forwarding WHERE forwarding_id NOT IN (SELECT MIN(forwarding_id) FROM mail_forwarding GROUP BY source)"); + + // Remove any duplicate mail_transports prior to adding unique key + $inst->db->query("DELETE FROM mail_transport WHERE transport_id NOT IN (SELECT MIN(transport_id) FROM mail_transport GROUP BY domain, server_id)"); + } + +} diff --git a/install/sql/incremental/upd_0092.sql b/install/sql/incremental/upd_0092.sql new file mode 100644 index 0000000000000000000000000000000000000000..a12f9d482b0a58f71639d52a6dba96c3f0c17b4a --- /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_0093.sql b/install/sql/incremental/upd_0093.sql new file mode 100644 index 0000000000000000000000000000000000000000..96c5307f0ed22c0bda2651b41919f66af1a530a2 --- /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`; diff --git a/install/sql/incremental/upd_0094.sql b/install/sql/incremental/upd_0094.sql new file mode 100644 index 0000000000000000000000000000000000000000..2206658555b653d3bd4600e082faddbbb5b18816 --- /dev/null +++ b/install/sql/incremental/upd_0094.sql @@ -0,0 +1,20 @@ +-- 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`; + +-- default spamfilter_users.policy_id to 0 +ALTER TABLE `spamfilter_users` ALTER `policy_id` SET DEFAULT 0; + +-- mail_forwarding.source must be unique +ALTER TABLE `mail_forwarding` DROP KEY `server_id`; +ALTER TABLE `mail_forwarding` ADD KEY `server_id` (`server_id`, `source`); + +-- Purge apps & addons installer (#5795) - second time due to syntax error in 0093 +DROP TABLE IF EXISTS `software_package`; +DROP TABLE IF EXISTS `software_repo`; +DROP TABLE IF EXISTS `software_update`; +DROP TABLE IF EXISTS `software_update_inst`; + +-- mail_transport.domain must be unique +ALTER TABLE `mail_transport` DROP KEY `server_id_2`; +ALTER TABLE `mail_transport` ADD UNIQUE KEY `server_id_2` (`server_id`, `domain`); diff --git a/install/sql/incremental/upd_0095.sql b/install/sql/incremental/upd_0095.sql new file mode 100644 index 0000000000000000000000000000000000000000..0a17c387371c7ebd852f7dc2043b9f565ad8491e --- /dev/null +++ b/install/sql/incremental/upd_0095.sql @@ -0,0 +1 @@ +ALTER TABLE `remote_session` ADD `remote_ip` VARCHAR(39) NOT NULL DEFAULT '' AFTER `tstamp`; \ No newline at end of file diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index beea2623b3392fa3f31b2b89dc194002a6b2209b..db4870ad663415a4eb1e7fa85d1fa09417690739 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,2 +1,19 @@ --- drop old php column because new installations don't have them (fails in multi-server) -ALTER TABLE `web_domain` DROP COLUMN `fastcgi_php_version`; +-- create mail_relay_domain and load with current domains from mail_transport table +CREATE TABLE IF NOT EXISTS `mail_relay_domain` ( + `relay_domain_id` bigint(20) NOT NULL AUTO_INCREMENT, + `sys_userid` int(11) NOT NULL DEFAULT '0', + `sys_groupid` int(11) 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, + `server_id` int(11) NOT NULL DEFAULT '0', + `domain` varchar(255) DEFAULT NULL, + `access` varchar(255) NOT NULL DEFAULT 'OK', + `active` varchar(255) NOT NULL DEFAULT 'y', + PRIMARY KEY (`relay_domain_id`), + UNIQUE KEY `domain` (`domain`, `server_id`) + ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +INSERT INTO `mail_relay_domain` SELECT NULL, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `domain`, 'OK', `active` FROM `mail_transport` WHERE `domain` NOT LIKE '%@%' AND `domain` LIKE '%.%' GROUP BY `domain`, `server_id`; + +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 7753071f71983f234bfb97c076d6dd815ae1afb4..ec6596bc779e4274d5612273e5f9fa96fd9a27cd 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -178,12 +178,15 @@ 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', `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', + `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', @@ -309,12 +312,15 @@ 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', `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', + `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', @@ -629,6 +635,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`) @@ -820,7 +827,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 ; -- -------------------------------------------------------- @@ -882,6 +889,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`), @@ -909,7 +919,7 @@ CREATE TABLE `mail_forwarding` ( `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n', `greylisting` enum('n','y' ) NOT NULL DEFAULT 'n', PRIMARY KEY (`forwarding_id`), - KEY `server_id` (`server_id`,`source`), + KEY `server_id` (`server_id`, `source`), KEY `type` (`type`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; @@ -961,6 +971,27 @@ CREATE TABLE `mail_mailinglist` ( -- -------------------------------------------------------- +-- +-- Table structure for Table `mail_relay_domain` +-- + +CREATE TABLE IF NOT EXISTS `mail_relay_domain` ( + `relay_domain_id` bigint(20) NOT NULL AUTO_INCREMENT, + `sys_userid` int(11) NOT NULL DEFAULT '0', + `sys_groupid` int(11) 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, + `server_id` int(11) NOT NULL DEFAULT '0', + `domain` varchar(255) DEFAULT NULL, + `access` varchar(255) NOT NULL DEFAULT 'OK', + `active` varchar(255) NOT NULL DEFAULT 'y', + PRIMARY KEY (`relay_domain_id`), + UNIQUE KEY `domain` (`domain`, `server_id`) +) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + -- -- Table structure for Table `mail_relay_recipient` -- @@ -1014,7 +1045,7 @@ CREATE TABLE `mail_transport` ( `active` enum('n','y') NOT NULL DEFAULT 'n', PRIMARY KEY (`transport_id`), KEY `server_id` (`server_id`,`transport`), - KEY `server_id_2` (`server_id`,`domain`) + UNIQUE KEY `server_id_2` (`server_id`, `domain`) ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- @@ -1308,6 +1339,7 @@ CREATE TABLE `remote_session` ( `remote_functions` text, `client_login` tinyint(1) unsigned NOT NULL default '0', `tstamp` int(10) unsigned NOT NULL DEFAULT '0', + `remote_ip` varchar(39) NOT NULL DEFAULT '', PRIMARY KEY (`remote_session`) ) DEFAULT CHARSET=utf8 ; @@ -1325,7 +1357,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, @@ -1426,6 +1458,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 ; @@ -1461,88 +1494,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` -- @@ -1619,7 +1570,7 @@ CREATE TABLE `spamfilter_users` ( `sys_perm_other` varchar(5) NOT NULL DEFAULT '', `server_id` int(11) unsigned NOT NULL DEFAULT '0', `priority` tinyint(3) unsigned NOT NULL default '7', - `policy_id` int(11) unsigned NOT NULL default '1', + `policy_id` int(11) unsigned NOT NULL default '0', `email` varchar(255) NOT NULL DEFAULT '', `fullname` varchar(64) default NULL, `local` varchar(1) default NULL, @@ -2484,7 +2435,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'), @@ -2507,7 +2458,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'); -- -------------------------------------------------------- @@ -2528,25 +2479,17 @@ 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` -- 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); -- -------------------------------------------------------- @@ -2579,7 +2522,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/install/sql/powerdns.sql b/install/sql/powerdns.sql index c9bf8280f23f2aa593dcaafd6e793ce2786413c6..640e06eb060f3b8f6a3094fcae5a1695cf476d34 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 1 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; + diff --git a/install/tpl/amavisd_user_config.master b/install/tpl/amavisd_user_config.master index 344ea9a152de0ab43982c83b18b6bb7e99525d6c..f764bb3acb0bedd1c884f255662e7782e58b473a 100644 --- a/install/tpl/amavisd_user_config.master +++ b/install/tpl/amavisd_user_config.master @@ -33,7 +33,8 @@ use strict; $sql_select_policy = 'SELECT *,spamfilter_users.id'. ' FROM spamfilter_users LEFT JOIN spamfilter_policy ON spamfilter_users.policy_id=spamfilter_policy.id'. - ' WHERE spamfilter_users.email IN (%k) ORDER BY spamfilter_users.priority DESC'; + ' WHERE spamfilter_users.email IN (%k) AND spamfilter_users.policy_id != 0'. + ' ORDER BY spamfilter_users.priority DESC'; $sql_select_white_black_list = 'SELECT wb FROM spamfilter_wblist'. diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master index b1de2a167621b5ff3fa242e33f64be14ef3065a3..c968abf3679777acd99fa6b8ddbee89524d43956 100644 --- a/install/tpl/apache_ispconfig.conf.master +++ b/install/tpl/apache_ispconfig.conf.master @@ -1,8 +1,12 @@ +# Important: A copy of this file exists in server/conf/ 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 diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master index 946a3ee50509afc9238c782a65e6ca0fb2e81003..bd5cc8f47fb0206e122361c6d60cb520e2e60bcf 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/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master index 72f286eace3c5e2a54d4a3c582a65277337f0e16..32a25c995de7f3ac0d739bc7272434d5176b0ffd 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/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index f933463b0b8e009736e76979d2548c3606ebfb19..36ae86fa6df7023218ba12d686fdb6a6c964ec38 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -1,3 +1,6 @@ +# 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 @@ -65,21 +68,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 { @@ -111,7 +114,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 = . @@ -131,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_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master index 4cbe22f1b9aa84ae26eb84345eb4242c42a87cbb..f067d6ba108dc547ab48d6c1e11eea1557fc72d8 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/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 4a44bfbfc6a63ef05e4e310464533fc1d15eb385..12288e2cdeaf510cc80603eb9bd616a371076ed9 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -1,3 +1,6 @@ +# 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 @@ -62,21 +65,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 } @@ -86,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 @@ -108,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/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index a6a48e0e02332626db23d6a9df83b92bb82722c9..5023caf6bee402159e822caa7a396ccd8f910242 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -24,11 +24,11 @@ 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 = 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_reject_unlisted_sender = 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 +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 @@ -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, texthash:{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/dovecot_custom.conf.master b/install/tpl/dovecot_custom.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..dab73e5a09772417a31d3b45e4c8a36ef82b63e4 --- /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_amavisd_conf.master b/install/tpl/fedora_amavisd_conf.master index 9cf4b801bc669813239dc8d4478729b492623872..2435e6939e06511899dde1377f50c27de15c48b5 100644 --- a/install/tpl/fedora_amavisd_conf.master +++ b/install/tpl/fedora_amavisd_conf.master @@ -751,7 +751,8 @@ $banned_filename_re = new_RE( $sql_select_policy = 'SELECT *,spamfilter_users.id'. ' FROM spamfilter_users LEFT JOIN spamfilter_policy ON spamfilter_users.policy_id=spamfilter_policy.id'. - ' WHERE spamfilter_users.email IN (%k) ORDER BY spamfilter_users.priority DESC'; + ' WHERE spamfilter_users.email IN (%k) AND spamfilter_users.policy_id != 0'. + ' ORDER BY spamfilter_users.priority DESC'; $sql_select_white_black_list = 'SELECT wb FROM spamfilter_wblist'. diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master index 00ef4faf258cd4d8b1be450a3f631814743e9b8e..bac4c9d13d9955027a403c08781b054547794565 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/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index a217e28d993fa46033bab2ab9009bb21df733125..d4cd148ef0e3e6c8138d844840084d57dda18e5c 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -1,3 +1,6 @@ +# 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 @@ -59,21 +62,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 { @@ -82,7 +85,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 @@ -105,7 +108,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 = . @@ -125,3 +128,5 @@ namespace inbox { special_use = \Trash } } + +!include_try conf.d/99-ispconfig-custom-config.conf diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 3cd8357a66b96917ea251064918ab99f62f0d63e..c5786c6ea8cf54262d0325a0ebccbe97d2cca640 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -20,11 +20,11 @@ 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 = 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_reject_unlisted_sender = 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 +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 @@ -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, texthash:{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 f4a1d4025c6e870dedcc031a7265a3f5f7fe65ff..405640f52a9dd4310289db241ee6fce61fec8aea 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -19,11 +19,11 @@ 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 = 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_reject_unlisted_sender = 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 +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 @@ -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, texthash:{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/jk_init.ini.master b/install/tpl/jk_init.ini.master index 0f62aac9efdd0d3bc0b9c9fe5e98becddeba3821..0dfcdccb680c980cceca239f60d3cb9370d6280e 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.*, /lib*/libnss*.so.*, /lib/*/libnsl.so.*, /lib/*/libnss*.so.*, /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.*, /lib*/libnss_mdns*.so.*, /lib/*/libnss_dns.so.*, /lib/*/libnss_mdns*.so.*, /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 @@ -35,22 +35,20 @@ devices = /dev/null [git] comment = Fast Version Control System -paths = /usr/bin/git*, /usr/lib/git-core, /usr/share/git-core, /usr/bin/pager +paths = /usr/bin/git*, /usr/lib/git-core, /usr/share/git-core, pager includesections = editors, perl, netbasics, basicshell, coreutils [scp] comment = ssh secure copy paths = scp includesections = netbasics, uidbasics -devices = /dev/urandom +devices = /dev/urandom, /dev/null [sftp] comment = ssh secure ftp paths = /usr/lib/sftp-server, /usr/libexec/openssh/sftp-server, /usr/lib/misc/sftp-server, /usr/libexec/sftp-server, /usr/lib/openssh/sftp-server includesections = netbasics, uidbasics devices = /dev/urandom, /dev/null -# on solaris -#paths = /usr/lib/ssh/sftp-server [ssh] comment = ssh secure shell @@ -74,6 +72,10 @@ users = root groups = root includesections = uidbasics +[interactiveshell] +comment = for ssh access to a full shell +includesections = uidbasics, basicshell, terminfo, editors, extendedshell + [midnightcommander] comment = Midnight Commander paths = mc, mcedit, mcview, /usr/share/mc @@ -149,8 +151,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 @@ -158,12 +160,12 @@ paths = cat, chgrp, chmod, chown, cp, date, dd, df, dir, echo, false, ln, ls, mk [wp] comment = WordPress Command Line -paths = wp, /usr/local/bin/php +paths = wp, which, mysqlcheck, tput, unrar, /usr/local/bin/php 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] @@ -173,7 +175,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 @@ -194,7 +196,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/ -includesections = env +includesections = env, logbasics, netbasics [php5_6] comment = php version 5.6 @@ -225,3 +227,17 @@ 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 + +[php8_1] +comment = php version 8.1 +paths = /usr/bin/php8.1, /usr/lib/php/8.1/, /usr/lib/php/20210902/, /usr/share/php/8.1/, /etc/php/8.1/cli/, /etc/php/8.1/mods-available/ +includesections = php_common + +[imagemagick] +comment = ImageMagick needed for php-imagemagick extension +paths = /usr/share/ImageMagick-*, /etc/ImageMagick-*, /usr/lib/*/ImageMagick-* diff --git a/install/tpl/master_cf_amavis.master b/install/tpl/master_cf_amavis.master index 243f28a288dc2e5f27a54f79422a9b5f48571d76..a565f1a1bb50977d8d945e1efcf3b07b641c617d 100644 --- a/install/tpl/master_cf_amavis.master +++ b/install/tpl/master_cf_amavis.master @@ -2,5 +2,5 @@ amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes - -o smtp_bind_address= + -o smtp_bind_address= diff --git a/install/tpl/master_cf_amavis10025.master b/install/tpl/master_cf_amavis10025.master index 6dee892264d3d6f5491fecb104a0242f079cda88..68d4561494b0568c7b4bbac4e6d51ad13c1f66f2 100644 --- a/install/tpl/master_cf_amavis10025.master +++ b/install/tpl/master_cf_amavis10025.master @@ -14,4 +14,6 @@ -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes + -o address_verify_virtual_transport=$virtual_transport + -o address_verify_transport_maps=$transport_maps diff --git a/install/tpl/master_cf_amavis10027.master b/install/tpl/master_cf_amavis10027.master index 640902d52e109a76d206cb72123b7cf1ea65e9d0..d3a07a8bce45d1e2c415f1a6085323faa9066261 100644 --- a/install/tpl/master_cf_amavis10027.master +++ b/install/tpl/master_cf_amavis10027.master @@ -13,7 +13,9 @@ -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtp_send_xforward_command=yes - -o milter_default_action=accept - -o milter_macro_daemon_name=ORIGINATING -o disable_dns_lookups=yes + -o address_verify_virtual_transport=$virtual_transport + -o address_verify_transport_maps=$transport_maps + -o milter_default_action=accept + -o milter_macro_daemon_name=ORIGINATING diff --git a/install/tpl/mysql-virtual_email2email.cf.master b/install/tpl/mysql-virtual_email2email.cf.master index 1ae7f9addcad263574d85b5f50556464859a9794..21d5146f2c129485c237fcc980f06ccf473c8e25 100644 --- a/install/tpl/mysql-virtual_email2email.cf.master +++ b/install/tpl/mysql-virtual_email2email.cf.master @@ -5,5 +5,5 @@ 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} 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}) diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master index 468691b16d46f58a8390755f7ad49e37544fb567..8607735c932b18f95a458ed3dcbd297d7120f8ea 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_relaydomains.cf.master b/install/tpl/mysql-virtual_relaydomains.cf.master index 5ce2db6954429b96b9b4437f2cd9831cb002bc21..c27596d1e75d56e522ad5c40a67399af406cec29 100644 --- a/install/tpl/mysql-virtual_relaydomains.cf.master +++ b/install/tpl/mysql-virtual_relaydomains.cf.master @@ -2,4 +2,4 @@ user = {mysql_server_ispconfig_user} password = {mysql_server_ispconfig_password} dbname = {mysql_server_database} hosts = {mysql_server_ip} -query = select domain from mail_transport where domain = '%s' and active = 'y' and server_id = {server_id} +query = select domain from mail_relay_domain where domain = '%s' and active = 'y' and server_id = {server_id} 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 0000000000000000000000000000000000000000..413607c763f616d65263e86eb063cfcd0f5c5b2a --- /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 0000000000000000000000000000000000000000..3bb4c81330bc071d484446c25a1eb3d40ccf6ebd --- /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/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master index 165bee12311ac84879c7b0bc8555a0e8427287e2..7342cf87faaa978fec482f2f7a67eeeaf092a00a 100644 --- a/install/tpl/mysql-virtual_sender_login_maps.cf.master +++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master @@ -6,3 +6,9 @@ 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}) + 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}) diff --git a/install/tpl/named.conf.options.master b/install/tpl/named.conf.options.master index cd5b0ebc2f614b0ab2881c733de35b42f068823c..4f001960bf1b23917146bae849f23cf80487fb2b 100644 --- a/install/tpl/named.conf.options.master +++ b/install/tpl/named.conf.options.master @@ -20,7 +20,6 @@ options { //======================================================================== dnssec-enable yes; dnssec-validation yes; - dnssec-lookaside auto; version "unknown"; diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index b91d1a16c5f05344b0d6c863e28c4043334d5414..181f4c807e2ee0761e61ef26f3f0589153703ca2 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/install/tpl/opensuse_amavisd_conf.master b/install/tpl/opensuse_amavisd_conf.master index 419eea237c2a81d2bbb939a135ffe0accacfd4c4..7310db9cbf9e45956d5ce6cdbb7aa1dcaf19231d 100644 --- a/install/tpl/opensuse_amavisd_conf.master +++ b/install/tpl/opensuse_amavisd_conf.master @@ -746,7 +746,8 @@ $banned_filename_re = new_RE( $sql_select_policy = 'SELECT *,spamfilter_users.id'. ' FROM spamfilter_users LEFT JOIN spamfilter_policy ON spamfilter_users.policy_id=spamfilter_policy.id'. - ' WHERE spamfilter_users.email IN (%k) ORDER BY spamfilter_users.priority DESC'; + ' WHERE spamfilter_users.email IN (%k) AND spamfilter_users.policy_id != 0'. + ' ORDER BY spamfilter_users.priority DESC'; $sql_select_white_black_list = 'SELECT wb FROM spamfilter_wblist'. diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master index 00ef4faf258cd4d8b1be450a3f631814743e9b8e..bac4c9d13d9955027a403c08781b054547794565 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}' diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master index 7dc715ef69b3dece682951970f0fe1f6c96bacf7..fbbb102e1abcc605a329765ffe64db12e9054ea6 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 = . diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 7d3669853a6ab2ec03fa7ed5264bde0d13a2d509..a98f4223e13ee1d9221885d4ee6775b08de239ce 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -22,11 +22,11 @@ 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 = 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_reject_unlisted_sender = 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 +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 @@ -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, texthash:{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/postfix_custom.conf.master b/install/tpl/postfix_custom.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..4f3f2124c84cef97f30c6d6206c62fdf140b56b2 --- /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. diff --git a/install/tpl/pureftpd_mysql.conf.master b/install/tpl/pureftpd_mysql.conf.master index 484f1054c843555e273f9ac4d4141c43e2f40d13..fe3df27a3a938e4d679a16e96c85d73e8ecffd48 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. diff --git a/install/tpl/rspamd_antivirus.conf.master b/install/tpl/rspamd_antivirus.conf.master index f88d81ac7ce94c881087b93e0d08bc2f1849f429..aa3d2cc9f252970ad246a6cafdefea639438f36e 100644 --- a/install/tpl/rspamd_antivirus.conf.master +++ b/install/tpl/rspamd_antivirus.conf.master @@ -1,8 +1,11 @@ clamav { # If set force this action if any virus is found (default unset: no action is forced) #action = "reject"; - # if `true` only messages with non-image attachments will be checked (default true) + # Scan mime_parts separately - otherwise the complete mail will be transferred to AV Scanner scan_mime_parts = true; + # Scanning Text is suitable for some av scanner databases (e.g. Sanesecurity) + scan_text_mime = true; + scan_image_mime = true; # If `max_size` is set, messages > n bytes in size are not scanned #max_size = 20000000; # symbol to add (add it to metric if you want non-zero weight) @@ -25,6 +28,10 @@ clamav { # symbol_name = "pattern"; JUST_EICAR = "^Eicar-Test-Signature$"; } + patterns_fail { + # symbol_name = "pattern"; + CLAM_PROTOCOL_ERROR = '^unhandled response'; + } # `whitelist` points to a map of IP addresses. Mail from these addresses is not scanned. whitelist = "/etc/rspamd/antivirus.wl"; -} \ No newline at end of file +} 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_arc.conf.master b/install/tpl/rspamd_arc.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..781f83ccb26ae13406725022e3f7adb4d568e851 --- /dev/null +++ b/install/tpl/rspamd_arc.conf.master @@ -0,0 +1,8 @@ +sign_authenticated = false; +sign_inbound = true; +sign_local = false; +use_domain = "recipient"; +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_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master deleted file mode 100644 index 1688d57e217673cdfa50ff36c31f4beb782aae70..0000000000000000000000000000000000000000 --- a/install/tpl/rspamd_classifier-bayes.conf.master +++ /dev/null @@ -1,3 +0,0 @@ -autolearn = [-0.01, 5.00]; -per_user = true; -per_language = true; \ No newline at end of file diff --git a/install/tpl/rspamd_classifier-bayes.conf.master b/install/tpl/rspamd_classifier-bayes.conf.master new file mode 120000 index 0000000000000000000000000000000000000000..b5324722948b7a3df0d5bd78d858f95ed6583b52 --- /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 10d89e74952075ce6daa6244ef9dbf5b22fa4a5a..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..ebc6d4ace842401e25e1c48ff73a89d1dc4e11cf --- /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_dkim_whitelist.inc.ispc.master b/install/tpl/rspamd_dkim_whitelist.inc.ispc.master new file mode 100644 index 0000000000000000000000000000000000000000..e9049c3ea89d44a222bf85dac37b32708cbb0295 --- /dev/null +++ b/install/tpl/rspamd_dkim_whitelist.inc.ispc.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/rspamd_dmarc_whitelist.inc.ispc.master b/install/tpl/rspamd_dmarc_whitelist.inc.ispc.master new file mode 100644 index 0000000000000000000000000000000000000000..498fbc971f4e240f786b019da22a512c8a0d8336 --- /dev/null +++ b/install/tpl/rspamd_dmarc_whitelist.inc.ispc.master @@ -0,0 +1,8 @@ +# Domain whitelist via valid DMARC policy (aligned SPF and/or aligned DKIM) + +comodo.com +geotrust.com +geotrusteurope.com +howtoforge.com +ispconfig.org + diff --git a/install/tpl/rspamd_greylist.conf.master b/install/tpl/rspamd_greylist.conf.master deleted file mode 100644 index 74ea715a22cc6fa76671fd47a3f1bf89cfe92d49..0000000000000000000000000000000000000000 --- 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_milter_headers.conf.master b/install/tpl/rspamd_milter_headers.conf.master index d399bbf4ecc37e39ff900260a4884335767e9957..c9ef9fa2d0a517602706b54d37626517e23df285 100644 --- a/install/tpl/rspamd_milter_headers.conf.master +++ b/install/tpl/rspamd_milter_headers.conf.master @@ -1,2 +1,13 @@ -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", "remove-headers"]; +authenticated_headers = ["authentication-results"]; +routines { + remove-headers { + headers { + "X-Spam" = 0; + "X-Spamd-Bar" = 0; + "X-Spam-Level" = 0; + "X-Spam-Status" = 0; + "X-Spam-Flag" = 0; + } + } +} diff --git a/install/tpl/rspamd_mx_check.conf.master b/install/tpl/rspamd_mx_check.conf.master index 0a628f9c8382ee1f0def03883c91b91d7701e625..0c71ecb26b9e5ae295b179851b41896432c3eb83 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 76f8a6d34479f05dfb638d736fdb5c975b31a7a0..9047212cd3b6fc135fbeb37a89b6c7c825d4e52b 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_options.inc.master b/install/tpl/rspamd_options.inc.master deleted file mode 100644 index 69e40365b7dc653b046b6e3cb3ff0539936a816e..0000000000000000000000000000000000000000 --- a/install/tpl/rspamd_options.inc.master +++ /dev/null @@ -1,5 +0,0 @@ -local_addrs = "127.0.0.0/8, ::1"; - -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 0000000000000000000000000000000000000000..7cc72e81b24bd21306280236067c3400c6b61b1a --- /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_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_redis.conf.master b/install/tpl/rspamd_redis.conf.master deleted file mode 100644 index b908af9f5ebe0e23293797e234eb9dd455838a01..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..df7de6da3cc87c905596bf75991fce01c00b9173 --- /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/rspamd_spf_dkim_whitelist.inc.ispc.master b/install/tpl/rspamd_spf_dkim_whitelist.inc.ispc.master new file mode 100644 index 0000000000000000000000000000000000000000..42d5c8fd85577fb807ea52816c57c02517817a57 --- /dev/null +++ b/install/tpl/rspamd_spf_dkim_whitelist.inc.ispc.master @@ -0,0 +1,9 @@ +# 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 is in rspamd's default spf_dkim_whitelist, only needed if strict: +#letsencrypt.org both:1.0 + diff --git a/install/tpl/rspamd_spf_whitelist.inc.ispc.master b/install/tpl/rspamd_spf_whitelist.inc.ispc.master new file mode 100644 index 0000000000000000000000000000000000000000..8eda01c8d6de5db16f42f62be3246e956776bff4 --- /dev/null +++ b/install/tpl/rspamd_spf_whitelist.inc.ispc.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/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.conf.master b/install/tpl/rspamd_users.conf.master deleted file mode 120000 index 3aa7af31851003f5b742ab52de226af706cf7466..0000000000000000000000000000000000000000 --- 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/install/tpl/rspamd_users.conf.master b/install/tpl/rspamd_users.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..ba16bc8b12978d101134ab7058630b7f98f5e2d6 --- /dev/null +++ b/install/tpl/rspamd_users.conf.master @@ -0,0 +1,19 @@ +settings { + authenticated { + priority = 10; + authenticated = yes; + apply "default" { + symbols_disabled = []; + groups_disabled = ["rbl", "spf"]; + } + } + whitelist { + priority = 5; + rcpt = "postmaster"; + rcpt = "hostmaster"; + rcpt = "abuse"; + 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" +} diff --git a/install/tpl/rspamd_users.inc.conf.master b/install/tpl/rspamd_users.inc.conf.master deleted file mode 120000 index 30bb52fd8e22d629bca9e28459d4d04e44e08ea0..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..6b4647a94831a5ba7a9828345504d8353bba7906 --- /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/security_settings.ini.master b/install/tpl/security_settings.ini.master index c135652e17cf15aa650168c206b44ff3725b3345..02b1058074810b1b9bfde9a173f9fb864093c92c 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/install/tpl/server.ini.master b/install/tpl/server.ini.master index 175617605ac2ee7c673099ea7b24ad8edf1403b5..8799e1f34c7efec3ec6e375659ea31b1ef31f833 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -37,9 +37,13 @@ maildir_path=/var/vmail/[domain]/[localpart] homedir_path=/var/vmail maildir_format=maildir dkim_path=/var/lib/amavis/dkim -dkim_strength=1024 +dkim_strength=2048 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 @@ -54,11 +58,13 @@ 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 overquota_notify_onok=n sendmail_path=/usr/sbin/sendmail +rspamd_url= [getmail] getmail_config_dir=/etc/getmail @@ -113,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 @@ -143,9 +151,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 diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master index bbd78e6b3a93066d81d63058cd96917726b9453e..1ac932aea392716d66bddd0d232e95a68632450a 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 @@ -16,6 +17,7 @@ webmail_url=/webmail dkim_path=/var/lib/amavis/dkim smtp_enabled=y smtp_host=localhost +enable_welcome_mail=y [monitor] diff --git a/install/update.php b/install/update.php index c15678486fea95b1d644c0d766ed3875f9ad309d..4639615801635ec03f0ccfa2832999edb9cd1749 100644 --- a/install/update.php +++ b/install/update.php @@ -96,7 +96,11 @@ require_once 'lib/classes/tpl.inc.php'; //** Check for ISPConfig 2.x versions if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) { - die('This software cannot be installed on a server wich runs ISPConfig 2.x.'); + if(is_dir('/home/admispconfig')) { + die('This software cannot be installed on a server which runs ISPConfig 2.x.'); + } else { + die('This software cannot be installed on a server which runs ISPConfig 2.x; the presence of the /root/ispconfig/ directory may indicate an ISPConfig 2.x installation, otherwise you can remove or rename it to continue.'); + } } // Patch is required to reapir latest amavis versions @@ -185,7 +189,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(); @@ -255,6 +258,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') { @@ -361,9 +366,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'); @@ -561,6 +570,9 @@ if(!$issue_asked) { } } +// update acme.sh if installed +$inst->update_acme(); + $inst->install_ispconfig(); // Cleanup diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php index 631bd430dafb6cb4a67d2e10d11c383ee4208493..ee4713cd98981ea80e10146d3c1ddedb822ed5a8 100755 --- a/interface/lib/app.inc.php +++ b/interface/lib/app.inc.php @@ -126,12 +126,15 @@ class app { array($this->session, 'destroy'), array($this->session, 'gc')); + ini_set('session.cookie_httponly', true); + @ini_set('session.cookie_samesite', 'Lax'); + session_start(); //* Initialize session variables if(!isset($_SESSION['s']['id']) ) $_SESSION['s']['id'] = session_id(); - if(empty($_SESSION['s']['theme'])) $_SESSION['s']['theme'] = $conf['theme']; - if(empty($_SESSION['s']['language'])) $_SESSION['s']['language'] = $conf['language']; + if(empty($_SESSION['s']['theme'])) $_SESSION['s']['theme'] = $this->_conf['theme']; + if(empty($_SESSION['s']['language'])) $_SESSION['s']['language'] = $this->_conf['language']; } } diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php index feab66cd936bbbbb8df15d49e39c9564fb13e6b0..cd9c333b22040081932c4d8a70902c2809ef1e48 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/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 4d4c011fb5e5e4b06bed617601bd7bac42f345d8..02d573a77812258d68dbd3716f24f5b2fb85234f 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -528,6 +528,117 @@ 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/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php index fbf5f84dcae2f0d8104f1cb540c66d5a69dadf49..f5aa35957753ec1c6ff65d6a9eb555cff747065e 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/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php index 81fe1daae7d2b960f3d93a5c5cdfaf80108918e0..0b98dc9ec0b2c8a9a42ba11187a4962014243f8c 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/lib/classes/quota_lib.inc.php b/interface/lib/classes/quota_lib.inc.php index 3bae97f046ada93cb7c701dfb5d52ffa58e7ad8f..b02cdea9949fb92c23451a18f49b2377a3d23d4c 100644 --- a/interface/lib/classes/quota_lib.inc.php +++ b/interface/lib/classes/quota_lib.inc.php @@ -2,8 +2,8 @@ class quota_lib { public function get_quota_data($clientid = null, $readable = true) { - global $app; - + global $app; + $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC"); $monitor_data = array(); if(is_array($tmp_rec)) { @@ -12,10 +12,10 @@ class quota_lib { } } //print_r($monitor_data); - + // select all websites or websites belonging to client $sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'".(($clientid != null)?" AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)":'') . " ORDER BY domain", $clientid); - + //print_r($sites); if(is_array($sites) && !empty($sites)){ for($i=0;$i $sites[$i]['used'][1]){ $sites[$i]['used'] = $sites[$i]['used'][0]; @@ -35,13 +35,13 @@ class quota_lib { if (!is_numeric($sites[$i]['soft'])) $sites[$i]['soft']=$sites[$i]['soft'][1]; if (!is_numeric($sites[$i]['hard'])) $sites[$i]['hard']=$sites[$i]['hard'][1]; if (!is_numeric($sites[$i]['files'])) $sites[$i]['files']=$sites[$i]['files'][1]; - + $sites[$i]['used_raw'] = $sites[$i]['used']; $sites[$i]['soft_raw'] = $sites[$i]['soft']; $sites[$i]['hard_raw'] = $sites[$i]['hard']; $sites[$i]['files_raw'] = $sites[$i]['files']; $sites[$i]['used_percentage'] = ($sites[$i]['soft'] > 0 && $sites[$i]['used'] > 0 ? round($sites[$i]['used'] * 100 / $sites[$i]['soft']) : 0); - + if ($readable) { // colours $sites[$i]['display_colour'] = '#000000'; @@ -52,31 +52,31 @@ class quota_lib { } if($used_ratio >= 0.8) $sites[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $sites[$i]['display_colour'] = '#cc0000'; - + if($sites[$i]['used'] > 1024) { $sites[$i]['used'] = round($sites[$i]['used'] / 1024, 1).' MB'; } else { if ($sites[$i]['used'] != '') $sites[$i]['used'] .= ' KB'; } - + if($sites[$i]['soft'] > 1024) { $sites[$i]['soft'] = round($sites[$i]['soft'] / 1024, 1).' MB'; } else { $sites[$i]['soft'] .= ' KB'; } - + if($sites[$i]['hard'] > 1024) { $sites[$i]['hard'] = round($sites[$i]['hard'] / 1024, 1).' MB'; } else { $sites[$i]['hard'] .= ' KB'; } - + if($sites[$i]['soft'] == " KB") $sites[$i]['soft'] = $app->lng('unlimited_txt'); if($sites[$i]['hard'] == " KB") $sites[$i]['hard'] = $app->lng('unlimited_txt'); - + if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = $app->lng('unlimited_txt'); if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = $app->lng('unlimited_txt'); - + /* if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B'; if(!strstr($sites[$i]['soft'],'M') && !strstr($sites[$i]['soft'],'K')) $sites[$i]['soft'].= ' B'; @@ -86,35 +86,35 @@ class quota_lib { else { if (empty($sites[$i]['soft'])) $sites[$i]['soft'] = -1; if (empty($sites[$i]['hard'])) $sites[$i]['hard'] = -1; - + if($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') $sites[$i]['soft'] = -1; if($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') $sites[$i]['hard'] = -1; } } } - + return $sites; } - + public function get_trafficquota_data($clientid = null, $lastdays = 0) { global $app; - + $traffic_data = array(); - + // select vhosts (belonging to client) if($clientid != null){ $sql_where = " AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)"; } $sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')".$sql_where, $clientid); - + $hostnames = array(); $traffic_data = array(); - + foreach ($sites as $site) { $hostnames[] = $site['domain']; $traffic_data[$site['domain']]['domain_id'] = $site['domain_id']; } - + // fetch all traffic-data of selected vhosts if (!empty($hostnames)) { $tmp_year = date('Y'); @@ -129,7 +129,7 @@ class quota_lib { foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['this_year'] = $tmp_rec['t']; } - + $tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); $tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); // Last Month @@ -137,14 +137,14 @@ class quota_lib { foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['last_month'] = $tmp_rec['t']; } - + $tmp_year = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1)); // Last Year $tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE YEAR(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $hostnames); foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['last_year'] = $tmp_rec['t']; } - + if (is_int($lastdays) && ($lastdays > 0)) { // Last xx Days $tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(traffic_bytes) as t FROM web_traffic WHERE (traffic_date >= DATE_SUB(NOW(), INTERVAL ? DAY)) AND hostname IN ? GROUP BY hostname", $lastdays, $hostnames); @@ -153,29 +153,29 @@ class quota_lib { } } } - + return $traffic_data; } public function get_ftptrafficquota_data($clientid = null, $lastdays = 0) { global $app; - + $traffic_data = array(); - + // select vhosts (belonging to client) if($clientid != null){ $sql_where = " AND sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)"; } $sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias')".$sql_where, $clientid); - + $hostnames = array(); $traffic_data = array(); - + foreach ($sites as $site) { $hostnames[] = $site['domain']; $traffic_data[$site['domain']]['domain_id'] = $site['domain_id']; } - + // fetch all traffic-data of selected vhosts if (!empty($hostnames)) { $tmp_year = date('Y'); @@ -190,7 +190,7 @@ class quota_lib { foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['this_year'] = $tmp_rec['t']; } - + $tmp_year = date('Y', mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); $tmp_month = date('m', mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); // Last Month @@ -198,14 +198,14 @@ class quota_lib { foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['last_month'] = $tmp_rec['t']; } - + $tmp_year = date('Y', mktime(0, 0, 0, date("m"), date("d"), date("Y")-1)); // Last Year $tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(in_bytes) AS ftp_in, SUM(out_bytes) AS ftp_out FROM ftp_traffic WHERE YEAR(traffic_date) = ? AND hostname IN ? GROUP BY hostname", $tmp_year, $hostnames); foreach ($tmp_recs as $tmp_rec) { $traffic_data[$tmp_rec['hostname']]['last_year'] = $tmp_rec['t']; } - + if (is_int($lastdays) && ($lastdays > 0)) { // Last xx Days $tmp_recs = $app->db->queryAllRecords("SELECT hostname, SUM(in_bytes) AS ftp_in, SUM(out_bytes) AS ftp_out FROM ftp_traffic WHERE (traffic_date >= DATE_SUB(NOW(), INTERVAL ? DAY)) AND hostname IN ? GROUP BY hostname", $lastdays, $hostnames); @@ -214,13 +214,13 @@ class quota_lib { } } } - + return $traffic_data; } - + public function get_mailquota_data($clientid = null, $readable = true) { global $app; - + $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC"); $monitor_data = array(); if(is_array($tmp_rec)) { @@ -235,25 +235,25 @@ class quota_lib { } } //print_r($monitor_data); - + // select all email accounts or email accounts belonging to client $emails = $app->db->queryAllRecords("SELECT * FROM mail_user".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : '') . " ORDER BY email", $clientid); - + //print_r($emails); - if(is_array($emails) && !empty($emails)){ + if(is_array($emails) && !empty($emails)) { for($i=0;$ifunctions->htmlentities($emails[$i]['name']); $emails[$i]['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0); - + if (!is_numeric($emails[$i]['used'])) $emails[$i]['used']=$emails[$i]['used'][1]; - + $emails[$i]['quota_raw'] = $emails[$i]['quota']; $emails[$i]['used_raw'] = $emails[$i]['used']; $emails[$i]['used_percentage'] = ($emails[$i]['quota'] > 0 && $emails[$i]['used'] > 0 ? round($emails[$i]['used'] * 100 / $emails[$i]['quota']) : 0); - + if ($readable) { // colours $emails[$i]['display_colour'] = '#000000'; @@ -264,14 +264,14 @@ class quota_lib { } if($used_ratio >= 0.8) $emails[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $emails[$i]['display_colour'] = '#cc0000'; - + if($emails[$i]['quota'] == 0){ $emails[$i]['quota'] = $app->lng('unlimited_txt'); } else { $emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 1).' MB'; } - - + + if($emails[$i]['used'] < 1544000) { $emails[$i]['used'] = round($emails[$i]['used'] / 1024, 1).' KB'; } else { @@ -280,13 +280,13 @@ class quota_lib { } } } - + return $emails; } - + public function get_databasequota_data($clientid = null, $readable = true) { global $app; - + $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'database_size' ORDER BY created DESC"); $monitor_data = array(); if(is_array($tmp_rec)) { @@ -300,21 +300,21 @@ class quota_lib { } } //print_r($monitor_data); - + // select all databases belonging to client $databases = $app->db->queryAllRecords("SELECT * FROM web_database".(($clientid != null)? " WHERE sys_groupid = (SELECT default_group FROM sys_user WHERE client_id=?)" : '') . " ORDER BY database_name", $clientid); - + //print_r($databases); if(is_array($databases) && !empty($databases)){ for($i=0;$i 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used_raw'] * 100 / $databases[$i]['database_quota']) : 0; - + if ($readable) { // colours $databases[$i]['display_colour'] = '#000000'; @@ -325,14 +325,14 @@ class quota_lib { } if($used_ratio >= 0.8) $databases[$i]['display_colour'] = '#fd934f'; if($used_ratio >= 1) $databases[$i]['display_colour'] = '#cc0000'; - + if($databases[$i]['database_quota'] == 0){ $databases[$i]['database_quota'] = $app->lng('unlimited_txt'); } else { $databases[$i]['database_quota'] = $databases[$i]['database_quota'] . ' MB'; } - - + + if($databases[$i]['used'] < 1544000) { $databases[$i]['used'] = round($databases[$i]['used'] / 1024, 1).' KB'; } else { @@ -341,8 +341,8 @@ class quota_lib { } } } - + return $databases; } - + } diff --git a/interface/lib/classes/remote.d/client.inc.php b/interface/lib/classes/remote.d/client.inc.php index 57412e5e192bef9f478c59db36c80db1fc5864f5..5af1592db9347d60932f5f05b44b27d2274a6d05 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 = $app->functions->func_client_cancel($client_id, $params['canceled']); + } + // if locked + if ($params['locked']) { + $result = $app->functions->func_client_lock($client_id, $params['locked']); + } return $affected_rows; } @@ -404,7 +413,7 @@ class remoting_client extends remoting { $app->db->query("DELETE FROM sys_user WHERE client_id = ?", $client_id); //* Delete all records (sub-clients, mail, web, etc....) of this client. - $tables = 'cron,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_traffic,domain,mail_mailinglist,client'; + $tables = 'cron,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_database_user,web_domain,web_traffic,domain,mail_mailinglist,client,spamfilter_wblist'; $tables_array = explode(',', $tables); $client_group_id = $app->functions->intval($client_group['groupid']); if($client_group_id > 1) { diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php index b65dd63c8dcdbdd2b890135e1d42acdc666ec441..67b97e722d32c4be4acd9b990275f3614be6a1a2 100644 --- a/interface/lib/classes/remote.d/dns.inc.php +++ b/interface/lib/classes/remote.d/dns.inc.php @@ -42,11 +42,10 @@ class remoting_dns extends remoting { // DNS Function -------------------------------------------------------------------------------------------------- //* Create Zone with Template - public function dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email) { + public function dns_templatezone_add($session_id, $client_id, $template_id, $domain, $ip, $ns1, $ns2, $email, $ipv6 = '') { 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); @@ -64,6 +63,7 @@ class remoting_dns extends remoting { $tpl_content = $template_record['template']; if($domain != '') $tpl_content = str_replace('{DOMAIN}', $domain, $tpl_content); if($ip != '') $tpl_content = str_replace('{IP}', $ip, $tpl_content); + if($ipv6 != '') $tpl_content = str_replace('{IPV6}', $ipv6, $tpl_content); if($ns1 != '') $tpl_content = str_replace('{NS1}', $ns1, $tpl_content); if($ns2 != '') $tpl_content = str_replace('{NS2}', $ns2, $tpl_content); if($email != '') $tpl_content = str_replace('{EMAIL}', $email, $tpl_content); @@ -249,7 +249,7 @@ class remoting_dns extends remoting { return false; } - if(!preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9\-]{2,63}$/', $origin)){ + if(!preg_match('/^[\w\.\-]{1,64}\.[a-zA-Z0-9\-]{2,63}$/', $origin)){ throw new SoapFault('no_domain_found', 'Invalid domain name.'); return false; } @@ -514,6 +514,29 @@ class remoting_dns extends remoting { return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'HINFO'); } + + // ---------------------------------------------------------------------------------------------------------------- + + //* Get record details + public function dns_loc_get($session_id, $primary_id) { + return $this->dns_rr_get($session_id, $primary_id, 'LOC'); + } + + //* Add a record + public function dns_loc_add($session_id, $client_id, $params, $update_serial=false) { + return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'LOC'); + } + + //* Update a record + public function dns_loc_update($session_id, $client_id, $primary_id, $params, $update_serial=false) { + return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'LOC'); + } + + //* Delete a record + public function dns_loc_delete($session_id, $primary_id, $update_serial=false) { + return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'LOC'); + } + // ---------------------------------------------------------------------------------------------------------------- //* Get record details @@ -582,6 +605,28 @@ class remoting_dns extends remoting { // ---------------------------------------------------------------------------------------------------------------- + //* Get record details + public function dns_ds_get($session_id, $primary_id) { + return $this->dns_rr_get($session_id, $primary_id, 'DS'); + } + + //* Add a record + public function dns_ds_add($session_id, $client_id, $params, $update_serial=false) { + return $this->dns_rr_add($session_id, $client_id, $params, $update_serial, 'DS'); + } + + //* Update a record + public function dns_ds_update($session_id, $client_id, $primary_id, $params, $update_serial=false) { + return $this->dns_rr_update($session_id, $client_id, $primary_id, $params, $update_serial, 'DS'); + } + + //* Delete a record + public function dns_ds_delete($session_id, $primary_id, $update_serial=false) { + return $this->dns_rr_delete($session_id, $primary_id, $update_serial, 'DS'); + } + + // ---------------------------------------------------------------------------------------------------------------- + //* Get record details public function dns_ptr_get($session_id, $primary_id) { return $this->dns_rr_get($session_id, $primary_id, 'PTR'); diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php index c4582c634e43824d632881b2496b5a71930c3ba9..cad598043593bdddb82befe954ab665e428b2528 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; } @@ -663,7 +663,7 @@ class remoting_mail extends remoting { return $app->remoting_lib->getDataRecord($primary_id); } - //* biała lista e-mail + //* add spamfilter whitelist entry public function mail_spamfilter_whitelist_add($session_id, $client_id, $params) { if (!$this->checkPerm($session_id, 'mail_spamfilter_whitelist_add')) @@ -763,7 +763,7 @@ class remoting_mail extends remoting { return $app->remoting_lib->getDataRecord($primary_id); } - //* filtr spamu użytkowników e-mail + //* Add new spamfilter_users public function mail_spamfilter_user_add($session_id, $client_id, $params) { if (!$this->checkPerm($session_id, 'mail_spamfilter_user_add')) @@ -1110,4 +1110,4 @@ class remoting_mail extends remoting { } -?> +?> \ No newline at end of file diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index 751edcf024ce8d70b157bf74af4e2b45e2ac859c..bc75fee36b3a9f16cf476bb6b04e1d8c163ddf17 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -85,10 +85,20 @@ class remoting { //* Delete old remoting sessions $sql = "DELETE FROM remote_session WHERE tstamp < UNIX_TIMESTAMP()"; $app->db->query($sql); + + //* Check for max. login attempts + $ip_md5 = md5($_SERVER['REMOTE_ADDR']); + $sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND `login_time` > (NOW() - INTERVAL 5 MINUTE) LIMIT 1"; + $alreadyfailed = $app->db->queryOneRecord($sql, $ip_md5); + + if($alreadyfailed['times'] >= 10) { + throw new SoapFault('login_failure_limit', 'The login failure limit has been reached.'); + return false; + } if($client_login == true) { $sql = "SELECT * FROM sys_user WHERE USERNAME = ?"; - $user = $app->db->queryOneRecord($sql, $username); + $user = $app->db->queryOneRecord($sql, (string)$username); if($user) { $saved_password = stripslashes($user['passwort']); @@ -104,6 +114,16 @@ class remoting { } } } else { + if(!$alreadyfailed['times'] ) + { + //* user login the first time wrong + $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; + $app->db->query($sql, $ip_md5); + } elseif($alreadyfailed['times'] >= 1) { + //* update times wrong + $sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? ORDER BY `login_time` DESC LIMIT 1"; + $app->db->query($sql, $ip_md5); + } throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); } if($user['active'] != 1) { @@ -119,22 +139,41 @@ class remoting { //* Create a remote user session //srand ((double)microtime()*1000000); - $remote_session = md5(mt_rand().uniqid('ispco')); + $remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).sha1(mt_rand().uniqid('ispco',true)); $remote_userid = $user['userid']; $remote_functions = ''; $tstamp = time() + $this->session_timeout; - $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp' - .') VALUES (?, ?, ?, 1, $tstamp)'; - $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); + $ip = $_SERVER['REMOTE_ADDR']; + $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp,remote_ip' + .') VALUES (?, ?, ?, 1, ?, ?)'; + $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp,$ip); + + //* Delete login attempts after successful login + $sql = "DELETE FROM `attempts_login` WHERE `ip`=?"; + $app->db->query($sql, $ip_md5); + return $remote_session; } else { - $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = md5(?)"; - $remote_user = $app->db->queryOneRecord($sql, $username, $password); - if($remote_user['remote_userid'] > 0) { + $sql = "SELECT * FROM remote_user WHERE remote_username = ?"; + $remote_user = $app->db->queryOneRecord($sql, (string)$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), (string)$username); + } else { + $remote_user = null; + } + } + 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) { - 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); @@ -157,9 +196,9 @@ class remoting { if(trim($remote_user['remote_ips']) == '') { $remote_allowed=true; } else { - $ip = inet_pton($_SERVER['REMOTE_ADDR']); + $ip_bin = inet_pton($ip); foreach($allowed_ips as $allowed) { - if($ip == inet_pton(trim($allowed))) { + if($ip_bin == inet_pton(trim($allowed))) { $remote_allowed=true; break; } @@ -169,18 +208,35 @@ 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')); + $remote_session = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,1).sha1(mt_rand().uniqid('ispco',true)); $remote_userid = $remote_user['remote_userid']; $remote_functions = $remote_user['remote_functions']; $tstamp = time() + $this->session_timeout; - $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' - .') VALUES (?, ?, ?, ?)'; - $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); + $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp,remote_ip' + .') VALUES (?, ?, ?, ?, ?)'; + $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp, $ip); + + //* Delete login attempts after successful login + $sql = "DELETE FROM `attempts_login` WHERE `ip`=?"; + $app->db->query($sql, $ip_md5); + return $remote_session; } else { + + if(!$alreadyfailed['times'] ) + { + //* user login the first time wrong + $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; + $app->db->query($sql, $ip_md5); + } elseif($alreadyfailed['times'] >= 1) { + //* update times wrong + $sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? ORDER BY `login_time` DESC LIMIT 1"; + $app->db->query($sql, $ip_md5); + } + throw new SoapFault('login_failed', 'The login failed. Username or password wrong.'); return false; } @@ -199,7 +255,7 @@ class remoting { } $sql = "DELETE FROM remote_session WHERE remote_session = ?"; - if($app->db->query($sql, $session_id) != false) { + if($app->db->query($sql, (string)$session_id) != false) { return true; } else { return false; @@ -368,22 +424,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); @@ -509,12 +565,61 @@ class remoting { throw new SoapFault('session_id_empty', 'The SessionID is empty.'); return false; } + + if(!is_string($session_id)) { + throw new SoapFault('session_id_nostring', 'Wrong SessionID datatype.'); + return false; + } + + $ip_md5 = md5($_SERVER['REMOTE_ADDR']); + $sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND `login_time` > (NOW() - INTERVAL 5 MINUTE) LIMIT 1"; + $alreadyfailed = $app->db->queryOneRecord($sql, $ip_md5); + + if($alreadyfailed['times'] >= 10) { + throw new SoapFault('session_failure_limit', 'The Session failure limit has been reached.'); + return false; + } $sql = "SELECT * FROM remote_session WHERE remote_session = ? AND tstamp >= UNIX_TIMESTAMP()"; - $session = $app->db->queryOneRecord($sql, $session_id); + $session = $app->db->queryOneRecord($sql, (string)$session_id); + + if(!is_array($session)) { + if(!$alreadyfailed['times'] ) + { + //* user login the first time wrong + $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; + $app->db->query($sql, $ip_md5); + } elseif($alreadyfailed['times'] >= 1) { + //* update times wrong + $sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? ORDER BY `login_time` DESC LIMIT 1"; + $app->db->query($sql, $ip_md5); + } + + throw new SoapFault('session_does_not_exist', 'The Session is expired or does not exist.'); + return false; + } + + $ip = $_SERVER['REMOTE_ADDR']; + if($session['remote_ip'] != $ip) { + throw new SoapFault('session_ip_mismatch', 'Session IP mismatch.'); + return false; + } + if($session['remote_userid'] > 0) { return $session; } else { + + if(!$alreadyfailed['times'] ) + { + //* user login the first time wrong + $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; + $app->db->query($sql, $ip_md5); + } elseif($alreadyfailed['times'] >= 1) { + //* update times wrong + $sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` < NOW() ORDER BY `login_time` DESC LIMIT 1"; + $app->db->query($sql, $ip_md5); + } + throw new SoapFault('session_does_not_exist', 'The Session is expired or does not exist.'); return false; } @@ -546,7 +651,7 @@ class remoting { return false; } } - + /** Gets a list of all servers @param int session_id diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php index 6436e6e792a04aba37ccc56864dc55134f459673..c496cb7e2233eb9fa85ad22eed9ce5faaa35b7d5 100644 --- a/interface/lib/classes/remoting_lib.inc.php +++ b/interface/lib/classes/remoting_lib.inc.php @@ -232,7 +232,7 @@ class remoting_lib extends tform_base { if(@is_numeric($primary_id)) { if($primary_id > 0) { // Return a single record - return parent::getDataRecord($primary_id); + return parent::getDataRecord(intval($primary_id)); } elseif($primary_id == -1) { // Return a array with all records $sql = "SELECT * FROM ??"; @@ -255,8 +255,8 @@ class remoting_lib extends tform_base { } else { $sql_where .= "?? = ? AND "; } - $params[] = $key; - $params[] = $val; + $params[] = (string)$key; + $params[] = (string)$val; } $sql_where = substr($sql_where, 0, -5); if($sql_where == '') $sql_where = '1'; diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php index 3e93cd4314faded0b1f32e7a0e0b094a183de693..55247621a39cff22e272dfbe22fcaa1fe57e209d 100644 --- a/interface/lib/classes/session.inc.php +++ b/interface/lib/classes/session.inc.php @@ -70,9 +70,9 @@ class session { function read ($session_id) { if($this->timeout > 0) { - $rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ? AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL ? MINUTE))", $session_id, $this->timeout); + $rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ? AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL ? MINUTE))", (string)$session_id, $this->timeout); } else { - $rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ?", $session_id); + $rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = ?", (string)$session_id); } if (is_array($rec)) { @@ -91,18 +91,18 @@ class session { // Dont write session_data to DB if session data has not been changed after reading it. if(isset($this->session_array['session_data']) && $this->session_array['session_data'] != '' && $this->session_array['session_data'] == $session_data) { - $this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = ?", $session_id); + $this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = ?", (string)$session_id); return true; } if (@$this->session_array['session_id'] == '') { $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),?,?)"; - $this->db->query($sql, $session_id, $session_data, ($this->permanent ? 'y' : 'n')); + $this->db->query($sql, (string)$session_id, $session_data, ($this->permanent ? 'y' : 'n')); } else { $sql = "UPDATE sys_session SET last_updated = NOW(), session_data = ?" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = ?"; - $this->db->query($sql, $session_data, $session_id); + $this->db->query($sql, $session_data, (string)$session_id); } @@ -112,7 +112,7 @@ class session { function destroy ($session_id) { $sql = "DELETE FROM sys_session WHERE session_id = ?"; - $this->db->query($sql, $session_id); + $this->db->query($sql, (string)$session_id); return true; } diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 72ddb4b6ae3e3633aeb3fdbf93e90ffbb90a07dd..cfaf0958d5f5ed39f4d90147501fc871807bec9d 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/lib/classes/tools_monitor.inc.php b/interface/lib/classes/tools_monitor.inc.php index 7a5efea27989c9c05746a408d329c7a363b4d50a..07fc5b07be105ddc35256074720e0c2daeaad608 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").'

'; } diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php index 48759286a865b5e9b9b79d1f641a86931aa6fdbf..15d670d84a4162057d19cee22ac38fe1e85361e0 100644 --- a/interface/lib/classes/validate_dns.inc.php +++ b/interface/lib/classes/validate_dns.inc.php @@ -283,33 +283,57 @@ 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 + $subnet = ''; + $ip = trim($field_value); + if(strpos($ip, '/') !== false) { + list($ip, $subnet) = explode('/', $ip, 2); + $ip = trim($ip); + } 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 (!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"; + } + } + elseif ($subnet < 1 || $subnet > 32) { + $errmsg = $validator['errmsg']; + $errorMessage .= $app->tform->lng($errmsg)."
\r\n"; + } + } } } return $errorMessage; diff --git a/interface/lib/classes/validate_mail_relay_domain.inc.php b/interface/lib/classes/validate_mail_relay_domain.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..44e13998a4af1ed529c02e62ffd27dae582ccb75 --- /dev/null +++ b/interface/lib/classes/validate_mail_relay_domain.inc.php @@ -0,0 +1,61 @@ + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +class validate_mail_relay_domain { + + function get_error($errmsg) { + global $app; + + if(isset($app->tform->wordbook[$errmsg])) { + return $app->tform->wordbook[$errmsg]."
\r\n"; + } else { + return $errmsg."
\r\n"; + } + } + + /* Validator function for checking the 'domain' of a mail relay domain */ + function validate_domain($field_name, $field_value, $validator) { + global $app, $conf; + + if(isset($app->remoting_lib->primary_id)) { + $id = $app->remoting_lib->primary_id; + } else { + $id = $app->tform->primary_id; + } + + // mail_relay_domain.domain must be unique per server + $sql = "SELECT relay_domain_id, domain FROM mail_relay_domain WHERE domain = ? AND server_id = ? AND relay_domain_id != ?"; + $domain_check = $app->db->queryOneRecord($sql, $field_value, $app->tform_actions->dataRecord['server_id'], $id); + + if($domain_check) return $this->get_error('domain_error_unique'); + } + +} diff --git a/interface/lib/classes/validate_mail_transport.inc.php b/interface/lib/classes/validate_mail_transport.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..6b47d953030cb2274ed34ed598231336f940fbc9 --- /dev/null +++ b/interface/lib/classes/validate_mail_transport.inc.php @@ -0,0 +1,61 @@ + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +class validate_mail_transport { + + function get_error($errmsg) { + global $app; + + if(isset($app->tform->wordbook[$errmsg])) { + return $app->tform->wordbook[$errmsg]."
\r\n"; + } else { + return $errmsg."
\r\n"; + } + } + + /* Validator function for checking the 'domain' of a mail transport */ + function validate_domain($field_name, $field_value, $validator) { + global $app, $conf; + + if(isset($app->remoting_lib->primary_id)) { + $id = $app->remoting_lib->primary_id; + } else { + $id = $app->tform->primary_id; + } + + // mail_transport.domain (could also be an email address) must be unique per server + $sql = "SELECT transport_id, domain FROM mail_transport WHERE domain = ? AND server_id = ? AND transport_id != ?"; + $domain_check = $app->db->queryOneRecord($sql, $field_value, $app->tform_actions->dataRecord['server_id'], $id); + + if($domain_check) return $this->get_error('domain_error_unique'); + } + +} diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php index ccda3717e1ed7a3857e6f23939cb807c54c0b870..c492680513e0553fe00499adf670725a714d6fc7 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, ... @@ -163,4 +159,7 @@ define('LOGLEVEL_DEBUG', 0); define('LOGLEVEL_WARN', 1); define('LOGLEVEL_ERROR', 2); +//** Admin IP whitelist file +$conf['admin_ip_whitelist_file'] = '/usr/local/ispconfig/security/admin_ip.whitelist'; + ?> diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng index 2763f8e82b62ca71763dcba6434898d7eb1f1fac..c2bc19a6b9f483c11d8fe2e5bcc48ac2af5ef109 100644 --- a/interface/lib/lang/ar.lng +++ b/interface/lib/lang/ar.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng index 94dfaa8ad19b9f45499558418abcb46ea7cb49de..e0a0bfcdaba846f50de030d2bc1c07d7849eb154 100644 --- a/interface/lib/lang/bg.lng +++ b/interface/lib/lang/bg.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Изтрий XMPP потребител'; $wb['unlimited_txt'] = 'Неограничен'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng index e47df8250d24614216a07587ee96874ad4d9426c..7e78ddaf364953e5d0f567aa6bf63384c8ef513b 100644 --- a/interface/lib/lang/br.lng +++ b/interface/lib/lang/br.lng @@ -172,3 +172,4 @@ $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de cód $wb['unlimited_txt'] = 'Ilimitado'; $wb['server_id_0_error_txt'] = 'Por favor, selecione um servidor válido. O ID do servidor deve ser > 0.'; $wb['datalog_changes_close_txt'] = 'Fechar'; +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng index c57185fd108c8efb9df79f46b0b1acd786b73844..308aba545bfb2fffbfdb63b2076988f51e91f7fa 100644 --- a/interface/lib/lang/ca.lng +++ b/interface/lib/lang/ca.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Illimité'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng index 04ad86178c2f46e50b7f9b0fd1e5015c0b72de02..84ce72a4c0bc98a423932e90904306ee9256fcf4 100644 --- a/interface/lib/lang/cz.lng +++ b/interface/lib/lang/cz.lng @@ -172,3 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Smazat XMPP uživatele'; $wb['unlimited_txt'] = 'Neomezený'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng index 11a5e21a5d2ef0f62e26d18627c4b0cab444da93..38e9c2b40c04df1deaea832f89681ea96ed1b5d2 100644 --- a/interface/lib/lang/de.lng +++ b/interface/lib/lang/de.lng @@ -172,4 +172,4 @@ $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel'; $wb['unlimited_txt'] = 'unlimitiert'; $wb['server_id_0_error_txt'] = 'Bitte Server auswählen. Server ID muss > als 0 sein.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng index 9d09f1dc8dd97691652d4f1353d2fc9ae9490300..de52b0e704f00f5c6b9d1808ff09ad6845203aa7 100644 --- a/interface/lib/lang/dk.lng +++ b/interface/lib/lang/dk.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Ubegrænset'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng index 31829d5f937f3b5effcfc0a26974a8298a82cf70..42d991401d696eeef8a1b9e0ed9720438ac70884 100644 --- a/interface/lib/lang/el.lng +++ b/interface/lib/lang/el.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Απεριόριστα'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng index dbffc95b8c9bdcb6a821b6038fa40c72ee35131b..57c8d1f79f88ac69ced6a397e5bb5dd8fe7d5806 100644 --- a/interface/lib/lang/en.lng +++ b/interface/lib/lang/en.lng @@ -173,4 +173,4 @@ $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng index 3a421e7af51352f0c7e1be5b2e8d1bc0b7e6a301..2d120a2b97603a0d962508aa425e9158272c4baf 100644 --- a/interface/lib/lang/es.lng +++ b/interface/lib/lang/es.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Borrar usuario XMPP'; $wb['unlimited_txt'] = 'Ilimitado'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Cerrar'; -?> +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng index f6648e88c6bcc0a07ca3e187f6bf3aea32ce780a..7974914e0e9eab89775f76fdbad6febbbaa166f9 100644 --- a/interface/lib/lang/fi.lng +++ b/interface/lib/lang/fi.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng index 15e8294e0c91aa97a15e19774432a0464a8a5d2c..b4bb837e7df140a132009910c64221a5ab227d3c 100644 --- a/interface/lib/lang/fr.lng +++ b/interface/lib/lang/fr.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Illimité'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng index fdb09cbff53d220195ae9b313dba6aea71c86aad..bef42f1814ce5d93bc603c69d31b3cb630b7faeb 100644 --- a/interface/lib/lang/hr.lng +++ b/interface/lib/lang/hr.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'neograničeno'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng index 8e65d4c97416c77f9964c24afc0d0bbd5e96f3dd..e3913462fe0adc3a0152e4c39425d62bfb634dbf 100644 --- a/interface/lib/lang/hu.lng +++ b/interface/lib/lang/hu.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Korlátlan'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng index 693ca49015657476fd703df309c8a45f8dd2cd4c..aea01a061486780e671c2d12e03f1e95cc18b866 100644 --- a/interface/lib/lang/id.lng +++ b/interface/lib/lang/id.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Tak terbatas'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng index 1333cc907f541947ec262ecedf708e01985281a0..ff08d6f6337a6fdf84ed4b6befc103344e12b1e1 100644 --- a/interface/lib/lang/it.lng +++ b/interface/lib/lang/it.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Elimina utente XMPP'; $wb['unlimited_txt'] = 'illimitati'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Chiudi'; -?> +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng index 2d24f9a1f70ab5bbdbebd7d53927546ffd52153c..7235de393e3c7d4a7878eeb13554b791f048084f 100644 --- a/interface/lib/lang/ja.lng +++ b/interface/lib/lang/ja.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng index 3af436ca485348404bc1c3bde176ac4356b9246f..54e7045e612ff200bad7be702f0ddd74141f3e29 100644 --- a/interface/lib/lang/nl.lng +++ b/interface/lib/lang/nl.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Ongelimiteerd'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Sluiten'; -?> +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng index 4a1cd0384e1c8b5f2042bfc954630fc97ec43a1b..ccd3347324793d50ead081987c6f3d1c49ee55ba 100644 --- a/interface/lib/lang/pl.lng +++ b/interface/lib/lang/pl.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'nielimitowane'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng index 86d4442c42d2f31eb4d6d83359ce2a30db1cc9af..e2dc2f72acba3a877f0463fff46f38b4931641c1 100644 --- a/interface/lib/lang/pt.lng +++ b/interface/lib/lang/pt.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng index 4f032832eb92c4b26c261892e3ca6a1268a42e79..6a9f596a0b74fd64d85099ce0f8b3ed941421407 100644 --- a/interface/lib/lang/ro.lng +++ b/interface/lib/lang/ro.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng index 2d18c9f628a418d3e3232819798e0ff14d0364ca..dca0c7a53e4cb9fc8cfaf82529d6fb6f9358efe8 100644 --- a/interface/lib/lang/ru.lng +++ b/interface/lib/lang/ru.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Удалить пользователя XMP $wb['unlimited_txt'] = 'Безлимитный'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng index 5e8b3c7123a96af9a3e5697bbc3855cea19bc668..2d3c38fd3892654599a4b616b23755062d4d70b0 100644 --- a/interface/lib/lang/se.lng +++ b/interface/lib/lang/se.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Obegränsat'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng index cab3ea1f8f9b8017ca6b92747e5eb5ef062e5640..d8e06d1ab3a1c024260ee1fc3fed89f00f35d8e8 100644 --- a/interface/lib/lang/sk.lng +++ b/interface/lib/lang/sk.lng @@ -172,4 +172,4 @@ $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; $wb['unlimited_txt'] = 'Unlimited'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng index 041c8d71030e856a9e93ba18bb90a145eb4bfbdc..ec5f1bfd930ecd2d3de74f48b3ddcb48f3440511 100644 --- a/interface/lib/lang/tr.lng +++ b/interface/lib/lang/tr.lng @@ -173,4 +173,4 @@ $wb['select_master_directive_snippet_txt'] = 'Ana Komut Parçaları'; $wb['unlimited_txt'] = 'Sınırsız'; $wb['server_id_0_error_txt'] = 'Please select a valid Server. Server ID must be > 0.'; $wb['datalog_changes_close_txt'] = 'Close'; -?> \ No newline at end of file +$wb['non_admin_error'] = 'Requires administrator level permissions'; diff --git a/interface/lib/plugins/mail_mail_domain_plugin.inc.php b/interface/lib/plugins/mail_mail_domain_plugin.inc.php index 598fe74f09bb75c843b4a9a66a322e454a471957..4ff756f44fb2ec1be22c46313b8c7da649128a99 100644 --- a/interface/lib/plugins/mail_mail_domain_plugin.inc.php +++ b/interface/lib/plugins/mail_mail_domain_plugin.inc.php @@ -13,9 +13,10 @@ class mail_mail_domain_plugin { /* This function is called when the plugin is loaded - */ + */ function onLoad() { global $app; + //Register for the events $app->plugin->registerEvent('mail:mail_domain:on_after_insert', 'mail_mail_domain_plugin', 'mail_mail_domain_edit'); $app->plugin->registerEvent('mail:mail_domain:on_after_update', 'mail_mail_domain_plugin', 'mail_mail_domain_edit'); @@ -23,13 +24,13 @@ class mail_mail_domain_plugin { /* Function to create the sites_web_domain rule and insert it into the custom rules - */ + */ function mail_mail_domain_edit($event_name, $page_form) { global $app, $conf; $domain = $app->functions->idn_encode($page_form->dataRecord['domain']); - // make sure that the record belongs to the client group and not the admin group when a dmin inserts it + // make sure that the record belongs to the client group and not the admin group when admin inserts it // also make sure that the user can not delete entry created by an admin if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($page_form->dataRecord["client_group_id"])) { $client_group_id = $app->functions->intval($page_form->dataRecord["client_group_id"]); @@ -64,6 +65,8 @@ class mail_mail_domain_plugin { $app->uses('getconf'); $mail_config = $app->getconf->get_server_config($page_form->dataRecord["server_id"], 'mail'); + $old_domain = $app->functions->idn_encode($page_form->oldDataRecord['domain']); + //* Update the mailboxes $mailusers = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE email like ?", "%@" . $page_form->oldDataRecord['domain']); $sys_groupid = $app->functions->intval((isset($page_form->dataRecord['client_group_id']))?$page_form->dataRecord['client_group_id']:$page_form->oldDataRecord['sys_groupid']); @@ -76,25 +79,164 @@ class mail_mail_domain_plugin { $maildir = str_replace("[domain]", $domain, $mail_config["maildir_path"]); $maildir = str_replace("[localpart]", $mail_parts[0], $maildir); $email = $mail_parts[0].'@'.$domain; + + // update spamfilter_users and spamfilter_wblist if email change + $skip_spamfilter_users_update = false; + if($email != $rec['email']) { + $tmp_olduser = $app->db->queryOneRecord("SELECT id,fullname FROM spamfilter_users WHERE email = ?", $rec['email']); + if($tmp_olduser['id'] > 0) { + $tmp_newuser = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $email); + if($tmp_newuser['id'] > 0) { + // There is a spamfilter_users for both old and new email, we'll update old wblist entries + $tmp_wblist = $app->db->queryAllRecords("SELECT wblist_id FROM spamfilter_wblist WHERE rid = ?", $tmp_olduser['id']); + foreach ($tmp_wblist as $tmp) { + $update_data = array( + 'rid' => $tmp_newuser['id'], + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + $app->db->datalogUpdate('spamfilter_wblist', $update_data, 'wblist_id', $tmp['wblist_id']); + } + + // now delete old spamfilter_users entry + $app->db->datalogDelete('spamfilter_users', 'id', $tmp_olduser['id']); + } else { + $update_data = array( + 'email' => $email, + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + if($tmp_olduser['fullname'] == $app->functions->idn_decode($rec['email'])) { + $update_data['fullname'] = $app->functions->idn_decode($email); + } + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_olduser['id']); + $skip_spamfilter_users_update = true; + + $tmp_wblist = $app->db->queryAllRecords("SELECT wblist_id FROM spamfilter_wblist WHERE rid = ?", $tmp_olduser['id']); + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + foreach ($tmp_wblist as $tmp) { + $app->db->datalogUpdate('spamfilter_wblist', $update_data, 'wblist_id', $tmp['wblist_id']); + } + } + } + + $tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $email); + if($tmp_user["id"] > 0) { + // There is already a record that we will update + if(!$skip_spamfilter_users_update) { + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_user['id']); + } + } else { + // We create a new record + $insert_data = array( + "sys_userid" => $client_user_id, + "sys_groupid" => $sys_groupid, + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', + "sys_perm_other" => '', + "server_id" => $page_form->dataRecord["server_id"], + "priority" => 5, + "policy_id" => 0, + "email" => $email, + "fullname" => $app->functions->idn_decode($email), + "local" => 'Y' + ); + $app->db->datalogInsert('spamfilter_users', $insert_data, 'id'); + } + } + $app->db->datalogUpdate('mail_user', array("maildir" => $maildir, "email" => $email, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailuser_id', $rec['mailuser_id']); + } } //* Update the aliases - $forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $page_form->oldDataRecord['domain'], "%@" . $page_form->oldDataRecord['domain']); + $forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source like ? OR destination like ?", '%@' . $old_domain, '%@' . $old_domain); if(is_array($forwardings)) { foreach($forwardings as $rec) { - $destination = str_replace($page_form->oldDataRecord['domain'], $domain, $rec['destination']); - $source = str_replace($page_form->oldDataRecord['domain'], $domain, $rec['source']); + $destination = str_replace($old_domain, $domain, $rec['destination']); + $source = str_replace($old_domain, $domain, $rec['source']); + + // update spamfilter_users and spamfilter_wblist if source email changes + $skip_spamfilter_users_update = false; + if(strpos($rec['source'],'@'.$old_domain) && $source != $rec['source']) { + $tmp_olduser = $app->db->queryOneRecord("SELECT id,fullname FROM spamfilter_users WHERE email = ?", $rec['source']); + if($tmp_olduser['id'] > 0) { + $tmp_newuser = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $source); + if($tmp_newuser['id'] > 0) { + // There is a spamfilter_users for both old and new email, we'll update old wblist entries + $tmp_wblist = $app->db->queryAllRecords("SELECT wblist_id FROM spamfilter_wblist WHERE rid = ?", $tmp_olduser['id']); + foreach ($tmp_wblist as $tmp) { + $update_data = array( + 'rid' => $tmp_newuser['id'], + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + $app->db->datalogUpdate('spamfilter_wblist', $update_data, 'wblist_id', $tmp['wblist_id']); + } + + // now delete old spamfilter_users entry + $app->db->datalogDelete('spamfilter_users', 'id', $tmp_olduser['id']); + } else { + $update_data = array( + 'email' => $source, + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + if($tmp_olduser['fullname'] == $app->functions->idn_decode($rec['source'])) { + $update_data['fullname'] = $app->functions->idn_decode($source); + } + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_olduser['id']); + $skip_spamfilter_users_update = true; + + $tmp_wblist = $app->db->queryAllRecords("SELECT wblist_id FROM spamfilter_wblist WHERE rid = ?", $tmp_olduser['id']); + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + foreach ($tmp_wblist as $tmp) { + $app->db->datalogUpdate('spamfilter_wblist', $update_data, 'wblist_id', $tmp['wblist_id']); + } + } + } + + + $tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", $source); + if($tmp_user["id"] > 0) { + // There is already a record that we will update + if(!$skip_spamfilter_users_update) { + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_user['id']); + } + } + + } + $app->db->datalogUpdate('mail_forwarding', array("source" => $source, "destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'forwarding_id', $rec['forwarding_id']); } } //* Update the mailinglist - $mailing_lists = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = ?", $page_form->oldDataRecord['domain']); - if(is_array($mailing_lists)) { - foreach($mailing_lists as $rec) { - $app->db->datalogUpdate('mail_mailinglist', array("sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailinglist_id', $rec['mailinglist_id']); + $mailinglists = $app->db->queryAllRecords("SELECT * FROM mail_mailinglist WHERE domain = ?", $old_domain); + if(is_array($mailinglists)) { + foreach($mailinglists as $rec) { + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + 'domain' => $domain, + 'email' => str_replace($old_domain, $domain, $rec['email']), + ); + $app->db->datalogUpdate('mail_mailinglist', $update_data, 'mailinglist_id', $rec['mailinglist_id']); } } @@ -107,25 +249,81 @@ class mail_mail_domain_plugin { } } - if ($page_form->oldDataRecord["domain"] != $domain) { - //* Delete the old spamfilter record - $tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", "@" . $page_form->oldDataRecord["domain"]); - $app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]); - unset($tmp); + // Spamfilter policy + $policy_id = $app->functions->intval($page_form->dataRecord["policy"]); + + // If domain changes, update spamfilter_users + // and fire spamfilter_wblist_update events so rspamd files are rewritten + if ($old_domain != $domain) { + $tmp_users = $app->db->queryOneRecord("SELECT id,fullname FROM spamfilter_users WHERE email LIKE ?", '%@' . $old_domain); + if(is_array($tmp_users)) { + foreach ($tmp_users as $tmp_old) { + $tmp_new = $app->db->queryOneRecord("SELECT id,fullname FROM spamfilter_users WHERE email = ?", '@' . $domain); + if($tmp_new['id'] > 0) { + // There is a spamfilter_users for both old and new domain, we'll update old wblist entries + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + 'rid' => $tmp_new['id'], + ); + $tmp_wblist = $app->db->queryAllRecords("SELECT wblist_id FROM spamfilter_wblist WHERE rid = ?", $tmp_old['id']); + foreach ($tmp_wblist as $tmp) { + $app->db->datalogUpdate('spamfilter_wblist', $update_data, 'wblist_id', $tmp['wblist_id']); + } + + // now delete old spamfilter_users entry + $app->db->datalogDelete('spamfilter_users', 'id', $tmp_old['id']); + + /// and update the new + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + ); + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_old['id']); + } else { + $update_data = array( + 'sys_userid' => $client_user_id, + 'sys_groupid' => $sys_groupid, + 'email' => '@' . $domain, + ); + if($tmp_old['fullname'] == '@' . $old_domain) { + $update_data['fullname'] = '@' . $domain; + } + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_old['id']); + } + } + } } - $app->db->query("UPDATE spamfilter_users SET email=REPLACE(email, ?, ?), sys_userid = ?, sys_groupid = ? WHERE email LIKE ?", $page_form->oldDataRecord['domain'], $domain, $client_user_id, $sys_groupid, "%@" . $page_form->oldDataRecord['domain']); - } // end if domain name changed - - //* Force-update the aliases (required for spamfilter changes) - $forwardings = $app->db->queryAllRecords("SELECT * FROM mail_forwarding WHERE source LIKE ? OR destination LIKE ?", "%@" . $domain, "%@" . $domain); - - if(is_array($forwardings)) { - foreach($forwardings as $rec) { - $app->db->datalogUpdate('mail_forwarding', array("source" => $rec['source']), 'forwarding_id', $rec['forwarding_id'],true); + $tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain); + if(isset($tmp_user['id']) && $tmp_user['id'] > 0) { + // There is already a record that we will update + if($policy_id != $tmp_user['policy_id']) { + $update_data = array( + 'policy_id' => $policy_id, + ); + $app->db->datalogUpdate('spamfilter_users', $update_data, 'id', $tmp_user["id"]); + } + } else { + // We create a new record + $insert_data = array( + "sys_userid" => $client_user_id, + "sys_groupid" => $sys_groupid, + "sys_perm_user" => 'riud', + "sys_perm_group" => 'riud', + "sys_perm_other" => '', + "server_id" => $page_form->dataRecord["server_id"], + "priority" => 5, + "policy_id" => $policy_id, + "email" => '@' . $domain, + "fullname" => '@' . $domain, + "local" => 'Y' + ); + $app->db->datalogInsert('spamfilter_users', $insert_data, 'id'); } - } - + + } // end if domain name changed + } } diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 4f24042b303bca819da67de91ec4ab6c72933b03..a6fe968e4379b625cf9deeaffc6acca62c58eeef 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"; } diff --git a/interface/web/admin/form/dbsync.tform.php b/interface/web/admin/form/dbsync.tform.php index 8a4181b88870045b8b839c686bb67913db67bd6f..b854db81f93238575135def343cc38f603b8a988 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/firewall.tform.php b/interface/web/admin/form/firewall.tform.php index eb7dcb3acf83bf7d603d7a3454fe62b2610b2ee9..90614bac55394582cd661649b72810c32b9d7219 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' diff --git a/interface/web/admin/form/groups.tform.php b/interface/web/admin/form/groups.tform.php index 5bcbe6279f7a82a3e5d49c4b08c67f9e313c7266..6a2b3acb9f82d70bd9def77294cb997870bcc2ec 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 76d747020d3966a7390d141c7df50c2262687764..d36ade42b8637e02a333120e2d57b72ff11ae55f 100644 --- a/interface/web/admin/form/iptables.tform.php +++ b/interface/web/admin/form/iptables.tform.php @@ -1,7 +1,7 @@ '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' => '', @@ -146,6 +146,7 @@ $form["tabs"]['remote_user'] = array ( 'separator' => ';', 'width' => '', 'maxlength' => '', + 'render_inline' => 'n', 'rows' => '5', 'cols' => '30' ) diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index b25785c283a81c85473df47c94860d2227ae07a5..a7947ba147c07e5ee88bb059783aa63cf27eac82 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -34,7 +34,7 @@ */ $form["title"] = "server_config"; -$form["description"] = ""; +//$form["description"] = ""; $form["name"] = "server_config"; $form["action"] = "server_config_edit.php"; $form["db_table"] = "server"; @@ -131,7 +131,7 @@ $form["tabs"]['server'] = array( 'validators' => array( 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'hostname_error_empty'), 1 => array ('type' => 'REGEX', - 'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/', + 'regex' => '/^[\w\.\-]{1,255}\.[a-zA-Z0-9\-]{2,63}$/', 'errmsg'=> 'hostname_error_regex'), ), 'value' => '', @@ -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( @@ -691,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', @@ -717,6 +778,18 @@ $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') + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), //################################# // END Datatable fields //################################# @@ -1021,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', @@ -1033,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', @@ -1790,7 +1887,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 +1901,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' => '', diff --git a/interface/web/admin/form/server_ip.tform.php b/interface/web/admin/form/server_ip.tform.php index d86dbb753568f035144de4e7c087ca1469e570e6..920e55119190a8b77d96a146e50f990704d3619f 100644 --- a/interface/web/admin/form/server_ip.tform.php +++ b/interface/web/admin/form/server_ip.tform.php @@ -65,7 +65,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "server_ip_edit_title"; -$form["description"] = "server_ip_edit_desc"; +//$form["description"] = "server_ip_edit_desc"; $form["name"] = "server_ip"; $form["action"] = "server_ip_edit.php"; $form["db_table"] = "server_ip"; diff --git a/interface/web/admin/form/server_ip_map.tform.php b/interface/web/admin/form/server_ip_map.tform.php index 2374ca0ce0e59d3bb32a4579147472e3cc6bedd4..1f611d1dad8aa6f2b8d241f9c64506607c755c23 100644 --- a/interface/web/admin/form/server_ip_map.tform.php +++ b/interface/web/admin/form/server_ip_map.tform.php @@ -29,7 +29,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ $form["title"] = "server_ip_map_title"; -$form["description"] = "server_ip_map_desc"; +//$form["description"] = "server_ip_map_desc"; $form["name"] = "server_ip_map"; $form["action"] = "server_ip_map_edit.php"; $form["db_table"] = "server_ip_map"; @@ -59,7 +59,7 @@ $form["tabs"]['server_ip_map'] = array ( 'source_ip' => 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 6d443e8d50a939f5807e1ec2c9d08de382e9ba04..2a37a1e6d1e66ecaebe10c8eeef22e77f1c27902 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"; @@ -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/form/software_package.tform.php b/interface/web/admin/form/software_package.tform.php deleted file mode 100644 index b8368d545751d19216fac8c69c588dc62b1cad48..0000000000000000000000000000000000000000 --- 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/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index bbfb921e9a34b6a1969531bf72a8f084ba53c794..bce858b5221a274487ec81b03b0d778b6474c8c5 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"; @@ -267,6 +267,18 @@ $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') + ), + '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', @@ -469,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/form/tpl_default.tform.php b/interface/web/admin/form/tpl_default.tform.php index baa84d7b309ecb999de03f7098a10c5a17f790be..804cfd95423615e36fab4ff5715f2d96275ff50e 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"; diff --git a/interface/web/admin/lib/lang/ar_remote_action.lng b/interface/web/admin/lib/lang/ar_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/ar_remote_action.lng +++ b/interface/web/admin/lib/lang/ar_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index b95b3567e643ade50e58d56385c1a96a27f34ca4..fe494f4bd7a7405edd331a7e01b492422b48dc50 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'; @@ -316,6 +319,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/ar_server_php.lng b/interface/web/admin/lib/lang/ar_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/ar_server_php.lng +++ b/interface/web/admin/lib/lang/ar_server_php.lng @@ -13,5 +13,8 @@ $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/ar_software_package.lng b/interface/web/admin/lib/lang/ar_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 9fa53867bc70f653a4410da5dc70988beebfdcdb..0000000000000000000000000000000000000000 --- 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 f2cbbb2c25776ab5f1794e7102ad264a98144049..0000000000000000000000000000000000000000 --- 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 b7a219ffa8e2f6d389fabdc5386286a24fc2a11a..0000000000000000000000000000000000000000 --- 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 fe7639125cd2634fa809d9a6592e9e9fb21e84bb..0000000000000000000000000000000000000000 --- 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/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng index 7d3df7fbf8ab5092e5ba3f71efa63886fdfb120e..a10274c670519674f336c0406f855cec6df4eb87 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'; @@ -51,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'; @@ -103,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/ar_users_list.lng b/interface/web/admin/lib/lang/ar_users_list.lng index 4f7a7469b020b2d31638c6ed69dd2e40a6b595b6..84869c062694fdd70076f76f84fcdbeb41d86fd8 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!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/bg_remote_action.lng b/interface/web/admin/lib/lang/bg_remote_action.lng index 6925ec260dbfa4b48ac2b93884f0358ef28cb892..8d6e441d852736b08b183efc2b178fabcab91c53 100644 --- a/interface/web/admin/lib/lang/bg_remote_action.lng +++ b/interface/web/admin/lib/lang/bg_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Избери сървър'; $wb['btn_do_txt'] = 'Изпълни действие'; $wb['do_osupdate_caption'] = 'Направете OS - Актуализация на отдалечен сървър'; -$wb['do_osupdate_desc'] = 'Това действие прави за aptitude-y ъпгрейд на избрания от Вас сървър.

ИЗПОЛЗВАШ ТОВА НА ТВОЙ РИСК!'; +$wb['do_osupdate_desc'] = 'Това действие прави за apt-y ъпгрейд на избрания от Вас сървър.

ИЗПОЛЗВАШ ТОВА НА ТВОЙ РИСК!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'Това действие прави ISPConfig 3 обновяване на избрания от Вас сървър.

ИЗПОЛЗВАШ ТОВА НА ТВОЙ РИСК!'; $wb['action_scheduled'] = 'Това действие е насрочено за изпълнение'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index fcd34e729236a8ef04c17c9b5f4e40f03dd56fbc..837d254dac6ed24d0c6e51fcc510d714ebd7ac2e 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/bg_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/bg_server_php.lng +++ b/interface/web/admin/lib/lang/bg_server_php.lng @@ -13,5 +13,8 @@ $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/bg_software_package.lng b/interface/web/admin/lib/lang/bg_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 0c9bd116c37c4378c7e84b41215accb29e06e68f..0000000000000000000000000000000000000000 --- 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 e251c95fbd2a3d9bd3f8d01e883e8111fd489813..0000000000000000000000000000000000000000 --- 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 f5156543451cdbd127b34dfed1798a2c6dc5c58c..0000000000000000000000000000000000000000 --- 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 6471d706143866e7e1d94c76de6470d85cba5056..0000000000000000000000000000000000000000 --- 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 c7fa6e07f5741e21f04f6c78c5bef8eb8f329210..0000000000000000000000000000000000000000 --- 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/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng index f99465e1b643ec04e87776d2dece87988cd79bf0..898020365f07503859375268e1d0d7940c72e513 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/br_remote_action.lng index 5c888618148ca13a9ca97fc62acaa97313a6d29a..84e928dbd9134cf4482133657f611378d8373a4e 100644 --- a/interface/web/admin/lib/lang/br_remote_action.lng +++ b/interface/web/admin/lib/lang/br_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Selecionar servidor'; $wb['btn_do_txt'] = 'Executar ação'; $wb['do_osupdate_caption'] = 'Atualizar sistema operacional no servidor remoto'; -$wb['do_osupdate_desc'] = 'Esta ação fará o comando \'aptitude -y upgrade\' no servidor selecionado.

UTILIZE POR SUA CONTA E RISCO!'; +$wb['do_osupdate_desc'] = 'Esta ação fará o comando \'apt -y upgrade\' no servidor selecionado.

UTILIZE POR SUA CONTA E RISCO!'; $wb['do_ispcupdate_caption'] = 'Atualizar ISPConfig 3 - Atualizar o servidor remoto'; $wb['do_ispcupdate_desc'] = 'Esta ação atualizará o ISPConfig3 no servidor selecionado.

UTILIZE POR SUA CONTA E RISCO!'; $wb['action_scheduled'] = 'A ação foi agendada.'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index 0e8d43ca8e8aec70ac114f5fd0e541917dd94e8c..7c08431fdb01595b9a5bb65fbaf00eac00c25a40 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'; @@ -316,6 +319,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/br_server_php.lng b/interface/web/admin/lib/lang/br_server_php.lng index 6524531be5b48c60366a7a8397a5b628834f5151..d0a1015833f82dfd9c183a1928e02dacfd690e8c 100644 --- a/interface/web/admin/lib/lang/br_server_php.lng +++ b/interface/web/admin/lib/lang/br_server_php.lng @@ -13,6 +13,8 @@ $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/br_software_package.lng b/interface/web/admin/lib/lang/br_software_package.lng deleted file mode 100644 index d26e1d44509e56ecb7c4c55fda24a45eb4c2ea20..0000000000000000000000000000000000000000 --- a/interface/web/admin/lib/lang/br_software_package.lng +++ /dev/null @@ -1,5 +0,0 @@ -
USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a \'apt -y upgrade\' at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index 2e02e31c6bdf2d7da192217840790a6b67cab547..2ced57478adecf979ddbda18878f8b81d51df338 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'; @@ -316,6 +319,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/ca_server_php.lng b/interface/web/admin/lib/lang/ca_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/ca_server_php.lng +++ b/interface/web/admin/lib/lang/ca_server_php.lng @@ -13,5 +13,8 @@ $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/ca_software_package.lng b/interface/web/admin/lib/lang/ca_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 2909d8376e51f4a801bf99fb0e0a3f191558d2a4..0000000000000000000000000000000000000000 --- 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 f2cbbb2c25776ab5f1794e7102ad264a98144049..0000000000000000000000000000000000000000 --- 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 b7a219ffa8e2f6d389fabdc5386286a24fc2a11a..0000000000000000000000000000000000000000 --- 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 fe7639125cd2634fa809d9a6592e9e9fb21e84bb..0000000000000000000000000000000000000000 --- 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/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng index d8bc0e2d48a435b69b1db7584d7e53601491ddf9..68ca245f3dd26e85b9d45701d86f5de19d3de13e 100644 --- a/interface/web/admin/lib/lang/ca_system_config.lng +++ b/interface/web/admin/lib/lang/ca_system_config.lng @@ -24,8 +24,10 @@ $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['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'; @@ -103,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/ca_users_list.lng b/interface/web/admin/lib/lang/ca_users_list.lng index dec5cc2c04f2a98ac737ac7f6aefc743831a1938..fb1c7bc6ddb8acdcf6dc66b9572f516b935fbf63 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!'; ?> diff --git a/interface/web/admin/lib/lang/cz_remote_action.lng b/interface/web/admin/lib/lang/cz_remote_action.lng index c361f6d664d9054a7491b88dc4f088688f09291e..5f7fb604fcbd7e59871dd8397bd77ffc975a4aa3 100644 --- a/interface/web/admin/lib/lang/cz_remote_action.lng +++ b/interface/web/admin/lib/lang/cz_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Zvolit server'; $wb['btn_do_txt'] = 'Provést akci'; $wb['do_osupdate_caption'] = 'Aktualizace operačního systému na vzdáleném serveru.'; -$wb['do_osupdate_desc'] = 'Tato akce provede \"aptitude -y\" aktualizaci na vybraném serveru.

POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !'; +$wb['do_osupdate_desc'] = 'Tato akce provede \"apt -y\" aktualizaci na vybraném serveru.

POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !'; $wb['do_ispcupdate_caption'] = 'Provedení ISPConfig 3 - aktualizace na vzdáleném serveru'; $wb['do_ispcupdate_desc'] = 'Tato akce provede \"ISPConfig 3\" aktualizaci na vašem vybraném serveru.

POUŽITÍ TÉTO AKCE NA VLASTNÍ NEBEZPEČÍ !'; $wb['action_scheduled'] = 'Akce je naplánována na provedení'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index 633db75fbdbb02daa5ddff7d4f4e23c10ba24e75..590a8d9796ecf1e651bc541df9b4f26f434ee022 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'; @@ -316,6 +319,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/cz_server_php.lng b/interface/web/admin/lib/lang/cz_server_php.lng index d955c3b633776afb14db56b142d025a2fb85f1da..c1c67f05ef6673858a11f164aa5a2e0f6d483c0c 100644 --- a/interface/web/admin/lib/lang/cz_server_php.lng +++ b/interface/web/admin/lib/lang/cz_server_php.lng @@ -13,6 +13,8 @@ $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/cz_software_package.lng b/interface/web/admin/lib/lang/cz_software_package.lng deleted file mode 100644 index d4dc8af0b2cf9168ea900b84d92747fa3e091267..0000000000000000000000000000000000000000 --- a/interface/web/admin/lib/lang/cz_software_package.lng +++ /dev/null @@ -1,5 +0,0 @@ -
DIES GESCHIEHT AUF IHRE EIGENE VERANTWORTUNG!'; +$wb['do_osupdate_desc'] = 'Diese Aktion wird ein apt -y upgrade auf dem ausgewählten Server ausführen.

DIES GESCHIEHT AUF IHRE EIGENE VERANTWORTUNG!'; $wb['do_ispcupdate_caption'] = 'ISPConfig 3 Update auf entferntem Server ausführen'; $wb['do_ispcupdate_desc'] = 'Diese Aktion wird ein Update des ISPConfig 3 Systems auf Ihrem ausgewählten Server ausführen.

DIES GESCHIEHT AUF IHRE EIGENE VERANTWORTUNG!'; $wb['action_scheduled'] = 'Die Aktion wurde zur Ausführung vorgemerkt'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index e287b9a622ba535b131ff89973df109f0a6d7478..557d313704a558575ff125d1274cec0cd8438aa1 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'; @@ -316,6 +319,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/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng index f43e79b4af19076cf177201298c3b6988e959b48..b3ad5d991331f2ed1f932f7e271544e3e00f1ce6 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/de_software_package.lng b/interface/web/admin/lib/lang/de_software_package.lng deleted file mode 100644 index 13b3d996c30489a23bf3c02ab9f2935463bf8e5a..0000000000000000000000000000000000000000 --- 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 1ef69d13d32b0fd9cebc50cefc2e3b7b61623513..0000000000000000000000000000000000000000 --- 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 75b7504390489492a4d84de033807463aaef0540..0000000000000000000000000000000000000000 --- 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 242611cd08616fc1159c5dca536282ce672098f8..0000000000000000000000000000000000000000 --- 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 db6f49fd4edd70c55ebc84f05dc84fc704e861ce..0000000000000000000000000000000000000000 --- 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 cf31e88154c60bfcdc82fb9b9f778dbbf737eb9b..0000000000000000000000000000000000000000 --- 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/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng index 4a862a2d4adb5960dca5a816db659b773e563c55..328124f6e72e33c0a0cadb6ab3d0a3b9546ef885 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'; @@ -51,6 +52,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/dk_remote_action.lng index a5366d9175b4bab6be04a30686e6b3f732a70953..53c12f6adfb2d3fe5daf95764f544597f21f4392 100644 --- a/interface/web/admin/lib/lang/dk_remote_action.lng +++ b/interface/web/admin/lib/lang/dk_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Vælg Server(e)'; $wb['btn_do_txt'] = 'Udfør handling'; $wb['do_osupdate_caption'] = 'Udfør OS-Opdatering på fjern server'; -$wb['do_osupdate_desc'] = 'Denne Handling udfør en \'aptitude -y upgrade\' på den valgte server.

BRUG DETTE PÅ EGEN RISIKO!'; +$wb['do_osupdate_desc'] = 'Denne Handling udfør en \'apt -y upgrade\' på den valgte server.

BRUG DETTE PÅ EGEN RISIKO!'; $wb['do_ispcupdate_caption'] = 'Udfør ISPConfig 3 - Opdatering på fjern-server'; $wb['do_ispcupdate_desc'] = 'Denne Handling udfør en ISPConfig 3 opdatering på den valgte server.

BRUG DETTE PÅ EGEN RISIKO!'; $wb['action_scheduled'] = 'Handlingen er planlagt til udførelse'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index 77a29251d5f04bf555efac9dcc375a292ac4ba65..ccf12bc3e2e0bd75d6aabd9452c8bec10cf240b3 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'; @@ -316,6 +319,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/dk_server_php.lng b/interface/web/admin/lib/lang/dk_server_php.lng index ff8586f5ea7b5b9fb50d821c59fb34428d3a3436..db6ef1f98a2f0f2e7955afb872f06583c2a53922 100644 --- a/interface/web/admin/lib/lang/dk_server_php.lng +++ b/interface/web/admin/lib/lang/dk_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/dk_software_package.lng deleted file mode 100644 index 86f45dc91ef21cd0c1f506379c272d5dc71921e9..0000000000000000000000000000000000000000 --- 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 fd9211652c73e2f188f48de99b97f2bff8738cee..0000000000000000000000000000000000000000 --- 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 3fb5399eaecb8a650547e99648e532aa95a6ccfa..0000000000000000000000000000000000000000 --- 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 2c506cdc6b6d9decbf8dda1827104b17c0aaf6b7..0000000000000000000000000000000000000000 --- 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 aa33919cbd6b8e088b3e5dd5fc9b371b97c405f7..0000000000000000000000000000000000000000 --- 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 8a8e8686af47c83de5cb82922cac2bd30f4709a9..0000000000000000000000000000000000000000 --- 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/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng index eb96004421481829f5d4ae3d2e3b9c8568ec0637..71533e77d0469e26624c1fd33b9c09e1028163dd 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'; @@ -48,6 +49,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/el_remote_action.lng index ff63fd59354a2d9870b3beda773a9ada68baf985..18363323251764dd4f1e2bf6d29eca23b3bb2ec5 100644 --- a/interface/web/admin/lib/lang/el_remote_action.lng +++ b/interface/web/admin/lib/lang/el_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Επιλογή Server'; $wb['btn_do_txt'] = 'Εκτέλεση ενέργειας'; $wb['do_osupdate_caption'] = 'Εκκίνηση αναβάθμισης λειτουργικού συστήματος στον απομακρυσμένο server'; -$wb['do_osupdate_desc'] = 'Αυτή η ενέργεια εκτελεί την εντολή aptitude -y upgrade στον επιλεγμένο σας server.

ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ ΤΟ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ!'; +$wb['do_osupdate_desc'] = 'Αυτή η ενέργεια εκτελεί την εντολή apt -y upgrade στον επιλεγμένο σας server.

ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ ΤΟ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ!'; $wb['do_ispcupdate_caption'] = 'Εκκίνηση αναβάθμισης ISPConfig 3 στον απομακρυσμένο server'; $wb['do_ispcupdate_desc'] = 'Αυτή η ενέργεια κάνει αναβάθμιση στο ISPConfig3 στον επιλεγμένο σας server.

ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ ΤΟ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ!'; $wb['action_scheduled'] = 'Η ενέργεια προγραμματίστηκε για εκτέλεση'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index 091362450336ed29a7f1722e0654a1b2742fcff8..468560c7513e1aa4d72c735d40076caa3d619f81 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/el_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/el_server_php.lng +++ b/interface/web/admin/lib/lang/el_server_php.lng @@ -13,5 +13,8 @@ $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/el_software_package.lng b/interface/web/admin/lib/lang/el_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5e3d0fd4022ce48fac39c9379b5de0774c46510b..0000000000000000000000000000000000000000 --- 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 1553ea1ceafeca4b43be5bd163c9b3fc47ae9864..0000000000000000000000000000000000000000 --- 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 3b12d3fd874fd4e1945f6ce2f234e2f3d619ae24..0000000000000000000000000000000000000000 --- 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 deb896a719c990ba6df4b00d5114b8dc1ac62f43..0000000000000000000000000000000000000000 --- 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 42100d0c8903ad84f65f8f5137feee995b83d3d5..0000000000000000000000000000000000000000 --- 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/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng index 68e10e37fcf941463c9c7a63ff15bedd32b7e491..f64df47bc949ca1bb6ca3e571994878e3f79dd51 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 '; @@ -51,6 +52,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/en_remote_action.lng index 963eb473faa6e6b0ea4c5e23fe2122a0916392fe..16b45fada9adeb35902c30d5d84cc473af855fa1 100644 --- a/interface/web/admin/lib/lang/en_remote_action.lng +++ b/interface/web/admin/lib/lang/en_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a "aptitude -y upgrade" at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a "apt -y upgrade" at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 3df6f02dfb259848bd0acf9bca6c82fcb4d68858..0d09d4222a320288ed9a31fc2fd4d65eff564de5 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'; @@ -324,6 +327,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_php.lng b/interface/web/admin/lib/lang/en_server_php.lng index 9d322804bb689273678d0733d9ba6e23c738b6c6..491be1aae2ecd613527e187940420d748137ed86 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/en_software_package.lng b/interface/web/admin/lib/lang/en_software_package.lng deleted file mode 100644 index 5850719890ce87b8f5bc29f3356493f8316e9e85..0000000000000000000000000000000000000000 --- 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 d6ec373abb7aafe007f477c5f25a957bf521b4a7..0000000000000000000000000000000000000000 --- 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 2909d8376e51f4a801bf99fb0e0a3f191558d2a4..0000000000000000000000000000000000000000 --- 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 38c163507edd0eb8db509aba945cbb813275dabe..0000000000000000000000000000000000000000 --- 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 15b16e2d5b59473324eff98853281749bedf5b3d..0000000000000000000000000000000000000000 --- 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 fe7639125cd2634fa809d9a6592e9e9fb21e84bb..0000000000000000000000000000000000000000 --- 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/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng index 4493913fb0f04904205a6e5019b4c5a1be59e24f..2f32d4feaaf743d705907aeaa3b3cf8b15027820 100644 --- a/interface/web/admin/lib/lang/en_system_config.lng +++ b/interface/web/admin/lib/lang/en_system_config.lng @@ -24,11 +24,9 @@ $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'; -$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 +53,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'; @@ -107,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/en_users_list.lng b/interface/web/admin/lib/lang/en_users_list.lng index cc978c78d0479757f9ea1fa7a6bf7ec44291e082..fb1c7bc6ddb8acdcf6dc66b9572f516b935fbf63 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!'; +?> diff --git a/interface/web/admin/lib/lang/es_remote_action.lng b/interface/web/admin/lib/lang/es_remote_action.lng index d259d33a15803951c73a5554f534a4bf59fe15b7..0e7997d049eca881c5644e528a001f8348687afe 100644 --- a/interface/web/admin/lib/lang/es_remote_action.lng +++ b/interface/web/admin/lib/lang/es_remote_action.lng @@ -4,7 +4,7 @@ $wb['btn_do_txt'] = 'Ejecutar acción'; $wb['do_ispcupdate_caption'] = 'Realizar actualización de ISPConfig 3 en el servidor remoto'; $wb['do_ispcupdate_desc'] = 'Esta acción realizará una actualización de ISPConfig 3 en el servidor seleccionado.

¡USE ESTO BAJO SU PROPIA RESPONSABILIDAD!'; $wb['do_osupdate_caption'] = 'Ejecutar actualización de S.O. al servidor remoto'; -$wb['do_osupdate_desc'] = 'Esta acción realizará un \'aptitude -y upgrade\' en el servidor seleccionado.

¡USE ESTO BAJO SU PROPIA RESPONSABILIDAD!'; +$wb['do_osupdate_desc'] = 'Esta acción realizará un \'apt -y upgrade\' en el servidor seleccionado.

¡USE ESTO BAJO SU PROPIA RESPONSABILIDAD!'; $wb['ispconfig_update_text'] = 'Inicie sesión como root en el shell de su servidor y ejecute el comando

ispconfig_update.sh

para iniciar la actualización de ISPConfig.

Pulse aquí para ver una descripción detallada de cómo actualizar'; $wb['ispconfig_update_title'] = 'Instrucciones de actualización de ISPConfig'; $wb['select_all_server'] = 'Todos los servidores'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index fadf3180c0e6c3f0df2021d8ddb51afd265141b1..7b1364b2ac2de60810da8b6b62baef1892d567bd 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/es_server_php.lng index 762fa0ed8c90c67fd1bfa4a9765858f3ce4da7a2..df2f0778f486de1bbd1b494a37270dc4e7518c2b 100644 --- a/interface/web/admin/lib/lang/es_server_php.lng +++ b/interface/web/admin/lib/lang/es_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/es_software_package.lng deleted file mode 100644 index af80e4a47930c8e36e56eb77562ad336903dfed2..0000000000000000000000000000000000000000 --- 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 838af344ecf3247fb4f49d96bd3a405d79edd36e..0000000000000000000000000000000000000000 --- 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 c1837c7a8248a5dd8649e64d431253967cab659e..0000000000000000000000000000000000000000 --- 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 26382bd50330f5dd9646ac1a61b8ad39d85543dd..0000000000000000000000000000000000000000 --- 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 f6a624bd7d93b26e788f1d45d9d61270691a41aa..0000000000000000000000000000000000000000 --- 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 827c60e2999d9449e066a37dc09d1e0998ca7111..0000000000000000000000000000000000000000 --- 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/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng index a001999dd4bcf7e403b7c43a6df079b4adfd91e9..471975be4330c60dee4291ae405b35df501e82ac 100644 --- a/interface/web/admin/lib/lang/es_system_config.lng +++ b/interface/web/admin/lib/lang/es_system_config.lng @@ -29,11 +29,13 @@ $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.'; $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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/fi_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/fi_remote_action.lng +++ b/interface/web/admin/lib/lang/fi_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index ec974d3249b45ba64ec226973046810ddf75a65d..8dc41ff17dc16bc1a16b0dc32746d7ca5ce24e7c 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/fi_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/fi_server_php.lng +++ b/interface/web/admin/lib/lang/fi_server_php.lng @@ -13,5 +13,8 @@ $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/fi_software_package.lng b/interface/web/admin/lib/lang/fi_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 87a9e193b5af46ab72dd14323f5d181e74e9907a..0000000000000000000000000000000000000000 --- 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 f875f428b61f390155ef162d7e27f404328627b2..0000000000000000000000000000000000000000 --- 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 bde844c99f8d8ea61c5e7b4b1dd98c831ae57a92..0000000000000000000000000000000000000000 --- 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 7871958353e51a7265e5910c7273e825a04ddb76..0000000000000000000000000000000000000000 --- 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/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng index eb7863fd5354b7724cf608aaa263fe242c961037..30dd462a2955f13f0dae5234697d1dd71e8950dc 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/fr_remote_action.lng index 640c17af9011b93ca5ff543242916f5db27057f2..ca4dc85dddfe078c32937eb68db369e7f3a16446 100644 --- a/interface/web/admin/lib/lang/fr_remote_action.lng +++ b/interface/web/admin/lib/lang/fr_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Sélectionner un serveur'; $wb['btn_do_txt'] = 'Exécuter l’action'; $wb['do_osupdate_caption'] = 'Mettre à jour l\'OS du serveur distant'; -$wb['do_osupdate_desc'] = 'Cette action effectue aptitude -y upgrade sur le serveur sélectionné.

UTILISEZ A VOS RISQUES ET PERILS !'; +$wb['do_osupdate_desc'] = 'Cette action effectue apt -y upgrade sur le serveur sélectionné.

UTILISEZ A VOS RISQUES ET PERILS !'; $wb['do_ispcupdate_caption'] = 'Mettre à jour ISPConfig 3 sur le serveur distant'; $wb['do_ispcupdate_desc'] = 'Cette action met à jour ISPConfig3 sur le serveur sélectionné.

UTILISEZ A VOS RISQUES ET PERILS !'; $wb['action_scheduled'] = 'L’action est marquée pour exécution'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index a413c4214dd866f64448b7d1d98aebd5e8bd29a8..9aecf3ba2158b9d575631dcf4b85d6f2d8456e90 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/fr_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/fr_server_php.lng +++ b/interface/web/admin/lib/lang/fr_server_php.lng @@ -13,5 +13,8 @@ $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/fr_software_package.lng b/interface/web/admin/lib/lang/fr_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 39f643d3e65cc933abfe042042a4b4c333629590..0000000000000000000000000000000000000000 --- 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 405b9e296fb191f3b337bf4f54ee0a8213748d4a..0000000000000000000000000000000000000000 --- 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 f65c955d52d18927304af8fd78f1148091496408..0000000000000000000000000000000000000000 --- 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 56749896bb0bf5c6b876cc1646a07ee273380656..0000000000000000000000000000000000000000 --- 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 8fb67a03104596fa99c9e79560ccab14b00f50cb..0000000000000000000000000000000000000000 --- 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/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng index cfecf8e27f2cee39f5fd75d70762c86785b07d1a..ac606922a05896fd791d5aa7b85abbde0bfe34ca 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'; @@ -48,6 +49,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/hr_remote_action.lng index 6b10a83f5340b8aa65be2a7a0a365337e9c1add3..d36e61de86750702369587c7cfdb1f7dbaa51006 100644 --- a/interface/web/admin/lib/lang/hr_remote_action.lng +++ b/interface/web/admin/lib/lang/hr_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Izaberi server'; $wb['btn_do_txt'] = 'Pokreni'; $wb['do_osupdate_caption'] = 'Nadogradi operativni sistem na udaljenom serveru'; -$wb['do_osupdate_desc'] = 'Ovime pokrećete \'aptitude -y upgrade\' na izabranom serveru.

KORISTITE NA VLASTITU ODGOVORNOST!'; +$wb['do_osupdate_desc'] = 'Ovime pokrećete \'apt -y upgrade\' na izabranom serveru.

KORISTITE NA VLASTITU ODGOVORNOST!'; $wb['do_ispcupdate_caption'] = 'Nadogradi ISPConfig 3 na udaljenom serveru'; $wb['do_ispcupdate_desc'] = 'Ovime pokrećete nadogradnju ISPConfig3-a na izabranom serveru.

KORISTITE NA VLASTITU ODGOVORNOST!'; $wb['action_scheduled'] = 'Nadogradnja je dodana u planer poslova'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index 4eb3574d45e3ea063957d014bc3401ccfb341ff0..5d81f21d24f6c403b16733734af956092eca80d4 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/hr_server_php.lng index 5bfc1dd6d20d59cb3f1f28dda7755c122a84c1ad..15ec1b30f533c17414ed1908236ba4ee12561a16 100644 --- a/interface/web/admin/lib/lang/hr_server_php.lng +++ b/interface/web/admin/lib/lang/hr_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/hr_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 22d7e0ce7a68bb864877ecaa7274034f9dc970bb..0000000000000000000000000000000000000000 --- 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 3722c5cff47ab2f4fc138fe036a087aa8226de13..0000000000000000000000000000000000000000 --- 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 bbfb2e2db29084c137cfd29804fc6be4ea2960ca..0000000000000000000000000000000000000000 --- 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 b79045bd76e8c2bdd363617f56efde702ebf5c92..0000000000000000000000000000000000000000 --- 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 2250a186a33ca4e7cfa2f2882b9100047aed4a9b..0000000000000000000000000000000000000000 --- 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/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng index 3f6486ae53d5900412642455491ee4bb49391c35..0f29ae0c0c5ad6c90d8c8fb7355ad51f7ecfe4e2 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/hu_remote_action.lng index 6c31b4fd0dd31a54209267f38515009eb0e3fd86..03d94116b9f6047c100c304a977309083460bad3 100644 --- a/interface/web/admin/lib/lang/hu_remote_action.lng +++ b/interface/web/admin/lib/lang/hu_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Válasszon szervert'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 73f0181f3d27408d5e824796d623ae4ff68e4b4e..e1c69b610c8b4065a9b7c48810f0ce9d8391150b 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/hu_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/hu_server_php.lng +++ b/interface/web/admin/lib/lang/hu_server_php.lng @@ -13,5 +13,8 @@ $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/hu_software_package.lng b/interface/web/admin/lib/lang/hu_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 6dc8be3f899c18a4a3796440fccbd743a203d51e..0000000000000000000000000000000000000000 --- 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 430583ce8a807b7741947c3a561baa6ef165b74d..0000000000000000000000000000000000000000 --- 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 3c578e3694e64e0bb61e2042a7af189fbb633b8b..0000000000000000000000000000000000000000 --- 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 f5e7aabcb2dd935dc28ee9649aa2e33e85356a04..0000000000000000000000000000000000000000 --- 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 c2edc83217d879d6cfc829de25c24afb3a1964ef..0000000000000000000000000000000000000000 --- 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/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng index 6b1a29ee46db9396a3abfaad4aee1347efb45350..1258e6acfe878a90df09079f58d7f995ea93ab6c 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/id_remote_action.lng index 9e3eccb30885730125e874407887b4322cc08b06..2ddc957f630d7aff9bf3e177ff452b612226a430 100644 --- a/interface/web/admin/lib/lang/id_remote_action.lng +++ b/interface/web/admin/lib/lang/id_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Pilih Server'; $wb['btn_do_txt'] = 'Jalankan Tindakan'; $wb['do_osupdate_caption'] = 'Lakukan pemutakhiran OS di server remote'; -$wb['do_osupdate_desc'] = 'Tindakan ini menjalankan aptitude -y upgrade di server yang dipilih.

PENGGUNAANNYA MENJADI TANGGUNG JAWAB ANDA SENDIRI!'; +$wb['do_osupdate_desc'] = 'Tindakan ini menjalankan apt -y upgrade di server yang dipilih.

PENGGUNAANNYA MENJADI TANGGUNG JAWAB ANDA SENDIRI!'; $wb['do_ispcupdate_caption'] = 'Lakukan pemutakhiran ISPConfig 3 - di server remote'; $wb['do_ispcupdate_desc'] = 'Tindakan ini melakukan pemutakhiran ISPConfig3 di server yang Anda pilih.

PENGGUNAANNYA MENJADI TANGGUNG JAWAB ANDA SENDIRI!'; $wb['action_scheduled'] = 'Tindakan dijadwalkan untuk dijalankan'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index 3555ba32889e25ef93546a4461a3a797aa004687..e871616ffefbfa59bbe5c22b45f871122b889c42 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/id_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/id_server_php.lng +++ b/interface/web/admin/lib/lang/id_server_php.lng @@ -13,5 +13,8 @@ $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/id_software_package.lng b/interface/web/admin/lib/lang/id_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 9e966893caefed15e144571afc07f91705df52ea..0000000000000000000000000000000000000000 --- 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 02642be6e2c75183a8a08800207bf82f36424fb5..0000000000000000000000000000000000000000 --- 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 1c3b0305b4f25e5b09952507b4eb9c200dbc71bd..0000000000000000000000000000000000000000 --- 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 63444907f31569d6926313329d15939bf2b9979c..0000000000000000000000000000000000000000 --- 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 f789a0e72c472d55b27e254771c57d98bfcae3fd..0000000000000000000000000000000000000000 --- 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/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng index f034f9bd769befcdab9a80144f86838f7ed27363..60eff076d378caabe62bd41685391a509a484e51 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/it_remote_action.lng index 08d02db6a33163db54081c2a556c4721457d93f7..bb14a01f7575b8b34eeb7b77272dc97965441693 100644 --- a/interface/web/admin/lib/lang/it_remote_action.lng +++ b/interface/web/admin/lib/lang/it_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Seleziona Server'; $wb['btn_do_txt'] = 'Esegui Azione'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 39b7161ddf1f04d054637fc4e19928769f263eda..c485bd00a1505d1becba183cfa0ca8a8f47071d7 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/it_server_php.lng index 805528f376d582be160fd802b36c26530f8b3e22..d85b5cd7da2a6adb369442e1b08734a4e3880d3f 100644 --- a/interface/web/admin/lib/lang/it_server_php.lng +++ b/interface/web/admin/lib/lang/it_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/it_software_package.lng deleted file mode 100644 index d2e123cf85abc3c9fce3de2d5b6f3d5fa3c85459..0000000000000000000000000000000000000000 --- 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 1e210d58940cd0a352afaf9ff1d0f81697b8540e..0000000000000000000000000000000000000000 --- 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 5ab82417de404318600984e7ac4d732fcb130840..0000000000000000000000000000000000000000 --- 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 76b01826971d75f28c53c52dbbed40f3587a7fdd..0000000000000000000000000000000000000000 --- 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 4db52118ec6bd564032ac437355c68aa5e17cf78..0000000000000000000000000000000000000000 --- 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 cc264b84eccbc926ccc68ca4b553548ad9eaf764..0000000000000000000000000000000000000000 --- 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/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng index 42f878a54dfb2124c0eddea733b90718255b62e7..f77dc6806160ab19c9a12ab2a04ac1c62530b9ac 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'; @@ -48,6 +49,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/ja_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/ja_remote_action.lng +++ b/interface/web/admin/lib/lang/ja_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index a50922639c704258f945e4060ddf4185d7c3e70a..2547989627517075656227a02e3fd031ec7beb1a 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/ja_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/ja_server_php.lng +++ b/interface/web/admin/lib/lang/ja_server_php.lng @@ -13,5 +13,8 @@ $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/ja_software_package.lng b/interface/web/admin/lib/lang/ja_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 e5352e91e7cf91fe7472f0797853dc7d9b77c1d9..0000000000000000000000000000000000000000 --- 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 c95399a54ebba86be6c0d10e24e1bdecb0f737cb..0000000000000000000000000000000000000000 --- 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 a7d06d8fdec5616b64fbd9e572d0d37b11b0a337..0000000000000000000000000000000000000000 --- 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 f0ecf5711bfbe603072a559a54073ea008303770..0000000000000000000000000000000000000000 --- 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/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng index f50ffb511456d8897e4decb0543ab681d98b644b..b5601ea8009d3c3032dfb493b0de4c9b95466f1b 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'; @@ -51,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'; @@ -103,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_users_list.lng b/interface/web/admin/lib/lang/ja_users_list.lng index 21b07be3c5a80417f2ed47869aab8c9aaf9beacd..8896b8ccbd3ccd53f68e4f6d4539d8fc9077358d 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!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/nl_remote_action.lng b/interface/web/admin/lib/lang/nl_remote_action.lng index 6f1521152f65b993d7a1344369c19c72c5470701..146bbc6bfb7b89afeae5f0bd836b447697cb327d 100644 --- a/interface/web/admin/lib/lang/nl_remote_action.lng +++ b/interface/web/admin/lib/lang/nl_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Seleceert server'; $wb['btn_do_txt'] = 'Actie uitvoeren'; $wb['do_osupdate_caption'] = 'Voer een OS-update uit op de remote server'; -$wb['do_osupdate_desc'] = 'Deze actie voert een aptitude -y upgrade uit op de door u geselecteerde server.

GEBRUIK OP EIGEN RISICO!'; +$wb['do_osupdate_desc'] = 'Deze actie voert een apt -y upgrade uit op de door u geselecteerde server.

GEBRUIK OP EIGEN RISICO!'; $wb['do_ispcupdate_caption'] = 'Voer een ISPConfig 3 - update uit op de remote server'; $wb['do_ispcupdate_desc'] = 'Deze actie voert een ISPConfig3 update uit op de soor u geselecteerde server.

GEBRUIK OP EIGEN RISICO!'; $wb['action_scheduled'] = 'Deze actie is ingepland om uitgevoerd te worden'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index 9ef50bb6c123ade3a360f4fc8db0575b409b8e7c..ac24a8b5f945033b2f27a436277d652541a032be 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/nl_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/nl_server_php.lng +++ b/interface/web/admin/lib/lang/nl_server_php.lng @@ -13,5 +13,8 @@ $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/nl_software_package.lng b/interface/web/admin/lib/lang/nl_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 87150b8cf190777da50b76bb1c1010aa108009c0..0000000000000000000000000000000000000000 --- 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 44aaa563ad06f472796aa96a31d9a241c9cee4fc..0000000000000000000000000000000000000000 --- 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 665c4197a24af7dd5caa4cc89e2e599f4a9a953e..0000000000000000000000000000000000000000 --- 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 fc05fc269b9d6bdf36e7d0fb2d2f4f25822e33aa..0000000000000000000000000000000000000000 --- 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 0d05c855943aad9b9933f72c91130efe5d17622f..0000000000000000000000000000000000000000 --- 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/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng index 4078be986ee76ddc553afeb1384cdc6871469895..107c42395ecf2420d7f2f3f0a00a9e30cc96b033 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'; @@ -26,6 +27,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/pl_remote_action.lng index 67a819febba341362353e1d375255b698b4b3a06..884b2047d54293e9aae795e8c5737567c7022d54 100644 --- a/interface/web/admin/lib/lang/pl_remote_action.lng +++ b/interface/web/admin/lib/lang/pl_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Wybierz serwer'; $wb['btn_do_txt'] = 'Uruchom akcję'; $wb['do_osupdate_caption'] = 'Wykonaj zdalną aktualizację systemu na serwerze'; -$wb['do_osupdate_desc'] = 'Ta akcja wykona polecenie aptitude -y upgrade na wybranym serwerze.

UŻYWASZ JEJ NA WŁASNĄ ODPOWIEDZIALNOŚĆ!'; +$wb['do_osupdate_desc'] = 'Ta akcja wykona polecenie apt -y upgrade na wybranym serwerze.

UŻYWASZ JEJ NA WŁASNĄ ODPOWIEDZIALNOŚĆ!'; $wb['do_ispcupdate_caption'] = 'Wykonaj zdalną aktualizację ISPConfig 3 na serwerze'; $wb['do_ispcupdate_desc'] = 'Ta akcja przeprowadzi aktualizację ISPConfig3 na wybranym serwerze.

UŻYWASZ JEJ NA WŁASNĄ ODPOWIEDZIALNOŚĆ!'; $wb['action_scheduled'] = 'Akcja zaplanowana do wykonania'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index af839bb2e3bce7e4e77aa651716fae9064b52872..d5e0dbe0f6a24689ac27b0e750aa6d6d94703e59 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/pl_server_php.lng index 5a7c7b6f9bdd90a5cec71911c98247687365ff46..de4ce60ac1af074b470fa993c661b8890cd3d4db 100644 --- a/interface/web/admin/lib/lang/pl_server_php.lng +++ b/interface/web/admin/lib/lang/pl_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/pl_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 fd2f2930dde345143a239e3755d6c6e0bfe32470..0000000000000000000000000000000000000000 --- 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 cb47abc46d380b691323486a72343a62f531b3ce..0000000000000000000000000000000000000000 --- 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 1cc3dbb61c0846e040754b5462bb40ccf7cad308..0000000000000000000000000000000000000000 --- 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 7ca6af9f9f43559891103a0c50ebd189da3f795b..0000000000000000000000000000000000000000 --- 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 aa49fba4e72ce46c22c3ca7a2d0a23ee6728a8f9..0000000000000000000000000000000000000000 --- 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/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng index c94313bdcbc4e5682957fd1493f7f8457a5927df..1bb20987655cb6a7e836797904aa0258b4285c35 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'; @@ -51,6 +52,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.'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/pt_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/pt_remote_action.lng +++ b/interface/web/admin/lib/lang/pt_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 6b581c85939cbb7834919da94b4eed0017840a76..85011d112f19bbca663b77c89dabdb1d6b6e93fd 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/pt_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/pt_server_php.lng +++ b/interface/web/admin/lib/lang/pt_server_php.lng @@ -13,5 +13,8 @@ $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/pt_software_package.lng b/interface/web/admin/lib/lang/pt_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 1ec77bdd15f5403cd7bae71e328b56c5666f21ae..0000000000000000000000000000000000000000 --- 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 436758e6871176d63b44f4eb812ebe2b945dc187..0000000000000000000000000000000000000000 --- 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 5afba6d5e354b883e14193e3b1e45af361fbd135..0000000000000000000000000000000000000000 --- 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 12fd9e2fa9106e1b1e6087fe06fc4dc641b1f71e..0000000000000000000000000000000000000000 --- 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/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng index 39e4dc93f235ae9ddc8139bf4eada0152b6c7cac..41becdf5cbb95f563a2816bb7e5c4aa7d7c222c2 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'; @@ -51,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/ro_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/ro_remote_action.lng +++ b/interface/web/admin/lib/lang/ro_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index e15c99fb675b9cdeec59cc30e8b19e0434a4fa5e..95bf27a4f19551432d873bd201828b38cbfc7d60 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/ro_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/ro_server_php.lng +++ b/interface/web/admin/lib/lang/ro_server_php.lng @@ -13,5 +13,8 @@ $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/ro_software_package.lng b/interface/web/admin/lib/lang/ro_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 4a8dcbcbf09d1141554f5f73e6a0cea790911448..0000000000000000000000000000000000000000 --- 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 f2cbbb2c25776ab5f1794e7102ad264a98144049..0000000000000000000000000000000000000000 --- 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 b7a219ffa8e2f6d389fabdc5386286a24fc2a11a..0000000000000000000000000000000000000000 --- 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 1e85d6de5f373ca10133099e354f59a3debe33f1..0000000000000000000000000000000000000000 --- 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/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng index 2b819a013ecca8ac102195e7f21cdfc5f0906a6d..2fc1a00b5699762a99e3a2d165c45644fd62042e 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'; @@ -51,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'; @@ -103,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_users_list.lng b/interface/web/admin/lib/lang/ro_users_list.lng index c928d6b86f0f38bae8c151f756f4d00593811146..a69fd3dccf08c306532bbfe1fc7206bff8cdc085 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!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/ru_remote_action.lng b/interface/web/admin/lib/lang/ru_remote_action.lng index 858d96b02ef558f5841015886d5d1bbf9ca4c9ee..f9d10afc53873d8670b06aba9649012d29690ced 100644 --- a/interface/web/admin/lib/lang/ru_remote_action.lng +++ b/interface/web/admin/lib/lang/ru_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Выбор сервера'; $wb['btn_do_txt'] = 'Выполнить действие'; $wb['do_osupdate_caption'] = 'Обновление ОС на удалённом сервере'; -$wb['do_osupdate_desc'] = 'Это действие выполнит aptitude -y upgrade на выбранном сервере.

ИСПОЛЬЗУЙТЕ ЭТО НА СВОЙ СТРАХ И РИСК!'; +$wb['do_osupdate_desc'] = 'Это действие выполнит apt -y upgrade на выбранном сервере.

ИСПОЛЬЗУЙТЕ ЭТО НА СВОЙ СТРАХ И РИСК!'; $wb['do_ispcupdate_caption'] = 'Запуск обновления ISPConfig 3 на удалённом сервере'; $wb['do_ispcupdate_desc'] = 'Это действие выполнит обновление ISPConfig 3 на выбранном сервере.

ИСПОЛЬЗУЙТЕ ЭТО НА СВОЙ СТРАХ И РИСК!'; $wb['action_scheduled'] = 'Действие запланировано на выполнение'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index 3465d2120dc1a5d2aca98f5a38a47764931d1230..6ebd4ebe0ea06e68ba45a9c9dd83d1bdca776711 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 по умолчанию'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/ru_server_php.lng index 854b8a3c23ebb0a392d77f14bd1947c81f60e3dd..c5c4942b8e08ebf2cbfdba21300d413857356c1d 100644 --- a/interface/web/admin/lib/lang/ru_server_php.lng +++ b/interface/web/admin/lib/lang/ru_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/ru_software_package.lng deleted file mode 100644 index 490184dd9273e48d69c9cecfdd313c95684a75f3..0000000000000000000000000000000000000000 --- 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 21efc7d5629d6f3eb9f561786eff2858d8afd2c8..0000000000000000000000000000000000000000 --- 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 791cfa33aed4e3141df8a82bf1c4a0f6d9dbb27f..0000000000000000000000000000000000000000 --- 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 5aec8763c173d4ac73419c725857b0978e1b8743..0000000000000000000000000000000000000000 --- 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 ed307454aef1042f662726326029eb9ed541340f..0000000000000000000000000000000000000000 --- 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 dde28811d537a8d95b07736564cae1f6d81659cd..0000000000000000000000000000000000000000 --- 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/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng index 3aee07ff2ed7c958ef07e36f98650743e6a5ee77..d829d1ca97d642054958057b433a1b45132a0ac7 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 почтовой рассылки'; @@ -51,6 +52,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'] = 'Показывать вкладку пользовательского почтового фильтра в деталях учетной записи электронной почты'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/se_remote_action.lng index fe6a849905a143f773ec78e3ac2dab2af6233223..9aeb7d9ba3c3e193cbd625b3aebcc1bcbb2e9f97 100644 --- a/interface/web/admin/lib/lang/se_remote_action.lng +++ b/interface/web/admin/lib/lang/se_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Välj server'; $wb['btn_do_txt'] = 'Utför handling'; $wb['do_osupdate_caption'] = 'Utför OS-uppdatering på fjärrserver'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Utför ISPConfig 3 -uppdatering på fjärrserver'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'Handlingen är schemalagd att utföras'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index 9bbbcc80ac3c6db18c57385e544563ccd7b43185..99b1f714fa83743933d183b0f6cc1fc074b1c97c 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/se_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/se_server_php.lng +++ b/interface/web/admin/lib/lang/se_server_php.lng @@ -13,5 +13,8 @@ $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/se_software_package.lng b/interface/web/admin/lib/lang/se_software_package.lng deleted file mode 100644 index 086902db0cbddab5c57150f462e0583e020903a6..0000000000000000000000000000000000000000 --- 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 434fc4bc98139ec1e01a513bd4cd8036e446edb7..0000000000000000000000000000000000000000 --- 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 c0222e1ba4fb975e56722d0080afde3d734e0cfb..0000000000000000000000000000000000000000 --- 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 a0e0de6822419055beee042cb8df66b7532d9984..0000000000000000000000000000000000000000 --- 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 b7a219ffa8e2f6d389fabdc5386286a24fc2a11a..0000000000000000000000000000000000000000 --- 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 0cf7c0eddc2c9c336c80085af3a5cb98b0f0d806..0000000000000000000000000000000000000000 --- 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/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng index d075f875097ad66a94ab5e0069f457abc303d5fd..fa67bc2bc9265801ba2deb04cafd3bac98cb6137 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'; @@ -51,6 +52,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'; @@ -103,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_remote_action.lng b/interface/web/admin/lib/lang/sk_remote_action.lng index 3f8948e19f602408715f9554606f5478359bec9a..dfe56b616d5b3d18abd7eb9965b8c5602cb4354c 100644 --- a/interface/web/admin/lib/lang/sk_remote_action.lng +++ b/interface/web/admin/lib/lang/sk_remote_action.lng @@ -2,7 +2,7 @@ $wb['select_server_txt'] = 'Select Server'; $wb['btn_do_txt'] = 'Execute action'; $wb['do_osupdate_caption'] = 'Do OS-Update at remote server'; -$wb['do_osupdate_desc'] = 'This Action does a aptitude -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; +$wb['do_osupdate_desc'] = 'This Action does a apt -y upgrade at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['do_ispcupdate_caption'] = 'Do ISPConfig 3 - Update at remote server'; $wb['do_ispcupdate_desc'] = 'This action does a ISPConfig3 update at your selected server.

USE THIS AT YOUR OWN RISK!'; $wb['action_scheduled'] = 'The action is scheduled for execution'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index 1b96cf57adb73b731bd17ab070bde1603d079db0..7fa947a4b01aac5f1c5c69a008ddf39048f6a223 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'; @@ -316,6 +319,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_php.lng b/interface/web/admin/lib/lang/sk_server_php.lng index 179a8fc357142ea401cd663697ef817237957d10..491be1aae2ecd613527e187940420d748137ed86 100644 --- a/interface/web/admin/lib/lang/sk_server_php.lng +++ b/interface/web/admin/lib/lang/sk_server_php.lng @@ -13,5 +13,8 @@ $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/sk_software_package.lng b/interface/web/admin/lib/lang/sk_software_package.lng deleted file mode 100644 index faffe38217fb9cac04020e73e473c6c46e3caaa1..0000000000000000000000000000000000000000 --- 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 5c8b756434ce27d67e479a96383bbee01bce4f1f..0000000000000000000000000000000000000000 --- 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 502a3a2237707e5c196a6b6523743c118fb02870..0000000000000000000000000000000000000000 --- 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 263614f50c2b62177cdaf21eb27de6d42b6adc64..0000000000000000000000000000000000000000 --- 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 c77d4a3846eb7cbcdd5aa639f7c63e96aba501ee..0000000000000000000000000000000000000000 --- 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 9a04707c3ed2dc48e79ece8016eab73babe8f86e..0000000000000000000000000000000000000000 --- 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/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng index ef4cc3fef932e498a3b92ab2cbfd01245a15ef98..317b435eae569d8a3ba79e707d3ba33276d80b4f 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'; @@ -51,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'; @@ -103,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_users_list.lng b/interface/web/admin/lib/lang/sk_users_list.lng index c393f199928e5c338133613368c407e956065cd3..49746bddaf252d746f2b72a12ff4e77f83185617 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!'; $wb['groups_txt'] = 'Groups'; ?> diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index 84210ce9b8229a5eb8461d42089649c7adcc0ba7..565b7b1f48ef480f562ea612362243bec3aaf64f 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'; @@ -310,6 +313,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/lib/lang/tr_server_php.lng b/interface/web/admin/lib/lang/tr_server_php.lng index e0437e94b323a1aa5d463d2b7652db266e167669..71b130e3d25bcf8ef9d8a553932416ed13b197b6 100644 --- a/interface/web/admin/lib/lang/tr_server_php.lng +++ b/interface/web/admin/lib/lang/tr_server_php.lng @@ -13,5 +13,8 @@ $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'; +$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_software_package.lng b/interface/web/admin/lib/lang/tr_software_package.lng deleted file mode 100644 index addda60195a1bb25f115b50b835b59153eea8030..0000000000000000000000000000000000000000 --- 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 fe7dd26e735ac376fc846b932c0cc806d9347eed..0000000000000000000000000000000000000000 --- 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 1838ff94cfc3b7f0e87cfd68f1bb25da551f4988..0000000000000000000000000000000000000000 --- 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 13e113967fad2f6fe9ef10ee1d190abc9ab7fd23..0000000000000000000000000000000000000000 --- 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 5e2fdf5b928950f51e2da6d597739afef36d1d11..0000000000000000000000000000000000000000 --- 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 a462d90faa7dc79180330f9ebe69d176cdc5117d..0000000000000000000000000000000000000000 --- a/interface/web/admin/lib/lang/tr_software_update_list.lng +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng index 3bb9c82b0adc6f1eedd8420943fb451c0338ac72..a6e6299375f1820031bb7181429ab0d52358b992 100644 --- a/interface/web/admin/lib/lang/tr_system_config.lng +++ b/interface/web/admin/lib/lang/tr_system_config.lng @@ -24,11 +24,9 @@ $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'; -$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 +52,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'; @@ -106,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/module.conf.php b/interface/web/admin/lib/module.conf.php index 124656b7f302df41d02cd388e21354f7d9688fbb..59b2e1ffc170909c060f93a4db265f965e04a3e5 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/lib/remote.conf.php b/interface/web/admin/lib/remote.conf.php index a1067a992f8c035e727355e503e517180430f540..9c2db8144e3da2b20a872f0fef78718f60ba45f7 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'; + ?> 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 0e172ace99ad7bf2bf53234922d2aa7432a90fb3..0000000000000000000000000000000000000000 --- 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/server_config_edit.php b/interface/web/admin/server_config_edit.php index 339ac2f2f5605d9b6ad0ccb2d2d462113aee3b4f..1fd1921b84e38562f1b756426c63bddf801430a3 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"]); @@ -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/software_package_install.php b/interface/web/admin/software_package_install.php deleted file mode 100644 index 6a5326d51a1bed56d1d1b2faf862d8aa38533f3d..0000000000000000000000000000000000000000 --- 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 8a21696c7f398600ba7083b3f95d3e8f548de825..0000000000000000000000000000000000000000 --- 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_update_list.php b/interface/web/admin/software_update_list.php deleted file mode 100644 index 6d680c0ec1ce613db0e448866dbd0036a30c78fa..0000000000000000000000000000000000000000 --- 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/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index c26cff24ba8b1fa0bdea00722a398437fd00fb08..d23a23a59cd998984660055106df4d92327bdb56 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -49,12 +49,38 @@
- +
+ + + + +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
@@ -120,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 ca1d54344cbf9e50baaf6dd21c37afbbcd69928f..5cf5c43a75826bce63f1c089366bf87bb3383fec 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/interface/web/admin/templates/server_php_fpm_edit.htm b/interface/web/admin/templates/server_php_fpm_edit.htm index 372b3702fcccbad4edbb06c46db3cff9da74f986..c3369f1fdb2a94224ef4b73ddaf02c3d1b8948c3 100644 --- a/interface/web/admin/templates/server_php_fpm_edit.htm +++ b/interface/web/admin/templates/server_php_fpm_edit.htm @@ -7,10 +7,13 @@
- - +
+ +
+ + - +
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 2569c267f0d55b6dc967118bc03e79ff8ae15c44..0000000000000000000000000000000000000000 --- 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 8524b3c08755982c38b050d12e8b45ee1d955d72..0000000000000000000000000000000000000000 --- 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 e69e3780af4e3ccff25906c9a5867f46b8b19f5c..0000000000000000000000000000000000000000 --- 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 a43ea74900dddbd01d8091792acddadf45a15764..0000000000000000000000000000000000000000 --- 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 d408896de6f943ba0a5d23240f37eefb58dc858a..0000000000000000000000000000000000000000 --- 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 6776b66a7a04ea4d3feb66fbe99dcf9b3e072b98..0000000000000000000000000000000000000000 --- 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/interface/web/admin/templates/system_config_dns_edit.htm b/interface/web/admin/templates/system_config_dns_edit.htm index f3d0b20dda12fb2d620bdac076b83babde8a22cf..9636b4a26114d517adcf7c50a127401961b54fa8 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/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm index af0a7a25cad39ec7e13f6cfc45584afdfafc853c..ac9271a9cf2c11854ad253d917d13fa06a6985ef 100644 --- a/interface/web/admin/templates/system_config_mail_edit.htm +++ b/interface/web/admin/templates/system_config_mail_edit.htm @@ -4,6 +4,18 @@ {tmpl_var name='enable_custom_login'} +
+ +
+ {tmpl_var name='enable_welcome_mail'} +
+
+
+ +
+ {tmpl_var name='show_per_domain_relay_options'} +
+
@@ -77,10 +89,10 @@ {tmpl_var name='default_mailserver'}
- - + + - +
diff --git a/interface/web/capp.php b/interface/web/capp.php index 5d49fe80d7b8d33807c50214daf0719bffe70026..71d3d9ba35c79e0da5b2a84097276f9a644476d0 100644 --- a/interface/web/capp.php +++ b/interface/web/capp.php @@ -31,45 +31,37 @@ 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'; + //* Import module variable $mod = $_REQUEST["mod"]; //* If we click on a search result, load that one instead of the module's start page $redirect = (isset($_REQUEST["redirect"]) ? $_REQUEST["redirect"] : ''); //* Check if user is logged in -if($_SESSION["s"]["user"]['active'] != 1) { +if ($_SESSION["s"]["user"]['active'] != 1) { die("URL_REDIRECT: /index.php"); //die(); } -if(!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.'); -if($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}(\&type=[a-z0-9_\.\-]+)?$/i", $redirect)) die('redirect contains unallowed chars.'); +if (!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.'); +if ($redirect != '' && !preg_match("/^[a-z0-9]+\/[a-z0-9_\.\-]+\?id=[0-9]{1,9}(\&type=[a-z0-9_\.\-]+)?$/i", $redirect)) die('redirect contains unallowed chars.'); //* Check if user may use the module. $user_modules = explode(",", $_SESSION["s"]["user"]["modules"]); -if(!in_array($mod, $user_modules)) $app->error($app->lng(301)); +if (!in_array($mod, $user_modules)) $app->error($app->lng(301)); //* Load module configuration into the session. -if(is_file($mod."/lib/module.conf.php")) { +if (is_file($mod."/lib/module.conf.php")) { include_once $mod."/lib/module.conf.php"; - $menu_dir = ISPC_WEB_PATH.'/' . $mod . '/lib/menu.d'; - - if (is_dir($menu_dir)) { - if ($dh = opendir($menu_dir)) { - //** Go through all files in the menu dir - while (($file = readdir($dh)) !== false) { - if ($file != '.' && $file != '..' && substr($file, -9, 9) == '.menu.php' && $file != 'dns_resync.menu.php') { - include_once $menu_dir . '/' . $file; - } - } - } - } + $menu_dir = ISPC_WEB_PATH.'/'.$mod.'/lib/menu.d'; + include_menu_dir_files($menu_dir); $_SESSION["s"]["module"] = $module; session_write_close(); - if($redirect == ''){ + if ($redirect == '') { echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"]; } else { //* If we click on a search result, load that one instead of the module's start page diff --git a/interface/web/client/client_del.php b/interface/web/client/client_del.php index c018b7a27db50b9686f63aedce827cc8a89b49ef..dadcae0bdff53f2152b17a59e596d0d906902def 100644 --- a/interface/web/client/client_del.php +++ b/interface/web/client/client_del.php @@ -69,7 +69,8 @@ class page_action extends tform_actions { 'mail_user' => 'email', 'mail_user_filter' => '', 'shell_user' => 'username', - 'spamfilter_users' => '', 'spamfilter_wblist' => '', + 'spamfilter_users' => '', + 'spamfilter_wblist' => '', 'support_message' => '', 'web_domain' => 'domain', 'web_folder' => 'path', @@ -208,6 +209,5 @@ class page_action extends tform_actions { } $page = new page_action; -$page->onDelete() +$page->onDelete(); -?> diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php index bbc7849f1f296bbda7bb132252a36574ed7f6638..f1964d7eff567a3ef7bd5d93d859a7c8ebb3c519 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,35 @@ 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); + } + + // APS is enabled or not + $global_config = $app->getconf->get_global_config('sites'); + if($global_config['show_aps_menu'] == 'y') { + $app->tpl->setVar("show_aps_menu", 1); + } else { + $app->tpl->setVar("show_aps_menu", 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 +220,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 +232,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 +251,7 @@ class page_action extends tform_actions { } $app->tpl->setVar("parent_client_id", $client_select); } - + parent::onShowEnd(); } @@ -317,7 +334,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 +342,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 +353,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 +361,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 +386,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 +401,7 @@ class page_action extends tform_actions { //* Send the email $app->functions->mail($client['email'], $subject, $message, $from); } - + parent::onAfterInsert(); } @@ -417,122 +434,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); - } + // 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 = $app->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']) { - 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); - } + $cancel = $app->functions->func_client_cancel($this->id,$this->dataRecord["canceled"]); } // language changed @@ -551,14 +462,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 +477,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 8ae08b965ed2e321ee546eca8a01f3c2260695b2..7cc3ab5ff9742bd1d8b48bf0120a8399b6b1c954 100644 --- a/interface/web/client/client_template_edit.php +++ b/interface/web/client/client_template_edit.php @@ -51,19 +51,38 @@ $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); + } + // APS is enabled or not + $global_config = $app->getconf->get_global_config('sites'); + if($global_config['show_aps_menu'] == 'y') { + $app->tpl->setVar("show_aps_menu", 1); + } else { + $app->tpl->setVar("show_aps_menu", 0); + } + parent::onShowEnd(); + } + function onBeforeUpdate() { global $app; diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index 0801ae3515a3c6631790726e5b211949c6aa4bcd..1f60ffe1b4ca4955a2b74dda44dbf4c307a1a1fc 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', @@ -924,6 +938,20 @@ $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') + ), + '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 4a3405bbe5f622a8fce3328a3d16156626269021..adf72670f8f01f97a1bc02e8a9e35b797191b09c 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', @@ -339,7 +353,22 @@ $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') + ), + '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/domain.tform.php b/interface/web/client/form/domain.tform.php index a3dc1aaac030bab9328c8beb677d32033c86dea1..f521a55b2dac3b5b8f8c18628f4ffbd2b63aa047 100644 --- a/interface/web/client/form/domain.tform.php +++ b/interface/web/client/form/domain.tform.php @@ -100,7 +100,7 @@ $form["tabs"]['domain'] = array ( 1 => array ( 'type' => 'UNIQUE', 'errmsg'=> 'domain_error_unique'), 2 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,63}$/', + 'regex' => '/^[\w\.\-]{1,255}\.[a-zA-Z0-9\-]{2,63}$/', 'errmsg'=> 'domain_error_regex'), ), 'default' => '', diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php index 3c559c78d67bdfd2453c4c878ed9ce1ac19677c2..d48dea62299ca28d4b82c3fc65c337dd87b693c9 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', @@ -922,6 +936,18 @@ $form["tabs"]['limits'] = array ( 'rows' => '', 'cols' => '' ), + 'limit_mail_backup' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), + '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/lib/lang/ar_client.lng b/interface/web/client/lib/lang/ar_client.lng index 04a7c6d17f09e37bbfbb38050f2ec049377b3b30..8b6ff765c9692163f0320df1fe9acc6e3a3bdfc9 100644 --- a/interface/web/client/lib/lang/ar_client.lng +++ b/interface/web/client/lib/lang/ar_client.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -68,6 +71,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 +206,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 0a88594a596ba0abf017cf2327cf11bfb97ee02d..464f1426bec1b804c03ffc63190f639cf8df4467 100644 --- a/interface/web/client/lib/lang/ar_client_template.lng +++ b/interface/web/client/lib/lang/ar_client_template.lng @@ -8,12 +8,14 @@ $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'; $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'; @@ -37,6 +39,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 512bc5cb23709ef0cdef6bc5c604607ecb6b0741..9f3ce64e8007a6dd75590e1e68f32586827d9561 100644 --- a/interface/web/client/lib/lang/ar_reseller.lng +++ b/interface/web/client/lib/lang/ar_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,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'; @@ -66,6 +69,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 +210,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 d6effa66e064d4296e1b80ef0066dd3136ce0fe6..233a7c9b2733733bfad7d03bb56a3e308e4aa733 100644 --- a/interface/web/client/lib/lang/bg_client.lng +++ b/interface/web/client/lib/lang/bg_client.lng @@ -5,12 +5,14 @@ $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'] = 'Размер на пощенските кутии'; $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'; @@ -37,6 +39,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'; @@ -63,6 +66,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 +206,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 75f89a0feaf103179cb050f2c887dad23836d45a..393af633eb323c27eddf094195a82c82f95682d5 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'] = 'Квота на пощенската кутия'; @@ -14,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'; @@ -32,6 +34,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 трябва да е число'; @@ -91,6 +94,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'; @@ -122,4 +126,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 f749fa5519b493a4c5a3e79eddd82a17c2e755a9..bd25475c64b7d53f9039ee404fb9d352eca2db9f 100644 --- a/interface/web/client/lib/lang/bg_reseller.lng +++ b/interface/web/client/lib/lang/bg_reseller.lng @@ -5,12 +5,14 @@ $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'] = 'Квота на пощенската кутия'; $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'; @@ -36,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'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; @@ -66,6 +69,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 +210,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 2f9d3c205693e7bc0f037b8beeb6d3a2c21a4244..58557a3a00860c55e399213c506b594d8d60d90f 100644 --- a/interface/web/client/lib/lang/br_client.lng +++ b/interface/web/client/lib/lang/br_client.lng @@ -7,13 +7,15 @@ $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'; $wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista de permissões/bloqueio"'; $wb['limit_spamfilter_user_txt'] = 'Limite de filtros anti-spam por conta de email'; $wb['limit_spamfilter_policy_txt'] = 'Limite de políticas anti-spam'; -$wb['default_mailserver_txt'] = 'Servidor de email padrão'; +$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'; $wb['contact_name_txt'] = 'Contato'; @@ -39,6 +41,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'; @@ -73,6 +76,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 bfafbeb823a572ac84782bb06c93af1c7efba1d7..92bff5cb06e629bb1b83ccf4bdf2802fc2496fdc 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'] = 'Nenhuma opção chroot SSH selecionada. Selecione $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 email padrão'; $wb['limit_maildomain_txt'] = 'Limite de domínios de email'; $wb['limit_mailbox_txt'] = 'Limite de contas de email'; @@ -12,12 +13,14 @@ $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'; $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'; @@ -47,6 +50,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 08941ffd885ad552a014d4c3c886f5cfc58b7be2..fea2945178b27515760599e835e6a117f2c7fdf8 100644 --- a/interface/web/client/lib/lang/br_reseller.lng +++ b/interface/web/client/lib/lang/br_reseller.lng @@ -7,13 +7,15 @@ $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'; $wb['limit_spamfilter_wblist_txt'] = 'Limite de filtros anti-spam "lista de permissões/bloqueio"'; $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['default_mailserver_txt'] = 'Servidor de email padrão'; +$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'; $wb['contact_name_txt'] = 'Nome do contato'; @@ -39,6 +41,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'; @@ -73,6 +76,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 e4cc2f2dbe8abe53e47b862059d98c0a6ed859ec..4482b8f2415cd068bdf22d9ea8e8bb1494b15cd2 100644 --- a/interface/web/client/lib/lang/ca_client.lng +++ b/interface/web/client/lib/lang/ca_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -61,6 +64,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 +206,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 aa51796744065e73767b39037d08c8f93970fe81..2a0f6eac455066350e28e2cf2d6169dd4159ed0a 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'; @@ -14,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'; @@ -31,6 +33,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.'; @@ -90,6 +93,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'; @@ -122,4 +126,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 411096ef5402dab83ac64fbe3f5c7e2f37007a40..7d92ced9888ab9105744d8b615c37721955c464e 100644 --- a/interface/web/client/lib/lang/ca_reseller.lng +++ b/interface/web/client/lib/lang/ca_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -35,6 +37,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'; @@ -64,6 +67,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 +210,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 372080507e70e08ec1e87ff5bffd3ddcc3702562..691bac508a09cdf18debf37c3878096e3835757d 100644 --- a/interface/web/client/lib/lang/cz_client.lng +++ b/interface/web/client/lib/lang/cz_client.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -67,6 +70,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 8cb8b34a4ea09113f0f4643b826d04b9b7cb1d53..f927e7bffdcd3b2acf51f25b20d9ae936d84dac6 100644 --- a/interface/web/client/lib/lang/cz_client_template.lng +++ b/interface/web/client/lib/lang/cz_client_template.lng @@ -8,12 +8,14 @@ $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'; $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'; @@ -37,6 +39,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.'; @@ -90,6 +93,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 751afa6990f0d674ad528ae40e985917f42d1f1c..3b137a11bc9999b1b1c299dbab0807dc491f93bc 100644 --- a/interface/web/client/lib/lang/cz_reseller.lng +++ b/interface/web/client/lib/lang/cz_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -35,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'; @@ -65,6 +68,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 ca22ce638cf7c28d3dd33e717df4e8c25bbfd3a0..c75f3263a02360a77b8d144b11a49e220eb98e2e 100644 --- a/interface/web/client/lib/lang/de_client.lng +++ b/interface/web/client/lib/lang/de_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -64,6 +67,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 +206,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 a8431a81878988f8fde1ad02758676606fc06fbf..f985e19847c23a23596b0cb2f1443adfa74548ff 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'; @@ -14,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'; @@ -34,6 +36,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.'; @@ -92,6 +95,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'; @@ -122,4 +126,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 9f68b18cf50c4f33ac987026b17781ec192da0dd..108cf7cd95100009633196d244341a47983109e2 100644 --- a/interface/web/client/lib/lang/de_reseller.lng +++ b/interface/web/client/lib/lang/de_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -65,6 +68,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 +210,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 b1e549dd9129065e21ab1e82fc125ce56e40785c..c5154dac5d95889718361249f70da1e499b4d19c 100644 --- a/interface/web/client/lib/lang/dk_client.lng +++ b/interface/web/client/lib/lang/dk_client.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -70,6 +73,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 +206,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 04acf57d64ac8e999f7178e948dcc3d1557c8ba1..daacc207e49901281a688a0d197266210c662e3d 100644 --- a/interface/web/client/lib/lang/dk_client_template.lng +++ b/interface/web/client/lib/lang/dk_client_template.lng @@ -11,12 +11,14 @@ $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'; $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'; @@ -42,6 +44,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.'; @@ -90,6 +93,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'; @@ -122,4 +126,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 12004df7619c4a0adfc66ecb2091e7da94fa06e8..816d9a35ef2768afe2ef23ac53b3b0b849f02eea 100644 --- a/interface/web/client/lib/lang/dk_reseller.lng +++ b/interface/web/client/lib/lang/dk_reseller.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -69,6 +72,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 +210,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 144e632ef6831253f7842319e0695bc36feed1bf..373c751a520fef1438b9127481716da653f92bf5 100644 --- a/interface/web/client/lib/lang/el_client.lng +++ b/interface/web/client/lib/lang/el_client.lng @@ -6,12 +6,14 @@ $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'] = 'Όριο χώρου θυρίδας'; $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'; @@ -37,6 +39,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'; @@ -70,6 +73,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 +206,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 91be0bcffd0ea72433646a1586091663f6119e16..bd0097b3dfe1b548ad6fba74daa26e0d04847637 100644 --- a/interface/web/client/lib/lang/el_client_template.lng +++ b/interface/web/client/lib/lang/el_client_template.lng @@ -8,12 +8,14 @@ $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'] = 'Όριο θυρίδας'; $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'; @@ -39,6 +41,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 πρέπει να είναι αριθμός.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 3a5e5159aa80a0dcf86a99c7d63a3b3278a2be71..512351c8f0374ae136a7bf642a753016b50fc2d9 100644 --- a/interface/web/client/lib/lang/el_reseller.lng +++ b/interface/web/client/lib/lang/el_reseller.lng @@ -5,12 +5,14 @@ $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'] = 'Όριο θυρίδας'; $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'; @@ -36,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'; @@ -66,6 +69,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 +210,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 a5991260c5eb63f3d27684aa258534992bebabec..acaafeb390e9ae7c62180f35fa615dbc49ad9870 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -39,6 +41,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'; @@ -73,6 +76,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 +208,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 aa3dfdcb6e592b4b5013b1d26a05b6ce9e7ea60c..ad20fc5699b774a50588513119ad21c7ed9e9457 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'; @@ -12,12 +13,14 @@ $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'; $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'; @@ -47,6 +50,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 +129,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 ec94cb017801a933a72b9fd8becf0c0cd2f1239f..d243c28cc17e6785121a63afc7c0d1e2c42a445f 100644 --- a/interface/web/client/lib/lang/en_reseller.lng +++ b/interface/web/client/lib/lang/en_reseller.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -39,6 +41,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'; @@ -73,6 +76,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 +214,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 eae85315b68df4ae44d6ba5bb314aaa901c0ec90..d9210b8ec36b1a97b2acafda4bc12684f1833d11 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'; @@ -79,6 +80,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.'; @@ -105,6 +107,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 +206,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 5c55b23f89e31b3e1c22d4f6b8b4e51624cb35a9..2099173c191006baf1c7d7e1fd0e3f191335c1fb 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'; @@ -35,6 +36,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'; @@ -62,6 +64,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 +126,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 6830c56cb83d4208755cb22c37e57ab1db7d267a..9fe710e6e327e33656ca2821ccc7a50507d1c11d 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'; @@ -85,6 +86,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'; @@ -112,6 +114,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 +210,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 7769af8b999f0984975ac089b3b6e2dd87b267fc..68058e1ab5a4c87365db95dc285519b21feb9216 100644 --- a/interface/web/client/lib/lang/fi_client.lng +++ b/interface/web/client/lib/lang/fi_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -62,6 +65,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 +206,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 70d9069664adfa3c5b20b0a37234c82e4ff418c3..46ce6e6a8d03a0a96d6964adf46253d8aa2820bb 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'; @@ -14,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'; @@ -32,6 +34,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 fbd09f4b3e843c2a130ab8c9ac059b379bf681c7..5c16e702644e8586b5aff5795f7aac8c3e2857f8 100644 --- a/interface/web/client/lib/lang/fi_reseller.lng +++ b/interface/web/client/lib/lang/fi_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -65,6 +68,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 +210,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 c3de724d93f39b704d75c9b21a5e3c08a743b35d..fc96c0d3195dab0b51bc75225e646395c2f14e03 100644 --- a/interface/web/client/lib/lang/fr_client.lng +++ b/interface/web/client/lib/lang/fr_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -61,6 +64,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 +206,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 b81788c0d441ba274b6823c581a80c553d39ad11..33548deba4979d017765df6fd9a6eebbe787c742 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'; @@ -14,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'; @@ -31,6 +33,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.'; @@ -90,6 +93,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'; @@ -122,4 +126,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 76d44cb324ea63af17073ef438498e6c696d6ee8..867e9d5da06ff6320e8389d42f9bb41934679317 100644 --- a/interface/web/client/lib/lang/fr_reseller.lng +++ b/interface/web/client/lib/lang/fr_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -35,6 +37,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'; @@ -64,6 +67,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 +210,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 4d16bac0cb308c935300d320577893d89bf34c5f..ed00a5c5202ee427218c3f7dfbc3af6a54f7421c 100644 --- a/interface/web/client/lib/lang/hr_client.lng +++ b/interface/web/client/lib/lang/hr_client.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -70,6 +73,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 +206,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 12fabbe72308f34821d23d9ff1412d81ed93f6ee..ce5b3e8ebc874b95612da325d18f4a3add305157 100644 --- a/interface/web/client/lib/lang/hr_client_template.lng +++ b/interface/web/client/lib/lang/hr_client_template.lng @@ -8,12 +8,14 @@ $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'; $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'; @@ -39,6 +41,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 d4b9f58eebb33c1cf54ced71aa2fd3ef168fbcd5..aaedd0b1c5e35e98b5fef8510a81839e0e5da42d 100644 --- a/interface/web/client/lib/lang/hr_reseller.lng +++ b/interface/web/client/lib/lang/hr_reseller.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -69,6 +72,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 +210,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 b11e03273ec3673f8e225372f1899806b8da98b5..9e6ad94a7b80c65bae8def8c4b09e87e773bab5a 100644 --- a/interface/web/client/lib/lang/hu_client.lng +++ b/interface/web/client/lib/lang/hu_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -62,6 +65,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 +206,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 3df432a6612cdc53ea3cd5dfce17e2574bc6fd68..74d37e7589486816faa3462e85e7ae1257c5cf47 100644 --- a/interface/web/client/lib/lang/hu_client_template.lng +++ b/interface/web/client/lib/lang/hu_client_template.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -32,6 +34,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 76755a112b1a13b5bf5445a69a639888ce0b70c5..26fffbc7e35a00eece5f249f943667fe516cea11 100644 --- a/interface/web/client/lib/lang/hu_reseller.lng +++ b/interface/web/client/lib/lang/hu_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -66,6 +69,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 +210,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 df858ebdfaace28cfd2dbbef8c5992070a5c65cf..47f8971b1fdec6b1dd36c9ce145319b19cffcd7d 100644 --- a/interface/web/client/lib/lang/id_client.lng +++ b/interface/web/client/lib/lang/id_client.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -67,6 +70,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 +206,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 57c55be57648a7db16ef9827d22a386b1de2a7d0..b4367236f73c9f09c1a35c92490d8867737184b1 100644 --- a/interface/web/client/lib/lang/id_client_template.lng +++ b/interface/web/client/lib/lang/id_client_template.lng @@ -8,12 +8,14 @@ $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'; $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'; @@ -36,6 +38,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 e639f4929e6bb41a7dc98d9740eb2bf31237cdf7..01195a244c3eb45d6fad9134d7d3abd44e452281 100644 --- a/interface/web/client/lib/lang/id_reseller.lng +++ b/interface/web/client/lib/lang/id_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,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'; @@ -65,6 +68,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 +210,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 8442ace734cb26810b89cda156fd43d86bcabd44..883bb424871254d74866fe486141122264874e75 100644 --- a/interface/web/client/lib/lang/it_client.lng +++ b/interface/web/client/lib/lang/it_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -35,6 +37,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'; @@ -61,6 +64,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 +206,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 40ef74de160797b3534a5da9a2c5004fb32dfe57..119d5d28e50ecf4b47205051a20479eb24b6cf9b 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'; @@ -14,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'; @@ -32,6 +34,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.'; @@ -90,6 +93,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'; @@ -122,4 +126,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 8b5d7194273565494c01f22656827eef21ee9a1c..ca1f01467d2ee4513fb2425ac87c767eaae50659 100644 --- a/interface/web/client/lib/lang/it_reseller.lng +++ b/interface/web/client/lib/lang/it_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -35,6 +37,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'; @@ -65,6 +68,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 +210,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 de4642d72d88f3f4c29d9544cfb0526793ab8471..4639125717189e1184ce60564d6cf5ea501b7eca 100644 --- a/interface/web/client/lib/lang/ja_client.lng +++ b/interface/web/client/lib/lang/ja_client.lng @@ -5,12 +5,14 @@ $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'] = 'メールボックスの容量'; $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'; @@ -36,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'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; @@ -66,6 +69,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 +206,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 7381465d66bd68c4a957412ea0531e964974828e..a871199051c506aaccf96f3111b827c16bbc9d18 100644 --- a/interface/web/client/lib/lang/ja_client_template.lng +++ b/interface/web/client/lib/lang/ja_client_template.lng @@ -7,12 +7,14 @@ $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'] = 'メールボックスの容量'; $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'; @@ -35,6 +37,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'] = 'メールボックスの最大容量は数字で指定してください。'; @@ -91,6 +94,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'; @@ -122,4 +126,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 a4df95b8b9aebe8593d2b08be2cfa3c7d9cbb8d0..041174da1bffb74ca02a52c37cf03d27a866143a 100644 --- a/interface/web/client/lib/lang/ja_reseller.lng +++ b/interface/web/client/lib/lang/ja_reseller.lng @@ -5,12 +5,14 @@ $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'] = 'メールボックスの容量'; $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'; @@ -36,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'] = 'limit_domain'; $wb['limit_subdomain_txt'] = 'limit_subdomain'; $wb['limit_webquota_txt'] = 'limit_webquota'; @@ -66,6 +69,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 +210,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 586f773bc631dde9f02e9f44472e686d09545d91..593d5dbdff1fb904284899a65accc379d58b2e02 100644 --- a/interface/web/client/lib/lang/nl_client.lng +++ b/interface/web/client/lib/lang/nl_client.lng @@ -6,12 +6,14 @@ $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'; $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'; @@ -38,6 +40,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'; @@ -71,6 +74,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.'; @@ -154,7 +158,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'; @@ -202,4 +206,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 da4721757d4ef63f605c40248f59b101a95c8913..c31638c1327e4f56b8cd6029825dfd19b38cc6c3 100644 --- a/interface/web/client/lib/lang/nl_client_template.lng +++ b/interface/web/client/lib/lang/nl_client_template.lng @@ -8,12 +8,14 @@ $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'; $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'; @@ -39,6 +41,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 e8df5f7ad8b1c50b6f037af1127847d9dcbe6526..e67e560e93b091dfe3fe57e92a8069b01777d040 100644 --- a/interface/web/client/lib/lang/nl_reseller.lng +++ b/interface/web/client/lib/lang/nl_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -67,6 +70,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 +210,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 89fafa6776c3239f4c2a4f976b488021a4ae9dd1..6943deef9502488431195fc80af074cea5a51c26 100644 --- a/interface/web/client/lib/lang/pl_client.lng +++ b/interface/web/client/lib/lang/pl_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -66,6 +69,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 +206,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 3a878ec9746b4bb9908777c2e80cfe4addbef39c..614bf2757584bab00c4c83b74c486da935bd0a11 100644 --- a/interface/web/client/lib/lang/pl_client_template.lng +++ b/interface/web/client/lib/lang/pl_client_template.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -35,6 +37,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ą.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 71f5bcfa4b157a8d390b6fbe045d73047dd84676..da566ab4c6c14fdc8674a0bd06fb2057cec38851 100644 --- a/interface/web/client/lib/lang/pl_reseller.lng +++ b/interface/web/client/lib/lang/pl_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -66,6 +69,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 +210,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 9ce35235cddb8794e402fdaa19d8efafbb7e635d..2b90c823ca93407a2f80b3f172babc97c0ce87e2 100644 --- a/interface/web/client/lib/lang/pt_client.lng +++ b/interface/web/client/lib/lang/pt_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -63,6 +66,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 +206,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 0c4a949d49d89b75173c953794734b04f83b4856..7f63af0df32217c2291abb807e942d6eb43890f5 100644 --- a/interface/web/client/lib/lang/pt_client_template.lng +++ b/interface/web/client/lib/lang/pt_client_template.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -32,6 +34,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 6bd89a971aac692890aef636617d142725d485bb..22c4f107a8d0030bd1536898d66ccd21f87ade81 100644 --- a/interface/web/client/lib/lang/pt_reseller.lng +++ b/interface/web/client/lib/lang/pt_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -66,6 +69,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 +210,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 3bc5e59d2aedd08c4cde3b39efd058c9598deb6b..70407714a8fbe67e51c83474c909fcd43c077f68 100644 --- a/interface/web/client/lib/lang/ro_client.lng +++ b/interface/web/client/lib/lang/ro_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -63,6 +66,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 +206,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 57cbe690ddc4eef4ed84c27931ab846becdda8ef..abd9f64eb123a7333335f5066125d6d7a7852b62 100644 --- a/interface/web/client/lib/lang/ro_client_template.lng +++ b/interface/web/client/lib/lang/ro_client_template.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -32,6 +34,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 512bc5cb23709ef0cdef6bc5c604607ecb6b0741..9f3ce64e8007a6dd75590e1e68f32586827d9561 100644 --- a/interface/web/client/lib/lang/ro_reseller.lng +++ b/interface/web/client/lib/lang/ro_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,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'; @@ -66,6 +69,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 +210,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 080512f5b0ad166ed99cdc9810aacafb50e2f759..d8cd5e4788e4cfa8607d21697777cd7c2ab53de6 100644 --- a/interface/web/client/lib/lang/ru_client.lng +++ b/interface/web/client/lib/lang/ru_client.lng @@ -5,12 +5,14 @@ $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'] = 'Квота почтового ящика'; $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'] = 'Имя контакта'; @@ -36,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'] = 'Лимит доменов'; $wb['limit_subdomain_txt'] = 'Лимит поддоменов'; $wb['limit_webquota_txt'] = 'Лимит Web-квоты'; @@ -62,6 +65,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 +206,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 46168e1ad55e2e21265e87c6ab4a822cd92b350a..65397933ff0069216bbe2975df9ae26a13a5d459 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'] = 'Квота почтового ящика'; @@ -14,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-квоты'; @@ -32,6 +34,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'] = 'Лимит почтовой квоты должен быть числом.'; @@ -91,6 +94,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-сервер по умолчанию'; @@ -122,4 +126,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 f5806377c3f010f24257632ace654aef5f39839e..3447e52070648f84a820cb9efb5a5da4753a58f9 100644 --- a/interface/web/client/lib/lang/ru_reseller.lng +++ b/interface/web/client/lib/lang/ru_reseller.lng @@ -5,12 +5,14 @@ $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'] = 'Квота ящика'; $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'] = 'Имя контакта'; @@ -36,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'] = 'Лимит доменов'; $wb['limit_subdomain_txt'] = 'Лимит поддоменов'; $wb['limit_webquota_txt'] = 'Лимит Web-квоты'; @@ -66,6 +69,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 +210,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 feaee0e9c1760498efbdb21d239e103cffeeb647..41aca6a6bb5d978681ff70caf33927360558fce6 100644 --- a/interface/web/client/lib/lang/se_client.lng +++ b/interface/web/client/lib/lang/se_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -37,6 +39,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'; @@ -63,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.'; @@ -202,4 +206,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 46932c9e50960fd7273b4a06e12934c0864969fa..a1a6f9457b3138d1cfa5994abc1efab1baf0de3f 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'; @@ -14,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'; @@ -32,6 +34,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 512bc5cb23709ef0cdef6bc5c604607ecb6b0741..9f3ce64e8007a6dd75590e1e68f32586827d9561 100644 --- a/interface/web/client/lib/lang/se_reseller.lng +++ b/interface/web/client/lib/lang/se_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,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'; @@ -66,6 +69,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 +210,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 542b4121d939aa504d397b9af487c0d8c6b22293..5ca58b5b0e9aeb7af32a0b504714d33cf2f41786 100644 --- a/interface/web/client/lib/lang/sk_client.lng +++ b/interface/web/client/lib/lang/sk_client.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -65,6 +68,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 +206,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 e3cb788bdd6ce5c412ca6349576ccd5f229ebe9c..21acadd651d85f63a8e8fa469e7d46fbacece76d 100644 --- a/interface/web/client/lib/lang/sk_client_template.lng +++ b/interface/web/client/lib/lang/sk_client_template.lng @@ -7,12 +7,14 @@ $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'; $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'; @@ -34,6 +36,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.'; @@ -91,6 +94,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'; @@ -122,4 +126,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 82b289df2b3f53d9da459fc6256a211b4bcfc005..a00b1a4156eb4d3b6dc668b0d59338ea37fbf327 100644 --- a/interface/web/client/lib/lang/sk_reseller.lng +++ b/interface/web/client/lib/lang/sk_reseller.lng @@ -5,12 +5,14 @@ $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'; $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'; @@ -36,6 +38,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'; @@ -65,6 +68,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 +210,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 d87fe26da90ab23836ef720031cf9f2498f04f90..ca1e2f74293e0f9064719c1670bfcaf4e7dd5075 100644 --- a/interface/web/client/lib/lang/tr_client.lng +++ b/interface/web/client/lib/lang/tr_client.lng @@ -7,12 +7,14 @@ $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ı'; $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ı'; @@ -39,6 +41,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'; @@ -73,6 +76,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 +208,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 8ae0954db550fb2ecce8cc12386808f92fc0e504..3d5edfeeba178c393661f8251189d3d52e13961b 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ı'; @@ -12,12 +13,14 @@ $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ı'; $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'; @@ -47,6 +50,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 +129,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 d7bc06429e137f5cd6abf3a3205870f7bee8866d..31da0d1bc42672253f6013a456924016c8a1052c 100644 --- a/interface/web/client/lib/lang/tr_reseller.lng +++ b/interface/web/client/lib/lang/tr_reseller.lng @@ -7,12 +7,14 @@ $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ı'; $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ı'; @@ -39,6 +41,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'; @@ -73,6 +76,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 +214,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/reseller_edit.php b/interface/web/client/reseller_edit.php index 3078e01fbc47a8c71f1ec1734fa03f642c4b6baf..7cbd6687bc40eefad4f0beaf174cad996595ea17 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,37 @@ 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); + } + + // APS is enabled or not + $global_config = $app->getconf->get_global_config('sites'); + if($global_config['show_aps_menu'] == 'y') { + $app->tpl->setVar("show_aps_menu", 1); + } else { + $app->tpl->setVar("show_aps_menu", 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 +216,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 +233,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 +254,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 +299,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 +327,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 +344,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 +373,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 +428,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 +460,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 +485,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') { diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 1f0a855eef75f9601eed6d3655fd46d4b11de8fb..9a2578b697b20e8424aee5dee86fa531c3cf261d 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -212,6 +212,9 @@
+
+ +
@@ -232,6 +235,20 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
+ +
+ +
+ {tmpl_var name='limit_relayhost'} +
+
+
@@ -422,6 +439,7 @@ +
+
diff --git a/interface/web/client/templates/client_template_edit_limits.htm b/interface/web/client/templates/client_template_edit_limits.htm index 005db0724a9d7c70a4986d5f00d7ea2e11073b08..ef15d18358f7b91fedbe5cee94030577c3ea25f2 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 @@
+
+ +
@@ -189,6 +192,20 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
+ +
+ +
+ {tmpl_var name='limit_relayhost'} +
+
+
@@ -380,6 +397,7 @@ +
+
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm index e1e69d4a14a51d0bb90db0e49fcc2630e259acf4..eee685ac518bb8d6051f43ff931d1312de2ba3ac 100644 --- a/interface/web/client/templates/reseller_edit_limits.htm +++ b/interface/web/client/templates/reseller_edit_limits.htm @@ -213,6 +213,9 @@
+
+ +
@@ -233,6 +236,20 @@
+
+ +
+ {tmpl_var name='limit_mail_backup'} +
+
+ +
+ +
+ {tmpl_var name='limit_relayhost'} +
+
+
@@ -424,6 +441,7 @@ +
+
diff --git a/interface/web/dashboard/dashlets/templates/limits.htm b/interface/web/dashboard/dashlets/templates/limits.htm index cc98f78e8cec9073be1077a7f0b4065def344407..7b462063352779a8886f9ae3df88cceee23d7756 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 3573ef1ab9aea76697e574ee0b7cb3f5d7289880..9013c7ac3bc781797a3fa10fc480bcfa9c80a330 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_raw" op="!=" value="0"}{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 + + + + diff --git a/interface/web/dashboard/dashlets/templates/quota.htm b/interface/web/dashboard/dashlets/templates/quota.htm index 4152ee074d21c3bab033ac51ec95788b060ceb54..fe006c2087e20852abd0a0889c6cd5452aa2abda 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 337228a49721b29973504ddaf9119e6fcf2b7c44..2e3bb8c086e5291a0652839c66e09381e2f710e5 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 35a2b9e0bed100408e82431f38354e326ab3bebf..10bb89a3ea51ce0de80c21f8a40056b40f57b984 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/dns/dns_alias_edit.php b/interface/web/dns/dns_alias_edit.php index 20bbc38d8646db029cc0ab6993ee89340eac85a8..3dfb59dead91b58f8fe3c12bd1f192144ff3cdbf 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 38bb8140c47f06b5b144a57b980ead18768c63ed..e2fde267d22a0008b5e30787a5af95292e11f1f6 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_dmarc_edit.php b/interface/web/dns/dns_dmarc_edit.php index b2d07b0a9ea49b2691a59b1771edb50ff338f959..e194aeb835ca21720b69a453044e90145097858e 100644 --- a/interface/web/dns/dns_dmarc_edit.php +++ b/interface/web/dns/dns_dmarc_edit.php @@ -226,16 +226,20 @@ 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_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; } // ... 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; diff --git a/interface/web/dns/dns_dname_edit.php b/interface/web/dns/dns_dname_edit.php index a1e1cb6c073cc9313e2c6d1b9952c5221a5ba486..4e97a8632c541bf3d48a9878297ff3b08be8dd2b 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 a94bd54946d3cc0fe67d28d6361863ad6a21908a..61c08f6576a9f6eff032b249728d2a0e2210d56e 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"]) { diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php index 4aa0644020a43b2bd3d94f45f7939ee3fcbc8c64..90e2fef1c46935ae47968f376d659b0a27cc90d5 100644 --- a/interface/web/dns/dns_wizard.php +++ b/interface/web/dns/dns_wizard.php @@ -276,18 +276,20 @@ if($_POST['create'] == 1) { } + # fixme: this regex is pretty poor for domain validation if(isset($_POST['domain']) && $_POST['domain'] == '') $error .= $app->lng('error_domain_empty').'
'; - elseif(isset($_POST['domain']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9\-]{2,63}$/', $_POST['domain'])) $error .= $app->lng('error_domain_regex').'
'; + elseif(isset($_POST['domain']) && !preg_match('/^[\w\.\-]{1,64}\.[a-zA-Z0-9\-]{2,63}$/', $_POST['domain'])) $error .= $app->lng('error_domain_regex').'
'; if(isset($_POST['ip']) && $_POST['ip'] == '') $error .= $app->lng('error_ip_empty').'
'; if(isset($_POST['ipv6']) && $_POST['ipv6'] == '') $error .= $app->lng('error_ipv6_empty').'
'; + # fixme: this regex is pretty poor for hostname validation if(isset($_POST['ns1']) && $_POST['ns1'] == '') $error .= $app->lng('error_ns1_empty').'
'; - elseif(isset($_POST['ns1']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns1'])) $error .= $app->lng('error_ns1_regex').'
'; + elseif(isset($_POST['ns1']) && !preg_match('/^[\w\.\-]{1,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns1'])) $error .= $app->lng('error_ns1_regex').'
'; if(isset($_POST['ns2']) && $_POST['ns2'] == '') $error .= $app->lng('error_ns2_empty').'
'; - elseif(isset($_POST['ns2']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns2'])) $error .= $app->lng('error_ns2_regex').'
'; + elseif(isset($_POST['ns2']) && !preg_match('/^[\w\.\-]{1,64}\.[a-zA-Z0-9]{2,63}$/', $_POST['ns2'])) $error .= $app->lng('error_ns2_regex').'
'; if(isset($_POST['email']) && $_POST['email'] == '') $error .= $app->lng('error_email_empty').'
'; elseif(isset($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) $error .= $app->lng('error_email_regex').'
'; @@ -326,7 +328,7 @@ if($_POST['create'] == 1) { // $enable_dnssec = (($_POST['dnssec'] == 'Y') ? 'Y' : 'N'); // if(isset($_POST['dnssec'])) $vars['dnssec_wanted'] = 'Y'; if(isset($_POST['dnssec'])) $tpl_content = str_replace('[ZONE]', '[ZONE]'."\n".'dnssec_wanted=Y', $tpl_content); - if(isset($_POST['dkim']) && preg_match('/^[\w\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', $_POST['domain'])) { + if(isset($_POST['dkim']) && preg_match('/^[\w\.\-\/]{1,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', $_POST['domain'])) { $sql = $app->db->queryOneRecord("SELECT dkim_public, dkim_selector FROM mail_domain WHERE domain = ? AND dkim = 'y' AND ".$app->tform->getAuthSQL('r'), $_POST['domain']); $public_key = $sql['dkim_public']; if ($public_key!='') { @@ -341,7 +343,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) { diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php index 55e085861a128c37e24c87a3dc94a75a476e70a2..bf684f98683d72d8d49f02be75925713765c877a 100644 --- a/interface/web/dns/form/dns_slave.tform.php +++ b/interface/web/dns/form/dns_slave.tform.php @@ -96,7 +96,7 @@ $form["tabs"]['dns_slave'] = array ( 'errmsg'=> 'origin_error_unique'), */ 1 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', + 'regex' => '/^[a-zA-Z0-9\.\-\/]{1,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', 'errmsg'=> 'origin_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index fea4bd1f9806bd80efa1fcaa76c7404faa18680e..6259cceddb12fe8b511eba64533cf4ccb75f0c6e 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -120,7 +120,7 @@ $form["tabs"]['dns_soa'] = array ( 1 => array ( 'type' => 'UNIQUE', 'errmsg'=> 'origin_error_unique'), 2 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', + 'regex' => '/^[a-zA-Z0-9\.\-\/]{1,255}\.[a-zA-Z0-9\-]{2,63}[\.]{0,1}$/', 'errmsg'=> 'origin_error_regex'), ), 'default' => '', @@ -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' @@ -328,6 +323,21 @@ $form["tabs"]['dns_soa'] = array ( ) ); +$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']); diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng index 8c13c59e8e67b1fd37768608289f51f01610d997..4333c3793aa1c144ce4f9da6a0d823700b6e1fa2 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!'; @@ -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 c43ad911962ae47fb807063202dcdb2ee7a7c8bd..c1e57edf8b9ffa60b9e6f7ae306a1ebeae2184d7 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!'; @@ -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 81b2bb24c75482c3d97bdb8868f20e7abd9ebde9..e6c8982de0259df07f2d979f0b62bf6abf9fa241 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 ee2fdb07b64c3a188cca64d12fe20b6129c21f69..2ac84a17df977e720a5b2fe752d30f6a7396ba16 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 ef6fdf82d82578aa871a058e9f0c421c85c74f47..73c2582117a039a345323bb3b50d63b2b06b9937 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 14897b24e45fd86dbca1e4ddfc95d3317c6aae4b..7338e154338c1a8bd2978c4c3fc5cbbb40a83913 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 a4ff50f14fa3f705e59b6ba19472bf8bd5f7ad5d..6759024041b91aa1c83db92fcd9503cb7b029639 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 aae62bef7618261ef0cb8e116287d33db8a68931..4ceed78dc9ebc0e515b048a91fb768c6d92ab0d6 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!'; @@ -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/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index 9651eb2d105a2f7089fa36595220598f3d891a7b..a5f1adfae5cc688659c98937fcb3c7c6947fa51d 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'; @@ -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/es_dns_soa.lng b/interface/web/dns/lib/lang/es_dns_soa.lng index b1484e749a0258b43ed279ca159226a451badb81..b1061373f509e8a120d4d4b5232a7f842f39dcae 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 b34b2893fdf514db92a3da4c8f8692066aaca771..36f95abab06a827df30a77fc7cd2b60e850defae 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!'; @@ -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 d2449c323e9a95cb966fd7f9497699a7044f51db..dd66dc19865e0b8e60eb97f05e65ca360e2e1be4 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 d738ff1e184cb52628d8aa105c16cc92503a60bb..5d88b4708746e0673fcd66bb4f40cd4e863a7a91 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 445de86d69c7c8d8f1d73a0fa49b5dcbe94e97c4..fdabdd99c295582fdd02d1400400ab3fbd872dd9 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!'; @@ -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 c9a43ad057a07bc4a12a16b6a90b737f9f58217b..d6cb9d78dae561d91607469c4a31f27138d6888f 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!'; @@ -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 714c6c70566c3af03ee5395ccc5790a8b86273c9..56dfd03daac943c9ec5f360da979e0b3d6889c32 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 7ab57997508202e5496ae098ccb59a2b0bf4c2b6..70d9414d26630f1e1ec4bd5ad1ca55c99b549fce 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!'; @@ -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/nl_dns_soa.lng b/interface/web/dns/lib/lang/nl_dns_soa.lng index 1f875df3c9007659806b6e48a22fb3f1497ba89e..fda742cf148adb12a11d72467e04746023e14ed4 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!'; @@ -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.'; ?> diff --git a/interface/web/dns/lib/lang/pl_dns_soa.lng b/interface/web/dns/lib/lang/pl_dns_soa.lng index 7502a592372707764358fde63333b8ef0938ee9d..d83e0aeeb0e18a392e71238fa021436365166b0e 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 7b6ac864a163decd043ef4d35429c532a3df92ee..e1e8490b7d04fde56e5dbd625410c6bb753bfdcd 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!'; @@ -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 9ae957f2406129be0f0b27645946c2efe6ab713e..87382ffa6fb46947058476641213235176e4ded6 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!'; @@ -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 f6043010d4e021d4d677e6fca002456e924cb3f3..36a4c89cdf10d503eb5b1ca05b8d3b2626167dfe 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 8e380f85a3f79c217c0fc0fb59009e6e197bc64d..0e9732b43e2c25c4745f44b5a81aa75eedc736b7 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!'; @@ -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 c96399cc4ec4b433264bfa75e111d3b66334d467..115df5672527784714a3b563744077d0d9ff42ac 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!'; @@ -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 e5d55678cbd42f76353d2923d1c5d252c9c6d81a..fc1bc60a82aa95bbd9451f246b3ccf7e9c918529 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.'; ?> diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm index 0754bf9395771999c0e14df4ecc4e9a136345bf0..592999de7e84bb72741ce6f32b94ee08376dc67e 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/dns/templates/dns_a_list.htm b/interface/web/dns/templates/dns_a_list.htm index f17e1f804ddacd7579374d24e76ae312339893e2..4d0f3b2b2880d2aa9afe38bd756fdc00e9e87ff5 100644 --- a/interface/web/dns/templates/dns_a_list.htm +++ b/interface/web/dns/templates/dns_a_list.htm @@ -73,7 +73,7 @@ - + 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 0000000000000000000000000000000000000000..31f1d925a5627a305f8a1f4319e490fb499db1a8 --- /dev/null +++ b/interface/web/dns/templates/dns_soa_rendered.htm @@ -0,0 +1,12 @@ + +{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} + +
+ +
+ diff --git a/interface/web/js/jquery.min.js b/interface/web/js/jquery.min.js index 25714ed29ab6fcf0355da4b45ac602fac0154efb..c4c6022f2982e8dae64cebd6b9a2b59f2547faad 100644 --- a/interface/web/js/jquery.min.js +++ b/interface/web/js/jquery.min.js @@ -1,4 +1,2 @@ -/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) -},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("\n"; +$html .= "\n
\n\n"; $html .= ""; echo $html; ?> diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master index e5af0ca3118401e1cd20853ecd58956685111267..efaa06a28d4242a19e4f636d536c614202a4b66d 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'} diff --git a/server/conf/index/standard_index.html_sk b/server/conf/index/standard_index.html_sk new file mode 100644 index 0000000000000000000000000000000000000000..d6edcdeb9f3c73ab85f1292b8d4a320ad8b6fafe --- /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 0000000000000000000000000000000000000000..36e8e90db844d24a0c23767ec25b1260f249e9ea --- /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 0000000000000000000000000000000000000000..c90c9854073801c943ef39ced9d6b37f6bb18273 --- /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 0000000000000000000000000000000000000000..10dc74ca811fc443c222a336799efb96dc8ba111 --- /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 0000000000000000000000000000000000000000..f9abcab03a3785ffa99b2b27eb210984774fac65 --- /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 0000000000000000000000000000000000000000..1750a5ecd51902bd0da6d5cf04174de4bbd712b7 --- /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 0000000000000000000000000000000000000000..62a73a7404f44e22853fd1422f589fb3858947e0 --- /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 0000000000000000000000000000000000000000..88f36432a0bfbd669cfce24e441ed724a9d7c895 --- /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 0000000000000000000000000000000000000000..8cac0e96138e92e3ed0520054cbc631c6d7ada77 --- /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 0000000000000000000000000000000000000000..7f83616a5e14472a03509e8839b915456301c212 --- /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_de.txt b/server/conf/mail/welcome_email_de.txt index 2327209acef50c0363402c64101874acf7c1c3d0..d28e9ac2430d510eea1a0c44f785e0db62b55fee 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 9689485606a36a69212de7005b5978b87df9031f..485227c0f3b95ef14cfd6bfe46e75d9e666f455e 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 ede0ea5120825ecd9a94e91d6a5b25030c2ee148..9ead0568f3a130448e7db028a85449167f8f338c 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 beb2b300806b16d2d41483b8f84b1993c1b77dfe..d1750068696373985c8c6e6f9f02cb6d98e245d5 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 3c45f5ac0b65d86cc76d8eb0e3e811ff3e761c1d..f288c480f092d9cce84cb7e1f021b39fbf3c266b 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 cd4baf4815aa92e57772cf12b586b9664e01eacc..2fce985968e927dc281d7f5d64d74ff61ed51855 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/conf/mail/welcome_email_sk.txt b/server/conf/mail/welcome_email_sk.txt new file mode 100644 index 0000000000000000000000000000000000000000..98f6d8ecc668519608bdcd7c7b216e334531b6d4 --- /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. diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index b91d1a16c5f05344b0d6c863e28c4043334d5414..181f4c807e2ee0761e61ef26f3f0589153703ca2 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/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 57dffe1369b8d83074c39e7e267c5807945629eb..1c219f0cd4654ef88356afd1f67a95d3577baab9 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -15,15 +15,13 @@ server { listen : ssl http2; - listen : ssl proxy_protocol; + listen : ssl http2 proxy_protocol; - - + 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'; @@ -46,18 +44,18 @@ 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; } @@ -81,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$ { @@ -102,34 +100,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; } @@ -349,11 +355,18 @@ server { listen []:; + + listen [::]:; + + - listen : ssl; + listen : ssl http2; - listen []: ssl; + listen []: ssl http2; + + + listen [::]: ssl http2; ssl_certificate ; ssl_certificate_key ; @@ -364,7 +377,7 @@ server { if ($http_host "") { - rewrite ^ $scheme://$request_uri? permanent; + rewrite ^(?!/\.well-known/acme-challenge)/ $scheme://$request_uri? permanent; } diff --git a/server/conf/rspamd_classifier-bayes.conf.master b/server/conf/rspamd_classifier-bayes.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..0906bfe63e9cd1ab012de20d44d3390de29fe1c5 --- /dev/null +++ b/server/conf/rspamd_classifier-bayes.conf.master @@ -0,0 +1,16 @@ +backend = "redis"; + +servers = ""; + + +password = ""; + +autolearn { + spam_threshold = 6.0; # When to learn spam (score >= threshold and action is reject) + junk_threshold = 4.0; # When to learn spam (score >= threshold and action is rewrite subject or add header, and has two or more positive results) + ham_threshold = -0.5; # When to learn ham (score <= threshold and action is no action, and score is negative or has three or more negative results) + 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 0000000000000000000000000000000000000000..10d89e74952075ce6daa6244ef9dbf5b22fa4a5a --- /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_options.inc.master b/server/conf/rspamd_options.inc.master new file mode 100644 index 0000000000000000000000000000000000000000..537816c8036e7152e3dcf510afde87219c0aeaac --- /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/conf/rspamd_redis.conf.master b/server/conf/rspamd_redis.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..08b7f8ca901cc937a5c47f7b80c78b02121e093c --- /dev/null +++ b/server/conf/rspamd_redis.conf.master @@ -0,0 +1,4 @@ +servers = ""; + +password = ""; + diff --git a/server/conf/rspamd_users.conf.master b/server/conf/rspamd_users.conf.master deleted file mode 100644 index 73d437d6cbdd3a7292af84855364cdfee7de977a..0000000000000000000000000000000000000000 --- a/server/conf/rspamd_users.conf.master +++ /dev/null @@ -1,43 +0,0 @@ -settings { - authenticated { - priority = 10; - authenticated = yes; - #apply "default" { groups_disabled = ["rbl", "spf"]; } - apply "default" { - #symbols_enabled = []; - symbols_disabled = []; - #groups_enabled = []; - groups_disabled = ["rbl"]; - } - } - whitelist { - priority = 10; - rcpt = "postmaster"; - rcpt = "hostmaster"; - rcpt = "abuse"; - want_spam = yes; - } - whitelist-ip { - priority = 10; - - 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" - .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/users.local.conf" -} diff --git a/server/conf/rspamd_users.inc.conf.master b/server/conf/rspamd_users.inc.conf.master index 96ba9f08384f0c42fa398517f4e34ff301c83648..83dd5b27643143a94340d49a7c913ed191840ae3 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 = ; diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index dd2dfb96473667b849fb98527d1551263d043b3a..fd216d3d6401bf2e81f35b7239041daabbfd6054 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 :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" "Yes", header :contains "subject" "*** SPAM ***", header :contains "subject" "***SPAM***") { +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" "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 :is ["X-Spam", "X-Spam-Flag"] "Yes", header :matches "X-Spam-Status" "Yes, *") { # Stop here so that we do not reply on spams stop; } diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 023b7262918c8503ce874a5b92a6577530ff12e6..a1873eab84033afbc75776924ac7414962aeef6a 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/xml application/xml+rss application/atom+xml application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon + @@ -512,6 +516,13 @@ RewriteCond %{REQUEST_URI} !^/webdav/ RewriteCond %{REQUEST_URI} !^/php-fcgi/ RewriteCond %{REQUEST_URI} !^ + + + + + SSLProxyEngine On + + RewriteRule ^/(.*)$ $1 diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index e7333356b49a90801706e77b0fac4c959515ad42..3cdf17d1fc8fe9eacacd440257589507f65b1475 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': @@ -721,7 +730,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 @@ -734,33 +743,38 @@ 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_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')"; - array_push($args, $server_id); - array_push($args_domains, $server_id); + $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_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_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 = ?"; - array_push($args, $domain_id); - array_push($args_domains, $domain_id); + $sql_domains_with_backups .= " AND 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); $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); + $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)) { @@ -771,27 +785,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 = ?"; - $backups = $db->queryAllRecords($sql, $server_id, $domain_id); + // Cleanup backup files with missing web_backup entries (runs on all servers) + $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; + $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 = ?"; + $untracked_backup_files = array(); + foreach ($db_list as $db) { + $backups = $db->queryAllRecords($sql, $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); + $untracked_backup_files[] = $backup['filename']; } } } + 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($sql_domains, true, $args_sql_domains); + foreach ($domains as $rec) { + $domain_id = $rec['domain_id']; + $domain_backup_dir = $backup_dir . '/web' . $domain_id; - //Remove backupdir symlink and create as directory instead + // 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 +835,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) && ! 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); + @unlink($full_filename); } } - $dir_handle->close(); } + $dir_handle->close(); } } } @@ -897,16 +926,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 ); } /** @@ -965,12 +1002,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 @@ -1215,8 +1254,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 { @@ -1291,9 +1330,8 @@ class backup # default exclusions $backup_excludes = array( - escapeshellarg('./backup\*'), + './backup*', './bin', './dev', './etc', './lib', './lib32', './lib64', './opt', './sys', './usr', './var', './proc', './run', './tmp', - './log', ); $b_excludes = explode(',', trim($web_domain['backup_excludes'])); @@ -1419,7 +1457,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 +1498,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) { 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 401dcd1e553ec5c3ce8f4777d9cd4cc238be403d..166628114ca6c85c03fc867283524cf0bd19b56e 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 5c41105d3c7aadf3765f39b68beb5217d104c578..e7562f6bf1bed9ea54ef1c0e2f83ca7e90514179 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/cron.d/150-awstats.inc.php b/server/lib/classes/cron.d/150-awstats.inc.php index 7bead9e5df81fb57a4121a224c6e522361940b69..225b3580737e6bacd73981009ccd2668d3f35aa1 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; 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 bd6a410309cb35b77bf41468805b547a82723410..ac7ae0aa5c70fab9c8e539145f558c950d174563 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']); @@ -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'), @@ -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']); @@ -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'), @@ -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; @@ -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/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php index f631f0043cbba060e644ae8a0054dc1d785fe3f0..4dcb1994142065a7e8aed42036578c1a88229c29 100644 --- a/server/lib/classes/cron.d/500-backup_mail.inc.php +++ b/server/lib/classes/cron.d/500-backup_mail.inc.php @@ -126,7 +126,7 @@ class cronjob_backup_mail extends cronjob { if ($rec['maildir_format'] == 'mdbox') { if (empty($this->tmp_backup_dir)) $this->tmp_backup_dir = $rec['maildir']; // Create temporary backup-mailbox - $app->system->exec_safe("su -c ?", 'dsync backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup'); + $app->system->exec_safe("su -c ?", 'dsync -o plugin/acl= -o plugin/quota= backup -u "'.$rec["email"].'" mdbox:' . $this->tmp_backup_dir . '/backup'); if($backup_mode == 'userzip') { $mail_backup_file.='.zip'; 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 7e8c82da6419f39b187a3be808614bb8137b19d1..711c735db15b3f67f11ad47bfd1550e476630330 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']); } } diff --git a/server/lib/classes/cron.d/600-file_cleanup.inc.php b/server/lib/classes/cron.d/600-file_cleanup.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..765b0910414bc588b59af5148a7112bfcdb139ee --- /dev/null +++ b/server/lib/classes/cron.d/600-file_cleanup.inc.php @@ -0,0 +1,143 @@ +db->queryAllRecords($sql, $server_id); + if(is_array($records)) { + foreach($records as $rec){ + $mail_access[$rec['id']] = $rec['id']; + } + } + + $spamfilter_wblist = array(); + $sql = "SELECT wblist_id as id FROM spamfilter_wblist WHERE active = 'y' AND server_id = ?"; + $records = $app->db->queryAllRecords($sql, $server_id); + if(is_array($records)) { + foreach($records as $rec){ + $spamfilter_wblist[$rec['id']] = $rec['id']; + } + } + + $spamfilter_users = array(); + $sql = "SELECT id FROM spamfilter_users WHERE policy_id != 0 AND server_id = ?"; + $records = $app->db->queryAllRecords($sql, $server_id); + if(is_array($records)) { + foreach($records as $rec){ + $spamfilter_users[$rec['id']] = $rec['id']; + } + } + + $mail_user = array(); + $sql = "SELECT mailuser_id as id FROM mail_user WHERE postfix = 'y' AND server_id = ?"; + $records = $app->db->queryAllRecords($sql, $server_id); + if(is_array($records)) { + foreach($records as $rec){ + $mail_user[$rec['id']] = $rec['id']; + } + } + + $mail_forwarding = array(); + $sql = "SELECT forwarding_id as id FROM mail_forwarding WHERE active = 'y' AND server_id = ?"; + $records = $app->db->queryAllRecords($sql, $server_id); + if(is_array($records)) { + foreach($records as $rec){ + $mail_forwarding[$rec['id']] = $rec['id']; + } + } + + foreach (glob('/etc/rspamd/local.d/users/*.conf') as $file) { + if($handle = fopen($file, 'r')) { + if(($line = fgets($handle)) !== false) { + if(preg_match('/^((?:global|spamfilter)_wblist|ispc_(spamfilter_user|mail_user|mail_forwarding))[_-](\d+)\s/', $line, $matches)) { + switch($matches[1]) { + case 'global_wblist': + $remove = isset($mail_access[$matches[3]]) ? false : true; + break; + case 'spamfilter_wblist': + $remove = isset($spamfilter_wblist[$matches[3]]) ? false : true; + break; + case 'ispc_spamfilter_user': + $remove = isset($spamfilter_users[$matches[3]]) ? false : true; + break; + case 'ispc_mail_user': + $remove = isset($mail_user[$matches[3]]) ? false : true; + break; + case 'ispc_mail_forwarding': + $remove = isset($mail_forwarding[$matches[3]]) ? false : true; + break; + default: + $app->log("conf file has unhandled rule naming convention, ignoring: $file", LOGLEVEL_DEBUG); + $remove = false; + } + if($remove) { + $app->log("$matches[1] id $matches[3] not found, removing $file", LOGLEVEL_DEBUG); + unlink($file); + $this->restartServiceDelayed('rspamd', 'reload'); + } + } else { + $app->log("conf file has unknown rule naming convention, ignoring: $file", LOGLEVEL_DEBUG); + } + } + + fclose($handle); + } + } + } + + parent::onRunJob(); + } + +} + 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 771bf0e71baef557e2bcf7fc6f4720030dfa34c7..e38ee58210fe329c1ef0c9b91804f70615528441 100644 --- a/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php +++ b/server/lib/classes/cron.d/600-jailkit_maintenance.inc.php @@ -34,22 +34,6 @@ class cronjob_jailkit_maintenance extends cronjob { protected $_schedule = '*/5 * * * *'; protected $_run_at_new = true; - //private $_tools = null; - - /* this function is optional if it contains no custom code */ - public function onPrepare() { - global $app; - - parent::onPrepare(); - } - - /* this function is optional if it contains no custom code */ - public function onBeforeRun() { - global $app; - - return parent::onBeforeRun(); - } - public function onRunJob() { global $app, $conf; @@ -66,10 +50,22 @@ class cronjob_jailkit_maintenance extends cronjob { $options = array('allow_hardlink'); } + // force all jails to update every 2 weeks + if (! is_file('/usr/local/ispconfig/server/temp/jailkit_force_update.ts')) { + if(!@is_dir('/usr/local/ispconfig/server/temp')) { + $app->system->mkdirpath('/usr/local/ispconfig/server/temp'); + } + $app->system->touch('/usr/local/ispconfig/server/temp/jailkit_force_update.ts'); + } elseif ( time() - filemtime('/usr/local/ispconfig/server/temp/jailkit_force_update.ts') > 60 * 60 * 24 * 14 ) { + $update_hash = 'force_update'.time(); + $app->db->query("UPDATE web_domain SET last_jailkit_hash = ? WHERE type = 'vhost' AND server_id = ?", $update_hash, $conf['server_id']); + $app->system->touch('/usr/local/ispconfig/server/temp/jailkit_force_update.ts'); + } + // 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 +107,18 @@ class cronjob_jailkit_maintenance extends cronjob { sort($last_updated, SORT_STRING); $update_hash = hash('md5', implode(' ', $last_updated)); + if (substr($rec['last_jailkit_hash'], 0, strlen('force_update')) === 'force_update') { + $options[] = 'force'; + } elseif (is_file( $rec['document_root']."/bin/bash" )) { + # test that /bin/bash functions in the jail + $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 + $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); @@ -135,10 +143,5 @@ class cronjob_jailkit_maintenance extends cronjob { parent::onRunJob(); } - /* this function is optional if it contains no custom code */ - public function onAfterRun() { - parent::onAfterRun(); - } - } diff --git a/server/lib/classes/cronjob.inc.php b/server/lib/classes/cronjob.inc.php index 61d45749a841fb2d8826b0a82dd96588fd816f49..df410042db0c5be4afff122a08747858a42154e1 100644 --- a/server/lib/classes/cronjob.inc.php +++ b/server/lib/classes/cronjob.inc.php @@ -43,6 +43,9 @@ class cronjob { protected $_next_run = null; private $_running = false; + // services for delayed restart/reload + private $_delayed_restart_services = array(); + /** return schedule */ @@ -178,6 +181,12 @@ class cronjob { global $app, $conf; if($conf['log_priority'] <= LOGLEVEL_DEBUG) print "Called onAfterRun() for class " . get_class($this) . "\n"; + + if(is_array($this->_delayed_restart_services)) { + foreach ($this->_delayed_restart_services as $service => $mode) { + $this->restartService($service, $mode); + } + } } // child classes may NOT override this! @@ -188,6 +197,29 @@ class cronjob { $app->db->query("UPDATE `sys_cron` SET `running` = 0 WHERE `name` = ?", get_class($this)); } + // child classes may NOT override this! + protected function restartService($service, $action='restart') { + global $app; + + $app->uses('system'); + + $retval = array('output' => '', 'retval' => 0); + if($action == 'reload') { + exec($app->system->getinitcommand($service, 'reload').' 2>&1', $retval['output'], $retval['retval']); + } else { + exec($app->system->getinitcommand($service, 'restart').' 2>&1', $retval['output'], $retval['retval']); + } + return $retval; + } + + // child classes may NOT override this! + protected function restartServiceDelayed($service, $action='restart') { + $action = ($action == 'reload' ? 'reload' : 'restart'); + + if (is_array($this->_delayed_restart_services)) { + $this->_delayed_restart_services[$service] = $action; + } + } + } -?> diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index df38086ebee7ff73d67ba437c36e7172b7a15c77..9b9d43b442898309a91d67c087d447d062353fc7 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; } diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php index 2b3dc78cfc66658136443a4367e22caad0c49b71..f5aa35957753ec1c6ff65d6a9eb555cff747065e 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 diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php index 3923954e10f701925d512600311dd68366392237..aaa118fb91212511c70df216e3ad64538f96533d 100644 --- a/server/lib/classes/letsencrypt.inc.php +++ b/server/lib/classes/letsencrypt.inc.php @@ -44,7 +44,7 @@ class letsencrypt { } public function get_acme_script() { - $acme = explode("\n", shell_exec('which /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); + $acme = explode("\n", shell_exec('which acme.sh /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh')); $acme = reset($acme); if(is_executable($acme)) { return $acme; @@ -80,7 +80,7 @@ class letsencrypt { } 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 = explode("\n", shell_exec('which certbot /root/.local/share/letsencrypt/bin/letsencrypt /opt/eff.org/certbot/venv/bin/certbot letsencrypt')); $letsencrypt = reset($letsencrypt); if(is_executable($letsencrypt)) { return $letsencrypt; @@ -137,6 +137,7 @@ class letsencrypt { return false; } + $primary_domain = $domains[0]; $matches = array(); $ret = null; $val = 0; @@ -151,18 +152,22 @@ 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 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"; + $cert_selection_command = "--expand"; } - $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 $cert_selection_command --authenticator webroot --server $acme_version --rsa-key-size 4096 --email webmaster@$primary_domain $webroot_args"; return $cmd; } @@ -317,8 +322,15 @@ 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; + } } $tmp = $app->letsencrypt->get_website_certificate_paths($data); @@ -399,11 +411,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 +434,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); diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index dbe702d0dd2473a898c3b11602a23d21c788a071..42ed9146e4f12f90ab67a75028f896cca1c2d2d4 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -221,6 +221,12 @@ class monitor_tools { $distconfid = 'debian100'; $distid = 'debian60'; $distbaseid = 'debian'; + } elseif(substr(trim(file_get_contents('/etc/debian_version')),0,2) == '11') { + $distname = 'Debian'; + $distver = 'Bullseye'; + $distconfid = 'debian110'; + $distid = 'debian60'; + $distbaseid = 'debian'; } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) { $distname = 'Debian'; $distver = 'Testing'; @@ -290,6 +296,16 @@ 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'; + $distid = 'fedora33'; + $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS release 5.2 (Final)')) { $distname = 'CentOS'; $distver = '5.2'; @@ -460,7 +476,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; @@ -488,11 +504,12 @@ class monitor_tools { return $res; } - public function _getLogData($log) { + public function _getLogData($log, $max_lines = 100) { global $conf; $dist = ''; $logfile = ''; + $journalmatch = ''; if (@is_file('/etc/debian_version')) { $dist = 'debian'; @@ -542,7 +559,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 +660,40 @@ 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 '.intval($max_lines).' ' . escapeshellarg($logfile)); } else { $log = 'Unable to read ' . $logfile; } } + } else { + if($journalmatch != ''){ + $log = $this->_getOutputFromExecCommand('journalctl -n '.intval($max_lines).' --no-pager ' . escapeshellcmd($journalmatch)); + }else{ + $log = 'Unable to read logfile'; + } + } return $log; } + private function _getOutputFromExecCommand ($command) { + $log = ''; + $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); @@ -845,11 +875,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]); } diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index a26707b0aea1a76258773b8f8902e34b66112d76..7e4e7ae447c64bbac3c6a3049d6fafc21ed1a56b 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -1371,6 +1371,7 @@ class system{ * Control services to restart etc * */ + /* function daemon_init($daemon, $action){ //* $action = start|stop|restart|reload global $app; @@ -1409,7 +1410,7 @@ class system{ } } } - } + } */ function netmask($netmask){ list($f1, $f2, $f3, $f4) = explode('.', trim($netmask)); @@ -1591,44 +1592,6 @@ class system{ - /** - * Scan the trash for virusses infection - * - */ - function make_trashscan(){ - global $app; - //trashscan erstellen - // Template Öffnen - $app->tpl->clear_all(); - $app->tpl->define( array(table => 'trashscan.master')); - - if(!isset($this->server_conf['virusadmin']) || trim($this->server_conf['virusadmin']) == '') $this->server_conf['virusadmin'] = 'admispconfig@localhost'; - if(substr($this->server_conf['virusadmin'], 0, 1) == '#'){ - $notify = 'no'; - } else { - $notify = 'yes'; - } - - // Variablen zuweisen - $app->tpl->assign( array(VIRUSADMIN => $this->server_conf['virusadmin'], - NOTIFICATION => $notify)); - - $app->tpl->parse(TABLE, table); - - $trashscan_text = $app->tpl->fetch(); - - $datei = '/home/admispconfig/ispconfig/tools/clamav/bin/trashscan'; - $app->file->wf($datei, $trashscan_text); - - chmod($datei, 0755); - chown($datei, 'admispconfig'); - chgrp($datei, 'admispconfig'); - } - - - - - /** * Get the current time * @@ -1744,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) { @@ -2102,36 +2062,103 @@ class system{ } function _getinitcommand($servicename, $action, $init_script_directory = '', $check_service) { - global $conf; + global $conf, $app; + // upstart + /* removed upstart support - deprecated if(is_executable('/sbin/initctl')){ exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']); if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action; } + */ + + if(!in_array($action,array('restart','reload','force-reload'))) { + $app->log('Invalid init command action '.$action,LOGLEVEL_WARN); + return false; + } - // systemd + //* systemd (now default in all supported OS) if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){ - if ($check_service) { - $this->exec_safe("systemctl is-enabled ? 2>&1", $servicename); - $ret_val = $this->last_exec_retcode(); - } - if ($ret_val == 0 || !$check_service) { - return 'systemctl '.$action.' '.$servicename.'.service'; + $app->log('Trying to use Systemd to restart service',LOGLEVEL_DEBUG); + + //* Test service name via regex + if(preg_match('/[a-zA-Z0-9\.\-\_]/',$servicename)) { + + //* Test if systemd service is enabled + if ($check_service) { + $this->exec_safe("systemctl is-enabled ? 2>&1", $servicename); + $ret_val = $this->last_exec_retcode(); + } else { + $app->log('Systemd service '.$servicename.' not found or not enabled.',LOGLEVEL_DEBUG); + } + + //* Return service command + if ($ret_val == 0 || !$check_service) { + return 'systemctl '.$action.' '.$servicename.'.service'; + } else { + $app->log('Failed to use Systemd to restart service '.$servicename.', we try init script instead.',LOGLEVEL_DEBUG); + } + } else { + $app->log('Systemd service name contains invalid chars: '.$servicename,LOGLEVEL_DEBUG); } + } else { + $app->log('Not using Systemd to restart services',LOGLEVEL_DEBUG); } - // sysvinit + //* sysvinit fallback + $app->log('Using init script to restart service',LOGLEVEL_DEBUG); + + //* Get init script directory if($init_script_directory == '') $init_script_directory = $conf['init_scripts']; if(substr($init_script_directory, -1) === '/') $init_script_directory = substr($init_script_directory, 0, -1); - if($check_service && is_executable($init_script_directory.'/'.$servicename)) { - return $init_script_directory.'/'.$servicename.' '.$action; + $init_script_directory = realpath($init_script_directory); + + //* Check init script dir + if(!is_dir($init_script_directory)) { + $app->log('Init script directory '.$init_script_directory.' not found',LOGLEVEL_WARN); + return false; + } + + //* Forbidden init script paths + if(substr($init_script_directory,0,4) == '/var' || substr($init_script_directory,0,4) == '/tmp') { + $app->log('Do not put init scripts in /var or /tmp folder.',LOGLEVEL_WARN); + return false; + } + + //* Check init script dir owner + if(fileowner($init_script_directory) !== 0) { + $app->log('Init script directory '.$init_script_directory.' not owned by root user',LOGLEVEL_WARN); + return false; + } + + $full_init_script_path = realpath($init_script_directory.'/'.$servicename); + + if($full_init_script_path == '') { + $app->log('No init script, we quit here.',LOGLEVEL_WARN); + return false; + } + + //* Check init script + if(!is_file($full_init_script_path)) { + $app->log('Init script '.$full_init_script_path.' not found',LOGLEVEL_WARN); + return false; + } + + //* Check init script owner + if(fileowner($full_init_script_path) !== 0) { + $app->log('Init script '.$full_init_script_path.' not owned by root user',LOGLEVEL_WARN); + return false; + } + + if($check_service && is_executable($full_init_script_path)) { + return $full_init_script_path.' '.$action; } if (!$check_service) { - return $init_script_directory.'/'.$servicename.' '.$action; + return $full_init_script_path.' '.$action; } } - function getinitcommand($servicename, $action, $init_script_directory = '', $check_service=false) { + function getinitcommand($servicename, $action, $init_script_directory = '', $check_service=true) { if (is_array($servicename)) { foreach($servicename as $service) { $out = $this->_getinitcommand($service, $action, $init_script_directory, true); @@ -2412,6 +2439,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 +2456,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 +2516,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 +2533,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) diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index ef6e07e95e5160abe83f6d90984a7a8ea547b652..56cc3745c213976712adaeaa6bce1db33ce999a1 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -179,8 +179,9 @@ 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"); - } - else { + } elseif(file_exists('/etc/redhat-release')) { + exec("which dnf &> /dev/null && dnf -y update || yum -y update"); + } else { exec("apt-get update"); exec("apt-get -y upgrade"); } diff --git a/server/mods-available/server_module.inc.php b/server/mods-available/server_module.inc.php index bc846cf53062b0cec4fc653095a00ecace34f6a1..92a50c51286b32f092150568d6cc69bfc0c4f845 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/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php index 12ad81ef9cd38db186728d0517e8a73422f03904..bb2de0d1deb3a573df2d168ddfd4e48591a6b53a 100644 --- a/server/mods-available/web_module.inc.php +++ b/server/mods-available/web_module.inc.php @@ -54,6 +54,9 @@ class web_module { 'web_backup_insert', 'web_backup_update', 'web_backup_delete', + 'server_php_insert', + 'server_php_update', + 'server_php_delete', 'aps_instance_insert', 'aps_instance_update', 'aps_instance_delete', @@ -112,6 +115,7 @@ class web_module { $app->modules->registerTableHook('web_folder', 'web_module', 'process'); $app->modules->registerTableHook('web_folder_user', 'web_module', 'process'); $app->modules->registerTableHook('web_backup', 'web_module', 'process'); + $app->modules->registerTableHook('server_php', 'web_module', 'process'); $app->modules->registerTableHook('aps_instances', 'web_module', 'process'); $app->modules->registerTableHook('aps_instances_settings', 'web_module', 'process'); $app->modules->registerTableHook('aps_packages', 'web_module', 'process'); @@ -167,6 +171,11 @@ class web_module { if($action == 'u') $app->plugins->raiseEvent('web_backup_update', $data); if($action == 'd') $app->plugins->raiseEvent('web_backup_delete', $data); break; + case 'server_php': + if($action == 'i') $app->plugins->raiseEvent('server_php_insert', $data); + if($action == 'u') $app->plugins->raiseEvent('server_php_update', $data); + if($action == 'd') $app->plugins->raiseEvent('server_php_delete', $data); + break; case 'aps_instances': if($action == 'i') $app->plugins->raiseEvent('aps_instance_insert', $data); if($action == 'u') $app->plugins->raiseEvent('aps_instance_update', $data); @@ -233,15 +242,20 @@ class web_module { return $retval; } } - - exec($cmd.' 2>&1', $retval['output'], $retval['retval']); + + $app->log("Restarting httpd: $cmd", LOGLEVEL_DEBUG); + + if($cmd != '') { + exec($cmd.' 2>&1', $retval['output'], $retval['retval']); + } else { + $app->log('We got no init command, restart or reload of service aborted.',LOGLEVEL_WARN); + } // if restart failed despite successful syntax check => try again if($web_config['server_type'] == 'nginx' && $retval['retval'] > 0){ sleep(2); exec($cmd.' 2>&1', $retval['output'], $retval['retval']); } - $app->log("Restarting httpd: $cmd", LOGLEVEL_DEBUG); // nginx: do a syntax check because on some distributions, the init script always returns 0 - even if the syntax is not ok (how stupid is that?) //if($web_config['server_type'] == 'nginx' && $retval['retval'] == 0){ @@ -298,10 +312,16 @@ class web_module { } */ } - - $retval = array('output' => '', 'retval' => 0); - exec($initcommand.' 2>&1', $retval['output'], $retval['retval']); + $app->log("Restarting php-fpm: $initcommand", LOGLEVEL_DEBUG); + + if($initcommand != '') { + $retval = array('output' => '', 'retval' => 0); + exec($initcommand.' 2>&1', $retval['output'], $retval['retval']); + } else { + $app->log('We got no init command, restart or reload of php-fpm service aborted.',LOGLEVEL_WARN); + } + return $retval; } diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index cc4bea9f600fa334653edeb58c5becf10b0cdf9d..f2a121825b75464ee9af81dd935866509b59ee42 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -278,7 +278,6 @@ class apache2_plugin { $ssl_dir = $data['new']['document_root'].'/ssl'; $domain = ($data['new']['ssl_domain'] != '') ? $data['new']['ssl_domain'] : $data['new']['domain']; $key_file = $ssl_dir.'/'.$domain.'.key'; - $key_file2 = $ssl_dir.'/'.$domain.'.key.org'; $csr_file = $ssl_dir.'/'.$domain.'.csr'; $crt_file = $ssl_dir.'/'.$domain.'.crt'; $bundle_file = $ssl_dir.'/'.$domain.'.bundle'; @@ -293,10 +292,6 @@ class apache2_plugin { $app->system->rename($key_file, $key_file.'.bak'); $app->system->chmod($key_file.'.bak', 0400); } - if(file_exists($key_file2)){ - $app->system->rename($key_file2, $key_file2.'.bak'); - $app->system->chmod($key_file2.'.bak', 0400); - } if(file_exists($csr_file)) $app->system->rename($csr_file, $csr_file.'.bak'); if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak'); @@ -346,27 +341,19 @@ class apache2_plugin { $ssl_ext_file = $ssl_dir.'/v3.ext'; $app->system->file_put_contents($ssl_ext_file, $ext_cnf); - $rand_file = $rand_file; - $key_file2 = $key_file2; - $openssl_cmd_key_file2 = $key_file2; - if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate - $key_file = $key_file; $openssl_cmd_key_file = $key_file; if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate $ssl_days = 3650; - $csr_file = $csr_file; $openssl_cmd_csr_file = $csr_file; if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate $config_file = $ssl_cnf_file; - $crt_file = $crt_file; $openssl_cmd_crt_file = $crt_file; if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) { - - $app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2); - $app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file); - $app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file); + $openssl_cmd = 'openssl req -nodes -newkey rsa:4096 -x509 -days ? -keyout ? -out ? -config ?'; + $app->system->exec_safe($openssl_cmd, $ssl_days, $openssl_cmd_key_file, $openssl_cmd_crt_file, $config_file); + $app->system->exec_safe("openssl req -new -sha256 -key ? -out ? -days ? -config ?", $openssl_cmd_key_file, $openssl_cmd_csr_file, $ssl_days, $config_file); if(file_exists($web_config['CA_path'].'/openssl.cnf')) { @@ -375,15 +362,14 @@ class apache2_plugin { if(filesize($crt_file) == 0 || !file_exists($crt_file)) { $app->log("CA-Certificate signing failed. openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file -extfile $ssl_ext_file", LOGLEVEL_ERROR); } - }; + } if (@filesize($crt_file)==0 || !file_exists($crt_file)){ - $app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ? ", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file); + $app->system->exec_safe($openssl_cmd, $ssl_days, $openssl_cmd_key_file, $openssl_cmd_crt_file, $config_file); $app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG); - }; + } } - $app->system->chmod($key_file2, 0400); $app->system->chmod($key_file, 0400); @$app->system->unlink($config_file); @$app->system->unlink($rand_file); @@ -445,10 +431,6 @@ class apache2_plugin { $app->system->copy($key_file, $key_file.'~'); $app->system->chmod($key_file.'~', 0400); } - if(file_exists($key_file2)){ - $app->system->copy($key_file2, $key_file2.'~'); - $app->system->chmod($key_file2.'~', 0400); - } if(file_exists($csr_file)) $app->system->copy($csr_file, $csr_file.'~'); if(file_exists($crt_file)) $app->system->copy($crt_file, $crt_file.'~'); if(file_exists($bundle_file)) $app->system->copy($bundle_file, $bundle_file.'~'); @@ -551,7 +533,7 @@ class apache2_plugin { $app->uses('getconf'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); - //* Check if this is a chrooted setup + //* Check if apache is using a chrooted setup if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { $apache_chrooted = true; $app->log('Info: Apache is chrooted.', LOGLEVEL_DEBUG); @@ -565,7 +547,7 @@ class apache2_plugin { } if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false || $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) { - $app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN); + $app->log('Problem with website user or group. Websites cannot be owned by root or an existing user/group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN); return 0; } if(trim($data['new']['domain']) == '') { @@ -659,7 +641,7 @@ class apache2_plugin { $tmp_symlink = str_replace('[website_domain]', $data['old']['domain'], $tmp_symlink); // Remove trailing slash if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); - // create the symlinks, if not exist + // remove the old symlinks if they exist if(is_link($tmp_symlink)) { $app->system->exec_safe('rm -f ?', $tmp_symlink); $app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG); @@ -692,9 +674,7 @@ class apache2_plugin { //* Create new base directory, if it does not exist yet if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir); - $app->system->web_folder_protection($data['old']['document_root'], false); $app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir); - //$app->system->rename($data['old']['document_root'],$new_dir); $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG); // Handle the change in php_open_basedir @@ -714,15 +694,6 @@ class apache2_plugin { if($apache_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command); //* Change the log mount - /* - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; - $app->system->removeLine('/etc/fstab', $fstab_line); - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind,nobootwait'; - $app->system->removeLine('/etc/fstab', $fstab_line); - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind,nobootwait'; - $app->system->removeLine('/etc/fstab', $fstab_line); - */ - $fstab_line_old = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; if($web_config['network_filesystem'] == 'y') { @@ -737,8 +708,6 @@ class apache2_plugin { } - //print_r($data); - // Check if the directories are there and create them if necessary. $app->system->web_folder_protection($data['new']['document_root'], false); @@ -788,17 +757,22 @@ 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') { + $create_jail_conditions= ($data['old']['php_fpm_chroot'] != 'y' || + ! is_dir($data['new']['document_root'].'/etc/jailkit') || + ($data['old']['php'] != $data['new']['php'] && $data['new']['php'] != 'no')); + + // Create jailkit chroot if needed and when enabling php_fpm_chroot + if($data['new']['php_fpm_chroot'] == 'y' && $create_jail_conditions && $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') { + } 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')) { @@ -892,7 +866,7 @@ class apache2_plugin { $tmp_symlink = str_replace('[website_domain]', $data['old']['domain'], $tmp_symlink); // Remove trailing slash if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); - // remove the symlinks, if not exist + // remove the old symlinks if they exist if(is_link($tmp_symlink)) { $app->system->exec_safe('rm -f ?', $tmp_symlink); $app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG); @@ -953,11 +927,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 +942,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 . '/'); } } @@ -1195,7 +1169,7 @@ class apache2_plugin { $app->system->chgrp('/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log', 'root'); } - //* Write the custom php.ini file, if custom_php_ini fieled is not empty + //* Write the custom php.ini file, if custom_php_ini field is not empty $custom_php_ini_dir = $web_config['website_basedir'].'/conf/'.$data['new']['system_user']; if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') $custom_php_ini_dir .= '_' . $web_folder; if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf'); @@ -1315,7 +1289,6 @@ class apache2_plugin { $tmp = $app->letsencrypt->get_website_certificate_paths($data); $domain = $tmp['domain']; $key_file = $tmp['key']; - $key_file2 = $tmp['key2']; $csr_file = $tmp['csr']; $crt_file = $tmp['crt']; $bundle_file = $tmp['bundle']; @@ -1399,12 +1372,14 @@ class apache2_plugin { $rewrite_rules[] = array('rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, + 'rewrite_target_is_ssl' => ('https://' === substr($rewrite_target, 0, 8) ? 'y' : 'n'), 'rewrite_target_ssl' => $rewrite_target_ssl, 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'), 'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n')); $rewrite_rules[] = array('rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, + 'rewrite_target_is_ssl' => ('https://' === substr($rewrite_target, 0, 8) ? 'y' : 'n'), 'rewrite_target_ssl' => $rewrite_target_ssl, 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'), 'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n')); @@ -1413,6 +1388,7 @@ class apache2_plugin { $rewrite_wildcard_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, + 'rewrite_target_is_ssl' => ('https://' === substr($rewrite_target, 0, 8) ? 'y' : 'n'), 'rewrite_target_ssl' => $rewrite_target_ssl, 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'), 'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n')); @@ -1421,6 +1397,7 @@ class apache2_plugin { $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, + 'rewrite_target_is_ssl' => ('https://' === substr($rewrite_target, 0, 8) ? 'y' : 'n'), 'rewrite_target_ssl' => $rewrite_target_ssl, 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n'), 'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n')); @@ -1667,31 +1644,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['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['php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -1704,7 +1680,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'){ @@ -2089,17 +2070,12 @@ class apache2_plugin { $app->system->copy($key_file, $key_file.'.err'); $app->system->chmod($key_file.'.err', 0400); } - if(is_file($key_file2)){ - $app->system->copy($key_file2, $key_file2.'.err'); - $app->system->chmod($key_file2.'.err', 0400); - } if(is_file($csr_file)) $app->system->copy($csr_file, $csr_file.'.err'); if(is_file($crt_file)) $app->system->copy($crt_file, $crt_file.'.err'); if(is_file($bundle_file)) $app->system->copy($bundle_file, $bundle_file.'.err'); //* Restore the ~ backup files if(is_file($key_file.'~')) $app->system->copy($key_file.'~', $key_file); - if(is_file($key_file2.'~')) $app->system->copy($key_file2.'~', $key_file2); if(is_file($crt_file.'~')) $app->system->copy($crt_file.'~', $crt_file); if(is_file($csr_file.'~')) $app->system->copy($csr_file.'~', $csr_file); if(is_file($bundle_file.'~')) $app->system->copy($bundle_file.'~', $bundle_file); @@ -2124,7 +2100,6 @@ class apache2_plugin { $this->ssl_certificate_changed = false; if(@is_file($key_file.'~')) $app->system->unlink($key_file.'~'); - if(@is_file($key_file2.'~')) $app->system->unlink($key_file2.'~'); if(@is_file($crt_file.'~')) $app->system->unlink($crt_file.'~'); if(@is_file($csr_file.'~')) $app->system->unlink($csr_file.'~'); if(@is_file($bundle_file.'~')) $app->system->unlink($bundle_file.'~'); @@ -3303,31 +3278,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 +3498,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){ @@ -3818,7 +3791,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/apps_vhost_plugin.inc.php b/server/plugins-available/apps_vhost_plugin.inc.php index b64adfde6e50de8a547fc7638418f2912ea62234..91a994b109555ae704339b06787609c3b0971778 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 { + $content = str_replace('{ssl_on}', 'ssl http2', $content); + } 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); @@ -253,7 +251,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); } diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php index ffbc5a6b795a7917f8b9109618efd1b509e35681..a92165ba6d917bf32b4449d926bf180716317eec 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; diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index b152a8758db795ad17b708ffe80ed27b1a8928d8..49fd043aff42a89753e81e28196d618468b18fbe 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; } @@ -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; @@ -313,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`=? WHERE id=?", $rendered_zone, $zone['id']); + //* Check the zonefile if(is_file($filename.'.err')) unlink($filename.'.err'); $app->system->exec_safe('named-checkzone ? ?', $zone['origin'], $filename); @@ -325,7 +345,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); @@ -402,12 +422,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'); @@ -443,7 +457,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']); diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php index a186a128867f8d941a4591aa60c35aca72d4eac7..8bd33b3de00fd3853510784770c580666ed4aaef 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) diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php index 1d44a849aacf57d5edc6a92c9e8f208e6f275805..331e85f91977a0717d77ecef33ce7563be692cd8 100644 --- a/server/plugins-available/cron_plugin.inc.php +++ b/server/plugins-available/cron_plugin.inc.php @@ -184,12 +184,14 @@ class cron_plugin { if(!$parent_domain) { $tmp = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE dbtable = ? AND dbidx = ? AND `action` = ? ORDER BY `datalog_id` DESC', 'web_domain', 'domain_id:' . $data['old']['parent_domain_id'], 'd'); - $tmp = unserialize($tmp); - if($tmp && isset($tmp['old'])) { - $this->parent_domain = $tmp['old']; - } else { - $app->log("Parent domain not found", LOGLEVEL_WARN); - return 0; + if(is_array($tmp) && isset($tmp['data']) && strlen($tmp['data']) > 0) { + $tmp = unserialize($tmp['data']); + if($tmp && isset($tmp['old'])) { + $this->parent_domain = $tmp['old']; + } else { + $app->log("Parent domain not found", LOGLEVEL_WARN); + return 0; + } } } else { $this->parent_domain = $parent_domain; diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index 4d5ac826d3780f4d264f07c0060a9f0ffe13bd56..2baf07ec7dd07ad69f7203b77924bb166cf1f8f9 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']); @@ -135,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"]); @@ -149,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); } @@ -181,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) { @@ -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,15 @@ 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, and only send them when welcome emails are enabled. + // (bypass the normal ispcmail class when creating mail accounts) + $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); } @@ -261,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); @@ -315,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"]); @@ -323,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"]); @@ -338,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. + + //* Create the maildir, if it does 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) { @@ -361,7 +379,7 @@ class mail_plugin { } } } - + if(!is_dir($data['new']['maildir'].'/.Sent')) { $app->system->maildirmake($maildomain_path, $user, 'Sent', $group); } @@ -374,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'])) { @@ -470,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']; diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 59cc56bf0889bf80c3bb929641c468d3071623ee..0e2cacaef9bfd0da4db665ef3cdc3fe68057461f 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -112,7 +112,6 @@ class nginx_plugin { $ssl_dir = $data['new']['document_root'].'/ssl'; $domain = ($data['new']['ssl_domain'] != '') ? $data['new']['ssl_domain'] : $data['new']['domain']; $key_file = $ssl_dir.'/'.$domain.'.key'; - $key_file2 = $ssl_dir.'/'.$domain.'.key.org'; $csr_file = $ssl_dir.'/'.$domain.'.csr'; $crt_file = $ssl_dir.'/'.$domain.'.crt'; @@ -126,10 +125,6 @@ class nginx_plugin { $app->system->rename($key_file, $key_file.'.bak'); $app->system->chmod($key_file.'.bak', 0400); } - if(file_exists($key_file2)){ - $app->system->rename($key_file2, $key_file2.'.bak'); - $app->system->chmod($key_file2.'.bak', 0400); - } if(file_exists($csr_file)) $app->system->rename($csr_file, $csr_file.'.bak'); if(file_exists($crt_file)) $app->system->rename($crt_file, $crt_file.'.bak'); @@ -179,42 +174,35 @@ class nginx_plugin { $ssl_ext_file = $ssl_dir.'/v3.ext'; $app->system->file_put_contents($ssl_ext_file, $ext_cnf); - $rand_file = $rand_file; - $key_file2 = $key_file2; - $openssl_cmd_key_file2 = $key_file2; - if(substr($domain, 0, 2) == '*.' && strpos($key_file2, '/ssl/\*.') !== false) $key_file2 = str_replace('/ssl/\*.', '/ssl/*.', $key_file2); // wildcard certificate - $key_file = $key_file; $openssl_cmd_key_file = $key_file; if(substr($domain, 0, 2) == '*.' && strpos($key_file, '/ssl/\*.') !== false) $key_file = str_replace('/ssl/\*.', '/ssl/*.', $key_file); // wildcard certificate $ssl_days = 3650; - $csr_file = $csr_file; $openssl_cmd_csr_file = $csr_file; if(substr($domain, 0, 2) == '*.' && strpos($csr_file, '/ssl/\*.') !== false) $csr_file = str_replace('/ssl/\*.', '/ssl/*.', $csr_file); // wildcard certificate $config_file = $ssl_cnf_file; - $crt_file = $crt_file; $openssl_cmd_crt_file = $crt_file; if(substr($domain, 0, 2) == '*.' && strpos($crt_file, '/ssl/\*.') !== false) $crt_file = str_replace('/ssl/\*.', '/ssl/*.', $crt_file); // wildcard certificate if(is_file($ssl_cnf_file) && !is_link($ssl_cnf_file)) { - - $app->system->exec_safe("openssl genrsa -des3 -rand ? -passout pass:? -out ? 2048", $rand_file, $ssl_password, $openssl_cmd_key_file2); - $app->system->exec_safe("openssl req -new -sha256 -passin pass:? -passout pass:? -key ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $ssl_days, $config_file); - $app->system->exec_safe("openssl rsa -passin pass:? -in ? -out ?", $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_key_file); + $openssl_cmd = 'openssl req -nodes -newkey rsa:4096 -x509 -days ? -keyout ? -out ? -config ?'; + $app->system->exec_safe($openssl_cmd, $ssl_days, $openssl_cmd_key_file, $openssl_cmd_crt_file, $config_file); + $app->system->exec_safe("openssl req -new -sha256 -key ? -out ? -days ? -config ?", $openssl_cmd_key_file, $openssl_cmd_csr_file, $ssl_days, $config_file); if(file_exists($web_config['CA_path'].'/openssl.cnf')) { $app->system->exec_safe("openssl ca -batch -out ? -config ? -passin pass:? -in ? -extfile ?", $openssl_cmd_crt_file, $web_config['CA_path']."/openssl.cnf", $web_config['CA_pass'], $openssl_cmd_csr_file, $ssl_ext_file); $app->log("Creating CA-signed SSL Cert for: $domain", LOGLEVEL_DEBUG); - if (filesize($crt_file)==0 || !file_exists($crt_file)) $app->log("CA-Certificate signing failed. openssl ca -out $openssl_cmd_crt_file -config ".$web_config['CA_path']."/openssl.cnf -passin pass:".$web_config['CA_pass']." -in $openssl_cmd_csr_file -extfile $ssl_ext_file", LOGLEVEL_ERROR); - }; + if(filesize($crt_file) == 0 || !file_exists($crt_file)) { + $app->log("CA-Certificate signing failed. openssl ca -out $openssl_cmd_crt_file -config " . $web_config['CA_path'] . "/openssl.cnf -passin pass:" . $web_config['CA_pass'] . " -in $openssl_cmd_csr_file -extfile $ssl_ext_file", LOGLEVEL_ERROR); + } + } if (@filesize($crt_file)==0 || !file_exists($crt_file)){ - $app->system->exec_safe("openssl req -x509 -passin pass:? -passout pass:? -key ? -in ? -out ? -days ? -config ?", $ssl_password, $ssl_password, $openssl_cmd_key_file2, $openssl_cmd_csr_file, $openssl_cmd_crt_file, $ssl_days, $config_file); + $app->system->exec_safe($openssl_cmd, $ssl_days, $openssl_cmd_key_file, $openssl_cmd_crt_file, $config_file); $app->log("Creating self-signed SSL Cert for: $domain", LOGLEVEL_DEBUG); - }; + } } - $app->system->chmod($key_file2, 0400); $app->system->chmod($key_file, 0400); @$app->system->unlink($config_file); @$app->system->unlink($rand_file); @@ -276,10 +264,7 @@ class nginx_plugin { $app->system->copy($key_file, $key_file.'~'); $app->system->chmod($key_file.'~', 0400); } - if(file_exists($key_file2)){ - $app->system->copy($key_file2, $key_file2.'~'); - $app->system->chmod($key_file2.'~', 0400); - } + if(file_exists($csr_file)) $app->system->copy($csr_file, $csr_file.'~'); if(file_exists($crt_file)) $app->system->copy($crt_file, $crt_file.'~'); @@ -379,7 +364,7 @@ class nginx_plugin { $app->uses('getconf'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); - //* Check if this is a chrooted setup + //* Check if nginx is using a chrooted setup if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { $nginx_chrooted = true; $app->log('Info: nginx is chrooted.', LOGLEVEL_DEBUG); @@ -393,7 +378,7 @@ class nginx_plugin { } if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false || $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) { - $app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN); + $app->log('Problem with website user or group. Websites cannot be owned by root or an existing user/group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN); return 0; } if(trim($data['new']['domain']) == '') { @@ -500,7 +485,7 @@ class nginx_plugin { $tmp_symlink = str_replace('[website_domain]', $data['old']['domain'], $tmp_symlink); // Remove trailing slash if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); - // create the symlinks, if not exist + // remove the old symlinks if they exist if(is_link($tmp_symlink)) { $app->system->exec_safe('rm -f ?', $tmp_symlink); $app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG); @@ -508,6 +493,9 @@ class nginx_plugin { } } + //* Remove protection of old folders + $app->system->web_folder_protection($data['old']['document_root'], false); + if($data["new"]["type"] != "vhostsubdomain" && $data["new"]["type"] != "vhostalias") { //* Move the site data $tmp_docroot = explode('/', $data['new']['document_root']); @@ -530,9 +518,7 @@ class nginx_plugin { //* Create new base directory, if it does not exist yet if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir); - $app->system->web_folder_protection($data['old']['document_root'], false); $app->system->exec_safe('mv ? ?', $data['old']['document_root'], $new_dir); - //$app->system->rename($data['old']['document_root'],$new_dir); $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir, LOGLEVEL_DEBUG); // Handle the change in php_open_basedir @@ -552,15 +538,6 @@ class nginx_plugin { if($nginx_chrooted) $app->system->exec_safe('chroot ? ?', $web_config['website_basedir'], $command); //* Change the log mount - /* - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; - $app->system->removeLine('/etc/fstab', $fstab_line); - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind,nobootwait'; - $app->system->removeLine('/etc/fstab', $fstab_line); - $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind,nobootwait'; - $app->system->removeLine('/etc/fstab', $fstab_line); - */ - $fstab_line_old = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; if($web_config['network_filesystem'] == 'y') { @@ -575,8 +552,6 @@ class nginx_plugin { } - //print_r($data); - // Check if the directories are there and create them if necessary. $app->system->web_folder_protection($data['new']['document_root'], false); @@ -626,17 +601,22 @@ 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_jail_conditions= ($data['old']['php_fpm_chroot'] != 'y' || + ! is_dir($data['new']['document_root'].'/etc/jailkit') || + ($data['old']['php'] != $data['new']['php'] && $data['new']['php'] != 'no')); - // Create jailkit chroot when enabling php_fpm_chroot - if($data['new']['php_fpm_chroot'] == 'y' && $data['old']['php_fpm_chroot'] != 'y') { + // Create jailkit chroot if needed and when enabling php_fpm_chroot + if($data['new']['php_fpm_chroot'] == 'y' && $create_jail_conditions && $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') { + } 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')) { @@ -730,7 +710,7 @@ class nginx_plugin { $tmp_symlink = str_replace('[website_domain]', $data['old']['domain'], $tmp_symlink); // Remove trailing slash if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); - // remove the symlinks, if not exist + // remove the old symlinks if they exist if(is_link($tmp_symlink)) { $app->system->exec_safe('rm -f ?', $tmp_symlink); $app->log('Removed symlink: rm -f '.$tmp_symlink, LOGLEVEL_DEBUG); @@ -791,10 +771,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,19 +786,23 @@ 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 . '/'); } } } } - $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 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 . '/'); + } //** 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) { @@ -871,7 +857,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 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 if($web_config['security_level'] == 20) { $app->system->exec_safe('chown ?:? ?', $username, $groupname, $data['new']['document_root'].'/' . $web_folder); @@ -1084,31 +1073,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['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['php_fpm_socket_dir']; if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; } - } else { - $default_php_fpm = true; } } @@ -1120,7 +1109,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'){ @@ -1362,7 +1356,6 @@ class nginx_plugin { $tmp = $app->letsencrypt->get_website_certificate_paths($data); $domain = $tmp['domain']; $key_file = $tmp['key']; - $key_file2 = $tmp['key2']; $csr_file = $tmp['csr']; $crt_file = $tmp['crt']; $bundle_file = $tmp['bundle']; @@ -1484,7 +1477,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 +1529,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 +1579,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']; @@ -1626,16 +1619,14 @@ 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 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 \'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', '>='))) { $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); @@ -2067,8 +2058,7 @@ class nginx_plugin { $ssl_dir = $data['new']['document_root'].'/ssl'; $domain = $data['new']['ssl_domain']; - $key_file = $ssl_dir.'/'.$domain.'.key.org'; - $key_file2 = $ssl_dir.'/'.$domain.'.key'; + $key_file = $ssl_dir.'/'.$domain.'.key'; $csr_file = $ssl_dir.'/'.$domain.'.csr'; $crt_file = $ssl_dir.'/'.$domain.'.crt'; //$bundle_file = $ssl_dir.'/'.$domain.'.bundle'; @@ -2078,17 +2068,12 @@ class nginx_plugin { $app->system->copy($key_file, $key_file.'.err'); $app->system->chmod($key_file.'.err', 0400); } - if(is_file($key_file2)){ - $app->system->copy($key_file2, $key_file2.'.err'); - $app->system->chmod($key_file2.'.err', 0400); - } if(is_file($csr_file)) $app->system->copy($csr_file, $csr_file.'.err'); if(is_file($crt_file)) $app->system->copy($crt_file, $crt_file.'.err'); //if(is_file($bundle_file)) $app->system->copy($bundle_file,$bundle_file.'.err'); //* Restore the ~ backup files if(is_file($key_file.'~')) $app->system->copy($key_file.'~', $key_file); - if(is_file($key_file2.'~')) $app->system->copy($key_file2.'~', $key_file2); if(is_file($crt_file.'~')) $app->system->copy($crt_file.'~', $crt_file); if(is_file($csr_file.'~')) $app->system->copy($csr_file.'~', $csr_file); //if(is_file($bundle_file.'~')) $app->system->copy($bundle_file.'~',$bundle_file); @@ -2108,7 +2093,6 @@ class nginx_plugin { $this->ssl_certificate_changed = false; if(@is_file($key_file.'~')) $app->system->unlink($key_file.'~'); - if(@is_file($key_file2.'~')) $app->system->unlink($key_file2.'~'); if(@is_file($crt_file.'~')) $app->system->unlink($crt_file.'~'); if(@is_file($csr_file.'~')) $app->system->unlink($csr_file.'~'); //if(@is_file($bundle_file.'~')) $app->system->unlink($bundle_file.'~'); @@ -2130,7 +2114,7 @@ class nginx_plugin { if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') $app->system->web_folder_protection($data['old']['document_root'], false); - //* Check if this is a chrooted setup + //* Check if nginx is using a chrooted setup if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { $nginx_chrooted = true; } else { @@ -2876,31 +2860,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 +3084,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){ @@ -3596,7 +3578,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; } diff --git a/server/plugins-available/openvz_plugin.inc.php b/server/plugins-available/openvz_plugin.inc.php index f17edb7b8c1882844b26eb6afb147eba9416075f..4be9c30ebf9b8c9daef2374928a1374d24f4ab8f 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 diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php index b3e453be555427a5b8845dad5bf3bda347bb112f..be81fb62a46c64baf21a94a8d9763fa0b2afea95 100644 --- a/server/plugins-available/postfix_server_plugin.inc.php +++ b/server/plugins-available/postfix_server_plugin.inc.php @@ -72,6 +72,12 @@ class postfix_server_plugin { global $app, $conf; $postfix_restart = false; + // Plugin should only run on mail servers + if(! $data['new']['mail_server']) { + $app->log("postfix_server_plugin: plugin is enabled but this server is not configured as a mail server.", LOGLEVEL_WARN); + return false; + } + // get the config $app->uses("getconf,system"); $old_ini_data = $app->ini_parser->parse_ini_string($data['old']['config']); @@ -138,7 +144,7 @@ class postfix_server_plugin { if ($value == '') continue; if (preg_match('/^reject_rbl_client/', $value)) continue; $new_options[] = $value; - if (preg_match('/^permit_mynetworks/', $value)) { + if (preg_match('/^permit_sasl_authenticated/', $value)) { $new_options = array_merge($new_options, $rbl_options); $rbl_options = array(); // so we don't ever array_merge twice } @@ -159,11 +165,18 @@ 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+1, 0, array('reject_sender_login_mismatch')); + 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++) { + if ($new_options[$i] == 'permit_sasl_authenticated') { + array_splice($new_options, $i, 0, array('reject_sender_login_mismatch')); break; } } @@ -319,7 +332,9 @@ class postfix_server_plugin { } } - $quoted_postfix_config_dir = preg_quote($conf['postfix']['config_dir'], '|'); + $config_dir = exec("postconf -h config_directory"); + $quoted_postfix_config_dir = preg_quote($config_dir, '|'); + $new_options = array(); $options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions")); foreach ($options as $key => $value) { @@ -330,10 +345,14 @@ class postfix_server_plugin { } $new_options[] = $value; } - if (defined($configure_lmtp) && $configure_lmtp && $mail_config['content_filter'] == 'amavisd') { + if (isset($configure_lmtp) && $configure_lmtp && $mail_config['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_postfix_config_dir}/mysql-verify_recipients.cf")); + + $app->system->exec_safe("postconf -e ?", 'address_verify_virtual_transport = smtp:[127.0.0.1]:10025'); + $app->system->exec_safe("postconf -e ?", 'address_verify_transport_maps = static:smtp:[127.0.0.1]:10025'); + break; } } @@ -344,61 +363,64 @@ class postfix_server_plugin { } exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'"); - if($mail_config['content_filter'] != $old_ini_data['mail']['content_filter']) { - $rslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_sender_login_mismatch," : ""; - $raslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_authenticated_sender_login_mismatch," : ""; + $rslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_sender_login_mismatch," : ""; + $raslm = ($mail_config['reject_sender_login_mismatch'] == 'y') ? "reject_authenticated_sender_login_mismatch," : ""; - if($mail_config['content_filter'] == 'rspamd'){ - exec("postconf -X 'receive_override_options'"); - exec("postconf -X 'content_filter'"); + if($mail_config['content_filter'] == 'rspamd'){ + exec("postconf -X 'receive_override_options'"); + exec("postconf -X 'content_filter'"); + exec("postconf -X address_verify_virtual_transport"); + exec("postconf -X address_verify_transport_maps"); - exec("postconf -e 'smtpd_milters = inet:localhost:11332'"); - exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'"); - exec("postconf -e 'milter_protocol = 6'"); - 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_milters = inet:localhost:11332'"); + exec("postconf -e 'non_smtpd_milters = inet:localhost:11332'"); + exec("postconf -e 'milter_protocol = 6'"); + 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'"); - - $new_options = array(); - $options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions")); - foreach ($options as $key => $value) { - $value = trim($value); - if ($value == '') continue; - if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) { - continue; - } - $new_options[] = $value; - } - exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'"); + 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'"); - // get all domains that have dkim enabled - if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) { - $mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1); + $new_options = array(); + $options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions")); + foreach ($options as $key => $value) { + $value = trim($value); + if ($value == '') continue; + if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) { + continue; } - $dkim_domains = $app->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y'); - $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) { - fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n"); - fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n"); + if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_postfix_config_dir}/mysql-verify_recipients.cf|", $value)) { + continue; } - fclose($fpp); - fclose($fps); - unset($dkim_domains); - } else { - exec("postconf -X 'smtpd_milters'"); - exec("postconf -X 'non_smtpd_milters'"); - exec("postconf -X 'milter_protocol'"); - exec("postconf -X 'milter_mail_macros'"); - exec("postconf -X 'milter_default_action'"); - - exec("postconf -e 'receive_override_options = no_address_mappings'"); - exec("postconf -e 'content_filter = " . ($configure_lmtp ? "lmtp" : "amavis" ) . ":[127.0.0.1]:10024'"); + $new_options[] = $value; + } + exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'"); - // 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'"); + // get all domains that have dkim enabled + if ( substr($mail_config['dkim_path'], strlen($mail_config['dkim_path'])-1) == '/' ) { + $mail_config['dkim_path'] = substr($mail_config['dkim_path'], 0, strlen($mail_config['dkim_path'])-1); } + $dkim_domains = $app->db->queryAllRecords('SELECT `dkim_selector`, `domain` FROM `mail_domain` WHERE `dkim` = ? ORDER BY `domain` ASC', 'y'); + $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) { + fwrite($fpp, $dkim_domain['domain'] . ' ' . $mail_config['dkim_path'] . '/' . $dkim_domain['domain'] . '.private' . "\n"); + fwrite($fps, $dkim_domain['domain'] . ' ' . $dkim_domain['dkim_selector'] . "\n"); + } + fclose($fpp); + fclose($fps); + unset($dkim_domains); + } else { + exec("postconf -X 'smtpd_milters'"); + exec("postconf -X 'non_smtpd_milters'"); + exec("postconf -X 'milter_protocol'"); + exec("postconf -X 'milter_mail_macros'"); + exec("postconf -X 'milter_default_action'"); + + exec("postconf -e 'receive_override_options = no_address_mappings'"); + 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, 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'"); } if($mail_config['content_filter'] == 'rspamd' && ($mail_config['rspamd_password'] != $old_ini_data['mail']['rspamd_password'] || $mail_config['content_filter'] != $old_ini_data['mail']['content_filter'])) { diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php index e9a6cdd633a07d17e9fb3bfd1af4974262ebea9f..112020deb7119f6c1c99dc018737239dfc148274 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'); @@ -139,7 +143,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')) { @@ -200,12 +204,31 @@ 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); 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); @@ -224,16 +247,20 @@ 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 if($type === 'spamfilter_user') { - $policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id'])); + if (intval($data['new']['policy_id']) > 0) { + $policy = $app->db->queryOneRecord("SELECT * FROM spamfilter_policy WHERE id = ?", intval($data['new']['policy_id'])); + } else { + $domain = substr($data['new']['email'], strpos($data['new']['email'], '@')); + $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 = ?", $conf['server_id'], $domain); + } $check = $app->db->queryOneRecord('SELECT `greylisting` FROM `mail_user` WHERE `server_id` = ? AND `email` = ? UNION SELECT `greylisting` FROM `mail_forwarding` WHERE `server_id` = ? AND `source` = ? ORDER BY (`greylisting` = ?) DESC', $conf['server_id'], $email_address, $conf['server_id'], $email_address, 'y'); if($check) { @@ -254,7 +281,7 @@ class rspamd_plugin { $app->system->mkdirpath($this->users_config_dir); } - if(!$this->isValidEmail($app->functions->idn_encode($email_address))) { + if((!$this->isValidEmail($app->functions->idn_encode($email_address))) || intval($data['new']['policy_id']) == 0) { if(is_file($settings_file)) { unlink($settings_file); } @@ -263,7 +290,11 @@ class rspamd_plugin { $app->load('tpl'); $tpl = new tpl(); - $tpl->newTemplate('rspamd_users.inc.conf.master'); + if (file_exists($conf['rootpath']."/conf-custom/install/rspamd_users.inc.conf.master")) { + $tpl->newTemplate($conf['rootpath']."/conf-custom/install/rspamd_users.inc.conf.master"); + } else { + $tpl->newTemplate("rspamd_users.inc.conf.master"); + } $tpl->setVar('record_identifier', 'ispc_' . $type . '_' . $entry_id); $tpl->setVar('priority', $settings_priority); @@ -274,11 +305,13 @@ class rspamd_plugin { } else { $tpl->setVar('from_email', $app->functions->idn_encode($email_address)); } + // unneded? $spamfilter appears unused $spamfilter = $data[$use_data]; } else { $tpl->setVar('to_email', $app->functions->idn_encode($email_address)); // need to get matching spamfilter user if any + // unneded? $spamfilter appears unused $spamfilter = $app->db->queryOneRecord('SELECT * FROM spamfilter_users WHERE `email` = ?', $email_address); } @@ -319,7 +352,16 @@ class rspamd_plugin { } } - if($mail_config['content_filter'] == 'rspamd'){ + if($is_domain === true) { + foreach($entries_to_update['mail_user'] as $entry) { + $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, ['old' => $entry, 'new' => $entry], true); + } + } + + if($internal !== true && $mail_config['content_filter'] == 'rspamd'){ $app->services->restartServiceDelayed('rspamd', 'reload'); } } @@ -354,6 +396,7 @@ class rspamd_plugin { } else { $record_id = intval($data['new']['wblist_id']); $wblist_file = $this->users_config_dir.'spamfilter_wblist_'.$record_id.'.conf'; + $tmp = $app->db->queryOneRecord("SELECT email FROM spamfilter_users WHERE id = ?", intval($data['new']['rid'])); if($tmp && !empty($tmp)) { $filter = array( @@ -402,11 +445,16 @@ class rspamd_plugin { } } else { $tpl = new tpl(); - $tpl->newTemplate('rspamd_wblist.inc.conf.master'); + if (file_exists($conf['rootpath']."/conf-custom/install/rspamd_wblist.inc.conf.master")) { + $tpl->newTemplate($conf['rootpath']."/conf-custom/install/rspamd_wblist.inc.conf.master"); + } else { + $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']); @@ -419,7 +467,7 @@ class rspamd_plugin { unlink($wblist_file); } - if($mail_config['content_filter'] == 'rspamd' && is_file('/etc/init.d/rspamd')) { + if($mail_config['content_filter'] == 'rspamd') { $app->services->restartServiceDelayed('rspamd', 'reload'); } } @@ -443,38 +491,69 @@ class rspamd_plugin { } if($mail_config['content_filter'] == 'rspamd'){ - if(is_file('/etc/init.d/rspamd')) $app->services->restartServiceDelayed('rspamd', 'reload'); + $app->services->restartServiceDelayed('rspamd', 'reload'); } } } - 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')) { + $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.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_users.conf.master'); + if (file_exists($conf['rootpath']."/conf-custom/install/rspamd_${f}.master")) { + $tpl->newTemplate($conf['rootpath']."/conf-custom/install/rspamd_${f}.master"); + } else { + $tpl->newTemplate("rspamd_${f}.master"); + } - $whitelist_ips = array(); - $ips = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ?", $conf['server_id']); - if(is_array($ips) && !empty($ips)){ - foreach($ips as $ip){ - $whitelist_ips[] = array('ip' => $ip['ip_address']); - } + $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('whitelist_ips', $whitelist_ips); - $app->system->file_put_contents('/etc/rspamd/local.d/users.conf', $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'); } } + + # 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) { diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index f9a316d90e195e6e35a68eceba8b67744c08a837..2fc4f0dfc7cdc0b657825dbdfe51fbb299794b53 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -168,6 +168,11 @@ class shelluser_base_plugin { $app->system->chown($homedir.'/.profile', $data['new']['username']); $app->system->chgrp($homedir.'/.profile', $data['new']['pgroup']); + // Create symlinks for conveniance, SFTP user should not land in an empty dir. + symlink('../../web', $homedir.'/web'); + symlink('../../log', $homedir.'/log'); + symlink('../../private', $homedir.'/private'); + //* Disable shell user temporarily if we use jailkit if($data['new']['chroot'] == 'jailkit') { $command = 'usermod -s /bin/false -L ? 2>/dev/null'; diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php index 2626d1e75695bcefb79605ed7ae77e211a1755dd..18db6dffac871b6cb938683c08fde155c538e6d5 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 @@ -289,6 +62,11 @@ class software_update_plugin { $app->log('Execeuted Debian / Ubuntu update', LOGLEVEL_DEBUG); } + //** Redhat, CentOS, Fedora + if(file_exists('/etc/redhat-release')) { + exec("which dnf &> /dev/null && dnf -y update || yum -y update"); + } + //** Gentoo Linux if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); diff --git a/server/plugins-available/webserver_plugin.inc.php b/server/plugins-available/webserver_plugin.inc.php index 0873826bde4de220e63b8533f965a7f08e511efd..bb884a6e2b18df73165965cab96a89fbde8cbed7 100644 --- a/server/plugins-available/webserver_plugin.inc.php +++ b/server/plugins-available/webserver_plugin.inc.php @@ -28,6 +28,13 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* compatibility for php < 5.5 (centos 7), remove when no longer needed */ +if(!function_exists("array_column")){ + function array_column($array,$column_name){ + return array_map(function($element) use($column_name){return $element[$column_name];}, $array); + } +} + class webserver_plugin { var $plugin_name = 'webserver_plugin'; @@ -37,8 +44,6 @@ class webserver_plugin { * This function is called during ispconfig installation to determine * if a symlink shall be created for this plugin. */ - - public function onInstall() { global $conf; @@ -56,7 +61,11 @@ class webserver_plugin { global $app; $app->plugins->registerAction('server_plugins_loaded', $this->plugin_name, 'check_phpini_changes'); + $app->plugins->registerEvent('server_update', $this->plugin_name, 'server_update'); + + $app->plugins->registerEvent('server_php_insert', $this->plugin_name, 'server_php_update'); + $app->plugins->registerEvent('server_php_update', $this->plugin_name, 'server_php_update'); } /** @@ -92,10 +101,6 @@ class webserver_plugin { 'mode' => 'mod', 'php_version' => 0); // default; - $check_files[] = array('file' => $web_config['php_ini_path_cgi'], - 'mode' => '', // all but 'mod' and 'fast-cgi' - 'php_version' => 0); // default; - if($fastcgi_config["fastcgi_phpini_path"] && $fastcgi_config["fastcgi_phpini_path"] != $web_config['php_ini_path_cgi']) { $check_files[] = array('file' => $fastcgi_config["fastcgi_phpini_path"], 'mode' => 'fast-cgi', @@ -106,6 +111,16 @@ class webserver_plugin { 'php_version' => 0); // default; } + $check_files[] = array('file' => $web_config['php_fpm_ini_path'], + 'mode' => 'php-fpm', + 'php_version' => 0); // default; + + if(!array_search($web_config['php_ini_path_cgi'], array_column($check_files, 'file'))) { + $check_files[] = array('file' => $web_config['php_ini_path_cgi'], + 'mode' => '', // all but 'mod' and 'fast-cgi' + 'php_version' => 0); // default; + } + //** read additional php versions of this server $php_versions = $app->db->queryAllRecords('SELECT server_php_id, php_fastcgi_ini_dir, php_fpm_ini_dir FROM server_php WHERE server_id = ?', $conf['server_id']); @@ -114,7 +129,8 @@ class webserver_plugin { $check_files[] = array('file' => $php['php_fastcgi_ini_dir'] . '/php.ini', 'mode' => 'fast-cgi', 'php_version' => $php['server_php_id']); - } elseif($php['php_fpm_ini_dir'] && $php['php_fpm_ini_dir'] . '/php.ini' != $web_config['php_ini_path_cgi']) { + } + if($php['php_fpm_ini_dir'] && $php['php_fpm_ini_dir'] . '/php.ini' != $web_config['php_fpm_ini_path']) { $check_files[] = array('file' => $php['php_fpm_ini_dir'] . '/php.ini', 'mode' => 'php-fpm', 'php_version' => $php['server_php_id']); @@ -134,6 +150,13 @@ class webserver_plugin { } if(!is_array($php_ini_md5)) $php_ini_md5 = array(); + // verify needed php file settings if that hasn't been done since 15 minutes + $now = time(); + $verify_php_ini=false; + if(!isset($php_ini_md5['last_verify_php_ini']) || ($now - intval($php_ini_md5['last_verify_php_ini']) > 15*60)) { + $verify_php_ini=true; + } + $processed = array(); foreach($check_files as $file) { $file_path = $file['file']; @@ -145,6 +168,11 @@ class webserver_plugin { if(in_array($ident, $processed) == true) continue; $processed[] = $ident; + //** check that needed php.ini settings/changes are made + if($verify_php_ini) { + $this->verify_php_ini($file); + } + //** check if md5sum of file changed $file_md5 = md5_file($file_path); if(array_key_exists($file_path, $php_ini_md5) == false || $php_ini_md5[$file_path] != $file_md5) { @@ -158,13 +186,62 @@ class webserver_plugin { $new_php_ini_md5[$file_path] = $file_md5; } + $new_php_ini_md5['last_verify_php_ini'] = time(); + //** write new md5 sums if something changed - if($php_ini_changed == true) $app->system->file_put_contents(SCRIPT_PATH . '/temp/php.ini.md5sum', base64_encode(serialize($new_php_ini_md5))); + if($php_ini_changed == true || $verify_php_ini == true) $app->system->file_put_contents(SCRIPT_PATH . '/temp/php.ini.md5sum', base64_encode(serialize($new_php_ini_md5))); unset($new_php_ini_md5); unset($php_ini_md5); unset($processed); } + /** + * The method runs each php.ini file through verify_php_ini() + */ + function server_php_update($event_name, $data) { + global $app, $conf; + + if(isset($data['new']['php_fastcgi_ini_dir'])) { + $php_ini = $data['new']['php_fastcgi_ini_dir'] . '/php.ini'; + if(file_exists($php_ini)) { + $this->verify_php_ini(array('file' => $php_ini, + 'mode' => 'fast-cgi', + 'php_version' => $data['new']['server_php_id']) + ); + } else { + $app->log("Cannot verify php.ini, file not found: $php_ini", LOGLEVEL_WARN); + } + } + if(isset($data['new']['php_fpm_ini_dir'])) { + $php_ini = $data['new']['php_fpm_ini_dir'] . '/php.ini'; + if(file_exists($php_ini)) { + $this->verify_php_ini(array('file' => $php_ini, + 'mode' => 'php-fpm', + 'php_version' => $data['new']['server_php_id']) + ); + } else { + $app->log("Cannot verify php.ini, file not found: $php_ini", LOGLEVEL_WARN); + } + } + } + + /** + * The method checks/sets needed php.ini settings + */ + public function verify_php_ini($file) { + global $app; + + if(isset($file['file']) && is_file($file['file'])) { + $php_ini = $file['file']; + // ensure opcache.validate_root = 1 + $app->system->exec_safe('grep ^opcache.validate_root ?', $php_ini); + if($app->system->last_exec_retcode() != 0) { + $app->log('verify_php_ini(): php.ini '.$php_ini.' is missing validate_root', LOGLEVEL_DEBUG); + $sed_script='s/; *opcache\.validate_root *= *.+$/opcache.validate_root = 1/g'; + $app->system->exec_safe('sed -E -i ? ?', $sed_script, $php_ini); + } + } + } /* * Checks for changes to jailkit settings in server config and schedules affected jails to be updated. @@ -245,7 +322,32 @@ class webserver_plugin { } } } + + $check_files = array(); + if ($old['php_ini_path_apache'] != $new['php_ini_path_apache']) { + $check_files[] = array('file' => $new['php_ini_path_apache'], + 'mode' => 'mod', + 'php_version' => 0); + } + + if ($old['fastcgi_phpini_path'] != $new['fastcgi_phpini_path']) { + $check_files[] = array('file' => $new['fastcgi_phpini_path'], + 'mode' => 'fast-cgi', + 'php_version' => 0); + } + if ($old['php_ini_path_cgi'] != $new['php_ini_path_cgi']) { + $check_files[] = array('file' => $new['php_ini_path_cgi'], + 'mode' => 'fast-cgi', + 'php_version' => 0); + } + if ($old['php_fpm_ini_path'] != $new['php_fpm_ini_path']) { + $check_files[] = array('file' => $web_config['php_fpm_ini_path'], + 'mode' => 'php-fpm', + 'php_version' => 0); + } + foreach ($check_files as $file) { + $this->verify_php_ini($file); + } } } -?> diff --git a/server/scripts/letsencrypt_renew_hook.sh b/server/scripts/letsencrypt_renew_hook.sh index 53fc31befd65af69b245347358de7f13c3938f6b..5ec9912f59d87728b83cf0fcd233b78146d2f456 100644 --- a/server/scripts/letsencrypt_renew_hook.sh +++ b/server/scripts/letsencrypt_renew_hook.sh @@ -12,8 +12,12 @@ ## If you need a custom hook file, create a file with the same name in ## /usr/local/ispconfig/server/conf-custom/scripts/ +## +## End the file with 'return 124' to signal that this script should not terminate. if [ -e "/usr/local/ispconfig/server/conf-custom/scripts/letsencrypt_renew_hook.sh" ] ; then - . /usr/local/ispconfig/server/conf-custom/scripts/letsencrypt_renew_hook.sh && exit 0 || exit 1; + . /usr/local/ispconfig/server/conf-custom/scripts/letsencrypt_renew_hook.sh + ret=$? + if [ $ret != 124 ]; then exit $ret; fi fi hostname=$(hostname -f) @@ -32,15 +36,15 @@ if [ -d "$lelive" ]; then pureftpdpem=/etc/ssl/private/pure-ftpd.pem; if [ -e "$pureftpdpem" ]; then chmod 600 $pureftpdpem; fi # For Red Hat, Centos or derivatives if which yum &> /dev/null 2>&1 ; then - if [ rpm -q pure-ftpd ]; then service pure-ftpd restart; fi - if [ rpm -q monit ]; then service monit restart; fi - if [ rpm -q postfix ]; then service postfix restart; fi - if [ rpm -q dovecot ]; then service dovecot restart; fi - if [ rpm -q mysql-server ]; then service mysqld restart; fi - if [ rpm -q mariadb-server ]; then service mariadb restart; fi - if [ rpm -q MariaDB-server ]; then service mysql restart; fi - if [ rpm -q nginx ]; then service nginx restart; fi - if [ rpm -q httpd ]; then service httpd restart; fi + if ( rpm -q pure-ftpd ); then service pure-ftpd restart; fi + if ( rpm -q monit ); then service monit restart; fi + if ( rpm -q postfix ); then service postfix restart; fi + if ( rpm -q dovecot ); then service dovecot restart; fi + if ( rpm -q mysql-server ); then service mysqld restart; fi + if ( rpm -q mariadb-server ); then service mariadb restart; fi + if ( rpm -q MariaDB-server ); then service mysql restart; fi + if ( rpm -q nginx ); then service nginx restart; fi + if ( rpm -q httpd ); then service httpd restart; fi # For Debian, Ubuntu or derivatives elif apt-get -v >/dev/null 2>&1 ; then if [ $(dpkg-query -W -f='${Status}' pure-ftpd-mysql 2>/dev/null | grep -c "ok installed") -eq 1 ]; then service pure-ftpd-mysql restart; fi @@ -52,4 +56,4 @@ if [ -d "$lelive" ]; then if [ $(dpkg-query -W -f='${Status}' nginx 2>/dev/null | grep -c "ok installed") -eq 1 ]; then service nginx restart; fi if [ $(dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -c "ok installed") -eq 1 ]; then service apache2 restart; fi fi -else echo `/bin/date` "Your Lets Encrypt SSL certs path for your ISPConfig server FQDN is missing.$line" >> /var/log/ispconfig/ispconfig.log; fi \ No newline at end of file +else echo `/bin/date` "Your Lets Encrypt SSL certs path for your ISPConfig server FQDN is missing.$line" >> /var/log/ispconfig/ispconfig.log; fi diff --git a/server/scripts/update_runner.sh b/server/scripts/update_runner.sh index 5647272f3a4831ea661aa2b064d49db710de641b..f3eb684328875efb4fc03ee0cdd45bc16afc885d 100644 --- a/server/scripts/update_runner.sh +++ b/server/scripts/update_runner.sh @@ -26,7 +26,7 @@ if [[ "$SOURCE" == "stable" ]] ; then elif [[ "$SOURCE" == "nightly" ]] ; then URL="https://www.ispconfig.org/downloads/ISPConfig-3-nightly.tar.gz" elif [[ "$SOURCE" == "git-develop" ]] ; then - URL="https://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=develop" + URL="https://git.ispconfig.org/ispconfig/ispconfig3/-/archive/develop/ispconfig3-develop.tar.gz" else echo "Please choose an installation source (stable, nightly, git-develop)" exit 1 @@ -40,19 +40,23 @@ 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 } - wget -O ISPConfig-3.tar.gz "${URL}" + echo "Downloading ISPConfig update." + wget -q -O ISPConfig-3.tar.gz "${URL}" if [ -f ISPConfig-3.tar.gz ] then - tar xvzf ISPConfig-3.tar.gz --strip-components=1 + echo "Unpacking ISPConfig update." + tar xzf ISPConfig-3.tar.gz --strip-components=1 cd install/ php -q \ -d disable_classes= \