7198764e180cf0af9f619a9079beeb12c286cf4a..9376d70f0ccba49ead95ef47f0ecba568ea2d6e1
2016-05-23 Marius Burkard
- added example for REST api
9376d7 diff | tree
2016-05-23 Marius Burkard
- changed json handler for REST api
ce9b51 diff | tree
2016-05-22 Till Brehm
Merge branch 'patch-1' into 'stable-3.1'
c2560a diff | tree
2016-05-21 Arkadiusz Rzadkowolski
Fix for Ubuntu 16.04 (Xenial)
5b921e diff | tree
2016-05-19 Till Brehm
Merge branch 'master' into 'stable-3.1'
dc7aa0 diff | tree
2016-05-19 Till Brehm
Merge branch 'stable-3.1' into 'stable-3.1'
9d3f20 diff | tree
2016-05-18 Marius Burkard
Merge branch 'stable-3.1' of git.ispconfig.org:ispconfig/ispconfig3 into st...
1f3c05 diff | tree
2016-05-18 Marius Burkard
- added text-overflow in list tables
293ffd diff | tree
2016-05-16 Florian Schaal
installer / updater for CentOS 7.2
2b8e51 diff | tree
2016-05-14 Florian Schaal
Fixes: #3899
d0a3ad diff | tree
2016-05-13 Marius Burkard
Merge branch 'master' into 'stable-3.1'
3cf77b diff | tree
2016-05-11 Marius Burkard
- webserver has to be restarted after letsencrypt updates
72057a diff | tree
2016-05-09 Uwe Merbeth
detect the ubuntu version based on /etc/os-release
f5daec diff | tree
2016-05-09 Florian Schaal
updated amavis-config
dda641 diff | tree
2016-05-09 Marius Burkard
Merge branch 'stable-3.1' of git.ispconfig.org:ispconfig/ispconfig3 into st...
e3f2e5 diff | tree
2016-05-09 Marius Burkard
- Added missing image, Fixes: #3881
7f468e diff | tree
2016-05-09 Marius Burkard
Merge branch 'master' into 'stable-3.1'
9e63ff diff | tree
2016-05-09 Florian Schaal
updated installer (Create auxillary postfix conf files)
616ad0 diff | tree
2016-05-06 Marius Burkard
Merge branch 'stable-3.1' into 'stable-3.1'
0ebe61 diff | tree
2016-05-06 Christian Jonak
Fix DKIM signing
08a4f4 diff | tree
2016-05-04 Marius Burkard
- changed PRIMARY keys with null values to UNIQUE
ab8baa diff | tree
2016-05-04 Marius Burkard
Merge branch 'stable-3.1'
c3189c diff | tree
2016-05-04 Marius Burkard
Merge branch 'master' into 'stable-3.1'
d933cc diff | tree
2016-05-04 Florian Schaal
allow empty servers (Fixes: #3874)
cc08f2 diff | tree
2016-05-04 Marius Burkard
Merge branch 'master' into 'stable-3.1'
f6513f diff | tree
2016-05-03 Florian Schaal
Fixes: #3873
57e982 diff | tree
2016-05-03 Marius Burkard
- Invalid value written to DB on "null" Fixes #3862
7537db diff | tree
2016-05-03 Marius Burkard
Merge branch 'stable-3.1' of git.ispconfig.org:ispconfig/ispconfig3 into st...
509227 diff | tree
2016-05-03 Marius Burkard
- remoting (json) should produce array - Changed default value for expire o...
be9026 diff | tree
2016-05-03 Marius Burkard
Merge branch 'patch-1' into 'stable-3.1'
f43994 diff | tree
2016-05-03 Marius Burkard
Merge branch 'master' into 'stable-3.1'
03d030 diff | tree
2016-04-30 Florian Schaal
add translation to dashboard (Fixes: #3865)
08f111 diff | tree
2016-04-30 Florian Schaal
allow underscore in ALIAS name (Fixes: #3866)
8beb03 diff | tree
2016-04-29 Gibts nicht
Fixed #3857
3623ba diff | tree
2016-04-29 Marius Burkard
Merge branch 'master' into 'stable-3.1'
d30f2c diff | tree
2016-04-29 Florian Schaal
sql-query
fe0bcd diff | tree
2016-04-29 Marius Burkard
Merge branch 'stable-3.1' of git.ispconfig.org:ispconfig/ispconfig3 into st...
69014b diff | tree
2016-04-29 Marius Burkard
- added missing sql column, Fixes: #3849
cf8227 diff | tree
2016-04-29 Florian Schaal
show domains with domain module enabled for websites (Fixes: #3851)
f93927 diff | tree
2016-04-29 Florian Schaal
fixed domain_list.htm
edb0b2 diff | tree
2016-04-29 Florian Schaal
Missing field label in server config (Fixes: #3856)
d88559 diff | tree
2016-04-29 Florian Schaal
allow + for local-part in dns-soa (Fixes: #3836)
844eab diff | tree
2016-04-28 Marius Burkard
Merge branch 'Patch_Updating_ISPConfig_interface_vhost_SSL_options' into 's...
d4b75b diff | tree
2016-04-28 Marius Burkard
Merge branch 'master' into 'stable-3.1'
d19234 diff | tree
2016-04-27 CSoellinger
Updating SSL options at ispconfig vhost based on the mozilla ssl configurat...
473f06 diff | tree
2016-04-27 CSoellinger
Reformat some tabs to spaces(2)
6e0b35 diff | tree
2016-04-27 Marius Burkard
- Fixed invalid apache config Fixes: #3850
b218ba diff | tree
2016-04-27 Till Brehm
Merge branch 'patch-1' into 'stable-3.1'
65dc1a diff | tree
2016-04-27 Martin Larsen
Removed hard-coded suffixes because it gets dynamically added by "$app->fun...
59c84e diff | tree
2016-04-27 Marius Burkard
- disable SSL/LE if letsencrypt could not issue certificate (verification p...
551d9a diff | tree
5 files added
63 files modified
866 ■■■■ changed files
install/dist/conf/centos72.conf.php 219 ●●●●● patch | view | raw | blame | history
install/dist/lib/centos72.lib.php 125 ●●●●● patch | view | raw | blame | history
install/dist/lib/fedora.lib.php 21 ●●●●● patch | view | raw | blame | history
install/dist/lib/gentoo.lib.php 20 ●●●●● patch | view | raw | blame | history
install/dist/lib/opensuse.lib.php 21 ●●●●● patch | view | raw | blame | history
install/install.php 9 ●●●●● patch | view | raw | blame | history
install/lib/install.lib.php 34 ●●●●● patch | view | raw | blame | history
install/sql/incremental/upd_0081.sql 2 ●●● patch | view | raw | blame | history
install/sql/incremental/upd_0082.sql 1 ●●●● patch | view | raw | blame | history
install/sql/ispconfig3.sql 6 ●●●● patch | view | raw | blame | history
install/tpl/apache_ispconfig.vhost.master 86 ●●●●● patch | view | raw | blame | history
install/tpl/debian_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/fedora_amavisd_conf.master 4 ●●●● patch | view | raw | blame | history
install/tpl/fedora_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/gentoo_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/opensuse_amavisd_conf.master 4 ●●●● patch | view | raw | blame | history
install/tpl/opensuse_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/update.php 3 ●●●●● patch | view | raw | blame | history
interface/lib/classes/json_handler.inc.php 23 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform_base.inc.php 19 ●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/de_server_config.lng 1 ●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_server_config.lng 1 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/system_config_domains_edit.htm 12 ●●●● patch | view | raw | blame | history
interface/web/client/form/client.tform.php 16 ●●●● patch | view | raw | blame | history
interface/web/client/form/reseller.tform.php 16 ●●●● patch | view | raw | blame | history
interface/web/client/templates/client_template_edit_limits.htm 2 ●●● patch | view | raw | blame | history
interface/web/client/templates/domain_list.htm 4 ●●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/modules.htm 4 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/ar_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/bg_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/br_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/ca_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/cz_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/de_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/el_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/en_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/es_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/fi_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/fr_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/hr_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/hu_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/id_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/it_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/ja_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/pl_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/pt_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/ro_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/ru_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/se_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/sk_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/tr_dashlet_modules.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_spf_edit.php 6 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_wizard.php 2 ●●● patch | view | raw | blame | history
interface/web/dns/form/dns_alias.tform.php 2 ●●● patch | view | raw | blame | history
interface/web/dns/form/dns_soa.tform.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/templates/web_sites_stats_list.htm 16 ●●●● patch | view | raw | blame | history
interface/web/sites/templates/web_vhost_domain_edit.htm 2 ●●● patch | view | raw | blame | history
interface/web/sites/web_vhost_domain_edit.php 1 ●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/ispconfig.css 3 ●●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/ispconfig.min.css 2 ●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/select2x2.png patch | view | raw | blame | history
remoting_client/examples/rest_example.php 57 ●●●●● patch | view | raw | blame | history
server/conf/apache_ispconfig.conf.master 13 ●●●● patch | view | raw | blame | history
server/conf/nginx_vhost.conf.master 8 ●●●● patch | view | raw | blame | history
server/lib/classes/cron.d/900-letsencrypt.inc.php 3 ●●●● patch | view | raw | blame | history
server/plugins-available/apache2_plugin.inc.php 31 ●●●● patch | view | raw | blame | history
server/plugins-available/nginx_plugin.inc.php 33 ●●●● patch | view | raw | blame | history
install/dist/conf/centos72.conf.php
New file
@@ -0,0 +1,219 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
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.
*/
//***  Fedora 9 default settings
//* Main
$conf['language'] = 'en';
$conf['distname'] = 'centos72';
$conf['hostname'] = 'server1.domain.tld'; // Full hostname
$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
$conf['server_id'] = 1;
$conf['init_scripts'] = '/etc/init.d';
$conf['runlevel'] = '/etc';
$conf['shells'] = '/etc/shells';
$conf['pam'] = '/etc/pam.d';
//* Services provided by this server, this selection will be overridden by the expert mode
$conf['services']['mail'] = true;
$conf['services']['web'] = true;
$conf['services']['dns'] = true;
$conf['services']['file'] = true;
$conf['services']['db'] = true;
$conf['services']['vserver'] = true;
//* MySQL
$conf['mysql']['installed'] = false; // will be detected automatically during installation
$conf['mysql']['init_script'] = 'mariadb';
$conf['mysql']['host'] = 'localhost';
$conf['mysql']['ip'] = '127.0.0.1';
$conf['mysql']['port'] = '3306';
$conf['mysql']['database'] = 'dbispconfig';
$conf['mysql']['admin_user'] = 'root';
$conf['mysql']['admin_password'] = '';
$conf['mysql']['charset'] = 'utf8';
$conf['mysql']['ispconfig_user'] = 'ispconfig';
$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
$conf['mysql']['master_slave_setup'] = 'n';
$conf['mysql']['master_host'] = '';
$conf['mysql']['master_database'] = 'dbispconfig';
$conf['mysql']['master_admin_user'] = 'root';
$conf['mysql']['master_admin_password'] = '';
$conf['mysql']['master_ispconfig_user'] = '';
$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
//* Apache
$conf['apache']['installed'] = false; // will be detected automatically during installation
$conf['apache']['user'] = 'apache';
$conf['apache']['group'] = 'apache';
$conf['apache']['init_script'] = 'httpd';
$conf['apache']['version'] = '2.2';
$conf['apache']['vhost_conf_dir'] = '/etc/httpd/conf/sites-available';
$conf['apache']['vhost_conf_enabled_dir'] = '/etc/httpd/conf/sites-enabled';
$conf['apache']['vhost_port'] = '8080';
$conf['apache']['php_ini_path_apache'] = '/etc/php.ini';
$conf['apache']['php_ini_path_cgi'] = '/etc/php.ini';
//* Website base settings
$conf['web']['website_basedir'] = '/var/www';
$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
//* Apps base settings
$conf['web']['apps_vhost_ip'] = '_default_';
$conf['web']['apps_vhost_port'] = '8081';
$conf['web']['apps_vhost_servername'] = '';
$conf['web']['apps_vhost_user'] = 'ispapps';
$conf['web']['apps_vhost_group'] = 'ispapps';
//* Fastcgi
$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/';
$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
//* Postfix
$conf['postfix']['installed'] = false; // will be detected automatically during installation
$conf['postfix']['config_dir'] = '/etc/postfix';
$conf['postfix']['init_script'] = 'postfix';
$conf['postfix']['user'] = 'postfix';
$conf['postfix']['group'] = 'postfix';
$conf['postfix']['vmail_userid'] = '5000';
$conf['postfix']['vmail_username'] = 'vmail';
$conf['postfix']['vmail_groupid'] = '5000';
$conf['postfix']['vmail_groupname'] = 'vmail';
$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
//* Mailman
$conf['mailman']['installed'] = false; // will be detected automatically during installation
$conf['mailman']['config_dir'] = '/etc/mailman';
$conf['mailman']['init_script'] = 'mailman';
//* Getmail
$conf['getmail']['installed'] = false; // will be detected automatically during installation
$conf['getmail']['config_dir'] = '/etc/getmail';
$conf['getmail']['program'] = '/usr/bin/getmail';
//* Courier
$conf['courier']['installed'] = false; // will be detected automatically during installation
$conf['courier']['config_dir'] = '/etc/authlib';
$conf['courier']['courier-authdaemon'] = 'courier-authlib';
$conf['courier']['courier-imap'] = 'courier-imap';
$conf['courier']['courier-imap-ssl'] = '';
$conf['courier']['courier-pop'] = '';
$conf['courier']['courier-pop-ssl'] = '';
//* Dovecot
$conf['dovecot']['installed'] = false; // will be detected automatically during installation
$conf['dovecot']['config_dir'] = '/etc/dovecot';
$conf['dovecot']['init_script'] = 'dovecot';
//* SASL
$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
$conf['saslauthd']['config'] = '/etc/sysconfig/saslauthd';
$conf['saslauthd']['init_script'] = 'saslauthd';
//* Amavisd
$conf['amavis']['installed'] = false; // will be detected automatically during installation
$conf['amavis']['config_dir'] = '/etc/amavisd';
$conf['amavis']['init_script'] = 'amavisd';
//* ClamAV
$conf['clamav']['installed'] = false; // will be detected automatically during installation
$conf['clamav']['init_script'] = 'clamd@amavisd';
//* Pureftpd
$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
$conf['pureftpd']['init_script'] = 'pure-ftpd';
//* MyDNS
$conf['mydns']['installed'] = false; // will be detected automatically during installation
$conf['mydns']['config_dir'] = '/etc';
$conf['mydns']['init_script'] = 'mydns';
//* PowerDNS
$conf['powerdns']['installed'] = false; // will be detected automatically during installation
$conf['powerdns']['database'] = 'powerdns';
$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
$conf['powerdns']['init_script'] = 'pdns';
//* BIND DNS Server
$conf['bind']['installed'] = false; // will be detected automatically during installation
$conf['bind']['bind_user'] = 'named';
$conf['bind']['bind_group'] = 'named';
$conf['bind']['bind_zonefiles_dir'] = '/var/named';
$conf['bind']['named_conf_path'] = '/etc/named.conf';
$conf['bind']['named_conf_local_path'] = '/etc/named.conf.local';
$conf['bind']['init_script'] = 'named';
//* Jailkit
$conf['jailkit']['installed'] = false; // will be detected automatically during installation
$conf['jailkit']['config_dir'] = '/etc/jailkit';
$conf['jailkit']['jk_init'] = 'jk_init.ini';
$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* Squid
$conf['squid']['installed'] = false; // will be detected automatically during installation
$conf['squid']['config_dir'] = '/etc/squid';
$conf['squid']['init_script'] = 'squid';
//* Nginx
$conf['nginx']['installed'] = false; // will be detected automatically during installation
$conf['nginx']['user'] = 'nginx';
$conf['nginx']['group'] = 'nginx';
$conf['nginx']['config_dir'] = '/etc/nginx';
$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
$conf['nginx']['init_script'] = 'nginx';
$conf['nginx']['vhost_port'] = '8080';
$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
$conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
//* cron
$conf['cron']['init_script'] = 'crond';
$conf['cron']['crontab_dir'] = '/etc/cron.d';
$conf['cron']['wget'] = '/usr/bin/wget';
//* OpenVZ
$conf['openvz']['installed'] = false;
?>
install/dist/lib/centos72.lib.php
New file
@@ -0,0 +1,125 @@
<?php
/*
Copyright (c) 2014, Till Brehm, ISPConfig UG
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.
*/
require_once realpath(dirname(__FILE__)) . '/centos_base.lib.php';
class installer extends installer_centos {
    protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock';
     public function configure_amavis() {
        global $conf;
        // amavisd user config file
        $configfile = 'fedora_amavisd_conf';
        if(!is_dir($conf["amavis"]["config_dir"])) mkdir($conf["amavis"]["config_dir"]);
        if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf')) copy($conf["amavis"]["config_dir"].'/amavisd.conf', $conf["amavis"]["config_dir"].'/amavisd.conf~');
        if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf~')) exec('chmod 400 '.$conf["amavis"]["config_dir"].'/amavisd.conf~');
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
        $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
        $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
        $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
        $content = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $content);
        $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
        $content = str_replace('{hostname}', $conf['hostname'], $content);
        $content = str_replace('/var/spool/amavisd/clamd.sock', $this->clamav_socket, $content);
        wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
        chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
        exec('chgrp amavis '.$conf['amavis']['config_dir'].'/amavisd.conf');
        // Adding the amavisd commands to the postfix configuration
        $postconf_commands = array (
            'content_filter = amavis:[127.0.0.1]:10024',
            'receive_override_options = no_address_mappings'
        );
        // Make a backup copy of the main.cf file
        copy($conf["postfix"]["config_dir"].'/main.cf', $conf["postfix"]["config_dir"].'/main.cf~2');
        // 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");
        }
        $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);
            }
        }
        // Create the director for DKIM-Keys
        if(!is_dir('/var/lib/amavis/dkim')) mkdir('/var/lib/amavis/dkim', 0750, true);
            // get shell-user for amavis
            $amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd');
            if(!empty($amavis_user)) {
                $amavis_user=rtrim($amavis_user, ":");
                exec('chown '.$amavis_user.' /var/lib/amavis/dkim');
             }
            // get shell-group for amavis
            $amavis_group=exec('grep -o "^amavis:\|^vscan:" /etc/group');
            if(!empty($amavis_group)) {
                $amavis_group=rtrim($amavis_group, ":");
                exec('chgrp '.$amavis_group.' /var/lib/amavis/dkim');
        }
        removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
        replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
        replaceLine('/etc/clamd.d/scan.conf', 'Example', '# Example', 1);
    }
    // everything else is inherited from installer_centos class
}
?>
install/dist/lib/fedora.lib.php
@@ -185,6 +185,27 @@
        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~');
install/dist/lib/gentoo.lib.php
@@ -135,6 +135,26 @@
        touch($config_dir.'/nested_header_checks');
        touch($config_dir.'/body_checks');
        //* 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~');
install/dist/lib/opensuse.lib.php
@@ -197,6 +197,27 @@
        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~');
install/install.php
@@ -140,6 +140,8 @@
//****************************************************************************************************
$inst = new installer();
if (!$inst->get_php_version()) die('ISPConfig requieres PHP '.$inst->min_php."\n");
$retval=shell_exec("which which");
if (empty($retval)) die ("ISPConfig requieres which \n");
swriteln($inst->lng('    Following will be a few questions for primary configuration so be careful.'));
swriteln($inst->lng('    Default values are in [brackets] and can be accepted with <ENTER>.'));
@@ -342,11 +344,15 @@
        $conf['services']['dns'] = true;
    }
*/
    //* Configure Bind
    if($conf['bind']['installed']) {
        swriteln('Configuring BIND');
        $inst->configure_bind();
        $conf['services']['dns'] = true;
        if(!is_installed('haveged')) {
            swriteln("[INFO] haveged not detected - DNSSEC can fail");
        }
    }
    //* Configure MyDNS
    if($conf['mydns']['installed']) {
@@ -727,6 +733,9 @@
            swriteln('Configuring BIND');
            $inst->configure_bind();
            $conf['services']['dns'] = true;
            if(!is_installed('haveged')) {
                swriteln("[INFO] haveged not detected - DNSSEC can fail");
            }
        }
        //* Configure MyDNS
        if($conf['mydns']['installed']) {
install/lib/install.lib.php
@@ -66,8 +66,32 @@
    $distid = '';
    $distbaseid = '';
    //** Debian or Ubuntu
    if(file_exists('/etc/debian_version')) {
    //** Debian or Ubuntu
    if (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu')) {
        $os_release = file_get_contents('/etc/os-release');
        if (strstr(trim($os_release), 'LTS')) {
            $lts = " LTS";
        } else {
            $lts = "";
        }
        preg_match("/.*VERSION=\"(.*)\".*/ui", $os_release, $ver);
        $ver = str_replace("LTS", "", $ver[1]);
        $ver = explode(" ", $ver, 2);
        $relname = end($ver);
        $relname = "(" . trim(trim($relname), "()") . ")";
        $distname = 'Ubuntu';
        $ver = reset($ver);
        if($ver == "16.04") {
            $distid = 'ubuntu1604';
        } else {
            $distid = 'debian40';
        }
        $distbaseid = 'debian';
        $distver = $ver . $lts . " " . $relname;
        swriteln("Operating System: " . $distver . "\n");
    } //** Debian / Ubuntu
    elseif(file_exists('/etc/debian_version')) {
        if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) {
            if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) {
                $lts=" LTS";
@@ -280,6 +304,12 @@
            $distid = 'centos53';
            $distbaseid = 'fedora';
            swriteln("Operating System: CentOS 6 or compatible\n");
        } elseif(stristr($content, 'CentOS Linux release 7.2')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos72';
            $distbaseid = 'fedora';
            swriteln("Operating System: CentOS 7.2\n");
        } elseif(stristr($content, 'CentOS Linux release 7')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
install/sql/incremental/upd_0081.sql
@@ -198,7 +198,7 @@
    `traffic_date` date NOT NULL,
    `in_bytes` bigint(32) unsigned NOT NULL,
    `out_bytes` bigint(32) unsigned NOT NULL, 
    PRIMARY KEY (`hostname`,`traffic_date`)
    UNIQUE KEY (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `mail_forwarding` ADD COLUMN `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `active`;
install/sql/incremental/upd_0082.sql
New file
@@ -0,0 +1 @@
ALTER TABLE `directive_snippets` ADD `master_directive_snippets_id` int(11) unsigned NOT NULL DEFAULT '0' AFTER `active`;
install/sql/ispconfig3.sql
@@ -657,7 +657,7 @@
  `traffic_date` date NOT NULL,
  `in_bytes` bigint(32) unsigned NOT NULL,
  `out_bytes` bigint(32) unsigned NOT NULL,
  PRIMARY KEY (`hostname`,`traffic_date`)
  UNIQUE KEY (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -1153,7 +1153,7 @@
  `veid` int(11) NOT NULL DEFAULT '0',
  `traffic_date` date NULL DEFAULT NULL,
  `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`veid`,`traffic_date`)
  UNIQUE KEY (`veid`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
@@ -2043,7 +2043,7 @@
  `hostname` varchar(255) NOT NULL DEFAULT '',
  `traffic_date` date NULL DEFAULT NULL,
  `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
  PRIMARY KEY  (`hostname`,`traffic_date`)
  UNIQUE KEY  (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-- --------------------------------------------------------
install/tpl/apache_ispconfig.vhost.master
@@ -8,101 +8,111 @@
<VirtualHost _default_:<tmpl_var name="vhost_port">>
  ServerAdmin webmaster@localhost
  <FilesMatch "\.ph(p3?|tml)$">
    SetHandler None
  </FilesMatch>
  <IfModule mod_fcgid.c>
    DocumentRoot /var/www/ispconfig/
    SuexecUserGroup ispconfig ispconfig
    <Directory /var/www/ispconfig/>
      Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
      AllowOverride AuthConfig Indexes Limit Options FileInfo
      <FilesMatch "\.php$">
          SetHandler fcgid-script
      </FilesMatch>
      <FilesMatch "\.php$">
        SetHandler fcgid-script
      </FilesMatch>
      FCGIWrapper /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter .php
      <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
      Require all granted
      <tmpl_else>
      Require all granted
      <tmpl_else>
      Order allow,deny
      Allow from all
      </tmpl_if>
      </tmpl_if>
    </Directory>
    IPCCommTimeout  7200
    MaxRequestLen 15728640
    MaxRequestLen 15728640
  </IfModule>
  <IfModule mpm_itk_module>
    DocumentRoot /usr/local/ispconfig/interface/web/
    AssignUserId ispconfig ispconfig
    AssignUserId ispconfig ispconfig
    AddType application/x-httpd-php .php
    <Directory /usr/local/ispconfig/interface/web>
      # php_admin_value open_basedir "/usr/local/ispconfig/interface:/usr/share:/tmp"
      Options +FollowSymLinks
      AllowOverride None
      <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
      Require all granted
      <tmpl_else>
      Require all granted
      <tmpl_else>
      Order allow,deny
      Allow from all
      </tmpl_if>
      php_value magic_quotes_gpc        0
      </tmpl_if>
      php_value magic_quotes_gpc        0
    </Directory>
  </IfModule>
  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off
  <IfModule mod_security2.c>
    SecRuleEngine Off
  </IfModule>
  # SSL Configuration
  <tmpl_var name="ssl_comment">SSLEngine On
  <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3
  <tmpl_else>
  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
  </tmpl_if>
  <tmpl_var name="ssl_comment">SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
  <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
  <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
  <tmpl_var name="ssl_comment">SSLCipherSuite 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
  <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
  <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
  <tmpl_var name="ssl_comment">SSLCompression Off
  </tmpl_if>
  <tmpl_if name='apache_version' op='>=' value='2.4.11' format='version'>
  <tmpl_var name="ssl_comment">SSLSessionTickets Off
  </tmpl_if>
  <IfModule mod_headers.c>
    Header always add Strict-Transport-Security "max-age=15768000"
  </IfModule>
<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
  <tmpl_var name="ssl_comment">SSLUseStapling on
  <tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
  <tmpl_var name="ssl_comment">SSLUseStapling On
  <tmpl_var name="ssl_comment">SSLStaplingResponderTimeout 5
  <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors off
</tmpl_if>
  <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors Off
  </tmpl_if>
</VirtualHost>
<tmpl_if name='apache_version' op='>=' value='2.4' format='version'>
<tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
<IfModule mod_ssl.c>
  <tmpl_var name="ssl_comment">SSLStaplingCache shmcb:/var/run/ocsp(128000)
</IfModule>
</tmpl_if>
<Directory /var/www/php-cgi-scripts>
    AllowOverride None
    <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
    Require all denied
    <tmpl_else>
    Order Deny,Allow
    Deny from all
    </tmpl_if>
  AllowOverride None
  <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
  Require all denied
  <tmpl_else>
  Order Deny,Allow
  Deny from all
  </tmpl_if>
</Directory>
<Directory /var/www/php-fcgi-scripts>
    AllowOverride None
    <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
    Require all denied
    <tmpl_else>
    Order Deny,Allow
    Deny from all
    </tmpl_if>
</Directory>
  AllowOverride None
  <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
  Require all denied
  <tmpl_else>
  Order Deny,Allow
  Deny from all
  </tmpl_if>
</Directory>
install/tpl/debian_postfix.conf.master
@@ -26,7 +26,7 @@
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
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/fedora_amavisd_conf.master
@@ -146,8 +146,8 @@
$myhostname = '{hostname}';
$notify_method  = 'smtp:[127.0.0.1]:10027';
$forward_method = 'smtp:[127.0.0.1]:10025';  # set to undef with milter!
$notify_method  = 'smtp:*:*';
$forward_method = 'smtp:*:*';  # set to undef with milter!
# $os_fingerprint_method = 'p0f:127.0.0.1:2345';  # to query p0f-analyzer.pl
install/tpl/fedora_postfix.conf.master
@@ -23,7 +23,7 @@
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
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/gentoo_postfix.conf.master
@@ -22,7 +22,7 @@
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
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/opensuse_amavisd_conf.master
@@ -145,8 +145,8 @@
$myhostname = 'linux-jfp8.site';
$notify_method  = 'smtp:[127.0.0.1]:10027';
$forward_method = 'smtp:[127.0.0.1]:10025';  # set to undef with milter!
$notify_method  = 'smtp:*:*';
$forward_method = 'smtp:*:*';  # set to undef with milter!
# $final_virus_destiny      = D_DISCARD;
# $final_banned_destiny     = D_BOUNCE;
install/tpl/opensuse_postfix.conf.master
@@ -25,7 +25,7 @@
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
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/update.php
@@ -378,6 +378,9 @@
        } elseif($conf['bind']['installed'] == true) {
            swriteln('Configuring BIND');
            $inst->configure_bind();
            if(!is_installed('haveged')) {
                swriteln("[INFO] haveged not detected - DNSSEC can fail");
            }
        } else {
            swriteln('Configuring MyDNS');
            $inst->configure_mydns();
interface/lib/classes/json_handler.inc.php
@@ -88,15 +88,11 @@
        $keys = array_keys($_GET);
        $method = reset($keys);
        $params = array();
        if(is_array($_POST)) {
            foreach($_POST as $key => $val) {
                $tmp = json_decode($val);
                if(!$tmp) $params[] = $val;
                else $params[] = (array)$tmp;
            }
        }
        $raw = file_get_contents("php://input");
        $json = json_decode($raw, true);
        if(!is_array($json)) $this->_return_json('invalid_data', 'The JSON data sent to the api is invalid');
        if(array_key_exists($method, $this->methods) == false) {
            $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist');
        }
@@ -109,7 +105,14 @@
        if(method_exists($this->classes[$class_name], $method) == false) {
            $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist in the class it was expected (' . $class_name . ')');
        }
        $methObj = new ReflectionMethod($this->classes[$class_name], $method);
        foreach($methObj->getParameters() as $param) {
            $pname = $param->name;
            if(isset($json[$pname])) $params[] = $json[$pname];
            else $params[] = null;
        }
        try {
            $this->_return_json('ok', '', call_user_func_array(array($this->classes[$class_name], $method), $params));
        } catch(SoapFault $e) {
interface/lib/classes/tform_base.inc.php
@@ -831,7 +831,7 @@
                }
                //* Add slashes to all records, when we encode data which shall be inserted into mysql.
                if($dbencode == true) $new_record[$key] = $app->db->quote($new_record[$key]);
                if($dbencode == true && !is_null($new_record[$key])) $new_record[$key] = $app->db->quote($new_record[$key]);
            }
        }
        return $new_record;
@@ -973,13 +973,22 @@
                        $this->errorMessage .= $errmsg."<br />\r\n";
                    }
                }
                break;
            case 'ISEMAIL':
                $error = false;
                if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
                if($validator['allowempty'] == 'y' && $field_value == '') {
                    //* Do nothing
                } else {
                    if(function_exists('filter_var')) {
                        if(filter_var($field_value, FILTER_VALIDATE_EMAIL) === false) {
                            $error = true;
                        } else {
                            if (!preg_match("/^[^\\+]+$/", $field_value)) { // * disallow + in local-part
                                $error = true;
                            }
                        }
                        if ($error) {
                            $errmsg = $validator['errmsg'];
                            if(isset($this->wordbook[$errmsg])) {
                                $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
@@ -987,8 +996,10 @@
                                $this->errorMessage .= $errmsg."<br />\r\n";
                            }
                        }
                    } else $this->errorMessage .= "function filter_var missing <br />\r\n";
                }
                unset($error);
                break;
            case 'ISINT':
                if(function_exists('filter_var') && $field_value < 2147483647) {
@@ -1028,7 +1039,7 @@
                break;
            case 'V6PREFIXLENGTH':
                // find shortes ipv6 subnet can`t be longer
                $sql_v6 = $app->db->queryOneRecord("SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' ORDER BY CHAR_LENGTH(ip_address) ASC LIMIT 0,1;");
                $sql_v6 = $app->db->queryOneRecord("SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' ORDER BY CHAR_LENGTH(ip_address) ASC LIMIT 0,1");
                $sql_v6_explode=explode(':',$sql_v6['ip_address']);
                $explode_field_value = explode(':',$field_value);
                if (count($sql_v6_explode) < count($explode_field_value) && isset($sql_v6['ip_address'])) {
@@ -1233,7 +1244,7 @@
                            }
                        } else {
                            $sql_insert_key .= "`$key`, ";
                            $sql_insert_val .= "'".$record[$key]."', ";
                            $sql_insert_val .= (is_null($record[$key]) ? 'NULL' : "'".$record[$key]."'") . ", ";
                        }
                    } else {
                        if($field['formtype'] == 'PASSWORD') {
@@ -1260,7 +1271,7 @@
                                $sql_update .= "`$key` = '".$record[$key]."', ";
                            }
                        } else {
                            $sql_update .= "`$key` = '".$record[$key]."', ";
                            $sql_update .= "`$key` = " . (is_null($record[$key]) ? 'NULL' : "'".$record[$key]."'") . ", ";
                        }
                    }
                } else {
interface/web/admin/lib/lang/de_server_config.lng
@@ -173,6 +173,7 @@
$wb['backup_mode_txt'] = 'Backupmodus';
$wb['backup_mode_userzip'] = 'Backup Dateien gehören dem Web Benutzer (.zip Datei)';
$wb['backup_mode_rootgz'] = 'Backup aller Dateien des Webverzeichnisses als Root Benutzer';
$wb['backup_time_txt'] = 'Backupzeit';
$wb['firewall_txt'] = 'Firewall';
$wb['mailbox_quota_stats_txt'] = 'E-Mailkonto Beschränkung Statistiken';
$wb['enable_ip_wildcard_txt'] = 'IP Adressen Wildcard (*) aktivieren';
interface/web/admin/lib/lang/en_server_config.lng
@@ -101,6 +101,7 @@
$wb["backup_mode_txt"] = 'Backup mode';
$wb["backup_mode_userzip"] = 'Backup web files owned by web user as zip';
$wb["backup_mode_rootgz"] = 'Backup all files in web directory as root user';
$wb["backup_time_txt"] = 'Backup time';
$wb["server_type_txt"] = 'Server Type';
$wb["nginx_vhost_conf_dir_txt"] = 'Nginx Vhost config dir';
$wb["nginx_vhost_conf_enabled_dir_txt"] = 'Nginx Vhost config enabled dir';
interface/web/admin/templates/system_config_domains_edit.htm
@@ -6,13 +6,13 @@
<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
            <div class="form-group">
                <div style="float:left;width:100%">
                    <p class="label" style="width:270px">{tmpl_var name='use_domain_module_txt'}</p>
                    <div class="col-sm-9">
                        {tmpl_var name='use_domain_module'}
                    </div>
                <div class="col-sm-3 text-right">
                    {tmpl_var name='use_domain_module'}
                </div>
                <div style="float:left;width:500px;margin-top:20px">{tmpl_var name='use_domain_module_hint'}</div>
                <div class="col-sm-9">
                    <p><strong>{tmpl_var name='use_domain_module_txt'}</strong></p>
                    <p>{tmpl_var name='use_domain_module_hint'}</p>
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">{tmpl_var name='new_domain_txt'}</label>
interface/web/client/form/client.tform.php
@@ -594,9 +594,7 @@
                'class'=> 'custom_datasource',
                'function'=> 'client_servers'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_mail_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'mail_servers_used'),
@@ -919,9 +917,7 @@
                'class'=> 'custom_datasource',
                'function'=> 'client_servers'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_web_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'web_servers_used'),
@@ -1141,9 +1137,7 @@
                'class'=> 'custom_datasource',
                'function'=> 'client_servers'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_dns_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'dns_servers_used'),
@@ -1238,9 +1232,7 @@
                'class'=> 'custom_datasource',
                'function'=> 'client_servers'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_db_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'db_servers_used'),
interface/web/client/form/reseller.tform.php
@@ -593,9 +593,7 @@
                'keyfield'=> 'server_id',
                'valuefield'=> 'server_name'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_mail_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'mail_servers_used'),
@@ -918,9 +916,7 @@
                'keyfield'=> 'server_id',
                'valuefield'=> 'server_name'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_web_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'web_servers_used'),
@@ -1138,9 +1134,7 @@
                'keyfield'=> 'server_id',
                'valuefield'=> 'server_name'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_dns_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'dns_servers_used'),
@@ -1238,9 +1232,7 @@
                'keyfield'=> 'server_id',
                'valuefield'=> 'server_name'
            ),
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                    'errmsg'=> 'no_db_server_error'),
                1 => array ( 'type' => 'CUSTOM',
            'validators'    => array (  0 => array ( 'type' => 'CUSTOM',
                    'class' => 'validate_client',
                    'function' => 'check_used_servers',
                    'errmsg'=> 'db_servers_used'),
interface/web/client/templates/client_template_edit_limits.htm
@@ -138,7 +138,7 @@
        </a>
      </h4>
    </div>
    <div id="collapseMail" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingMail>
    <div id="collapseMail" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingMail">
      <div class="panel-body">
                <div class="form-group">
                    <label for="limit_maildomain" class="col-sm-3 control-label">{tmpl_var name='limit_maildomain_txt'}</label>
interface/web/client/templates/domain_list.htm
@@ -45,10 +45,10 @@
            <tfoot>
                <tr>
                    <td colspan="4"><tmpl_var name="paging"></td>
                    <td colspan="3"><tmpl_var name="paging"></td>
                </tr>
            </tfoot>
            </table>
</div>
        
interface/web/dashboard/dashlets/templates/modules.htm
@@ -9,8 +9,8 @@
                <div class='title'>{tmpl_var name='modules_title'}</div>
              </div>
            </div>
            <a href='#' class='btn btn-default button' data-capp='{tmpl_var name="modules_name"}'>Go to {tmpl_var name='modules_title'}</a>
            <a href='#' class='btn btn-default button' data-capp='{tmpl_var name="modules_name"}'>{tmpl_var name='go_to_txt'} {tmpl_var name='modules_title'}</a>
        </li>
    </tmpl_loop>
    </ul>
    </div>
    </div>
interface/web/dashboard/lib/lang/ar_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/bg_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Налични Модули';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/br_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Módulos Disponíveis';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/ca_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Modules disponibles';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/cz_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Dostupné moduly';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/de_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Verfügbare Module';
$wb['go_to_txt'] = 'Gehe zu';
?>
interface/web/dashboard/lib/lang/el_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Διαθέσιμα αρθρώματα';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/en_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = "Available Modules";
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/es_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Módulos disponibles';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/fi_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/fr_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Modules disponibles';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/hr_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Dostupni moduli';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/hu_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Elérhető Modulok';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/id_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Modul yang tersedia';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/it_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Moduli disponibili';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/ja_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/nl_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Beschikbare modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/pl_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Dostępne moduły';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/pt_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/ro_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/ru_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Доступные модули';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/se_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Tillgängliga moduler';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/sk_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Available Modules';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dashboard/lib/lang/tr_dashlet_modules.lng
@@ -1,3 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Kullanılabilecek Modüller';
$wb['go_to_txt'] = 'Go to';
?>
interface/web/dns/dns_spf_edit.php
@@ -163,7 +163,7 @@
        }
        $spf_ip = trim($this->dataRecord['spf_ip']);
        if (!empty($spf_ip)) {
            $rec = split(' ', $spf_ip);
            $rec = explode(' ', $spf_ip);
            foreach ($rec as $ip) {
                $temp_ip = explode('/', $ip);
                if (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
@@ -187,7 +187,7 @@
        }
        $spf_hostname = trim($this->dataRecord['spf_hostname']);
        if (!empty($spf_hostname)) {
            $rec = split(' ', $spf_hostname);
            $rec = explode(' ', $spf_hostname);
            foreach ($rec as $hostname) { 
                if (preg_match('/^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $hostname)) 
                    $spf_record[] = 'a:' . $hostname;
@@ -200,7 +200,7 @@
        }
        $spf_domain = trim($this->dataRecord['spf_domain']);
        if (!empty($spf_domain)) {
            $rec = split(' ', $spf_domain);
            $rec = explode(' ', $spf_domain);
            foreach ($rec as $domain) {
                if (preg_match('/^[_a-zA-Z0-9\\.\\-\\*]{0,64}$/', $domain))
                    $spf_record[] = 'include:' . $domain;
interface/web/dns/dns_wizard.php
@@ -267,7 +267,7 @@
    elseif(isset($_POST['ns2']) && !preg_match('/^[\w\.\-]{2,64}\.[a-zA-Z0-9]{2,30}$/', $_POST['ns2'])) $error .= $app->lng('error_ns2_regex').'<br />';
    if(isset($_POST['email']) && $_POST['email'] == '') $error .= $app->lng('error_email_empty').'<br />';
    elseif(isset($_POST['email']) && !preg_match('/^\w+[\w.-]*\w+@\w+[\w.-]*\w+\.[a-z0-9\-]{2,30}$/i', $_POST['email'])) $error .= $app->lng('error_email_regex').'<br />';
    elseif(isset($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) $error .= $app->lng('error_email_regex').'<br />';
    // make sure that the record belongs to the client group and not the admin group when admin inserts it
    if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($_POST['client_group_id'])) {
interface/web/dns/form/dns_alias.tform.php
@@ -88,7 +88,7 @@
            'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
                    'errmsg'=> 'name_error_empty'),
                1 => array ( 'type' => 'REGEX',
                    'regex' => '/^[a-zA-Z0-9\.\-]{1,255}$/',
                    'regex' => '/^[a-zA-Z0-9\.\-\_]{1,255}$/',
                    'errmsg'=> 'name_error_regex'),
            ),
            'default' => '',
interface/web/dns/form/dns_soa.tform.php
@@ -137,7 +137,7 @@
            'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
                    'errmsg'=> 'mbox_error_empty'),
                1 => array ( 'type' => 'REGEX',
                    'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}\.$/',
                    'regex' => '/^[a-zA-Z0-9\.\-\_\+]{0,255}\.$/',
                    'errmsg'=> 'mbox_error_regex'),
            ),
            'default' => '',
interface/web/sites/templates/web_sites_stats_list.htm
@@ -31,10 +31,10 @@
                <tmpl_loop name="records">
                    <tr>
                        <td><a target="_blank" href="http://{tmpl_var name="domain"}/stats">{tmpl_var name="domain"}</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_month"} MB</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_month"} MB</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_year"} MB</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_year"} MB</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_month"}</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_month"}</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="this_year"}</a></td>
                        <td><a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="last_year"}</a></td>
                        <td class="text-right"></td>
                    </tr>
                </tmpl_loop>
@@ -45,10 +45,10 @@
                </tmpl_unless>
                    <tr>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_txt"}</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_month"} MB</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_month"} MB</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_year"} MB</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_year"} MB</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_month"}</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_month"}</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_this_year"}</a></td>
                        <td><a href="#" onclick="return false;" style="font-weight:bold;">{tmpl_var name="sum_last_year"}</a></td>
                        <td class="text-right"></td>
                    </tr>
                </tbody>
interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -74,7 +74,7 @@
                    {tmpl_var name='ip_address'}
                </select></div>
            </div>
            <div class="form-group" style="display:none">
            <div class="form-group">
                <label for="ipv6_address" class="col-sm-3 control-label">{tmpl_var name='ipv6_address_txt'}</label>
                <div class="col-sm-9"><select name="ipv6_address" id="ipv6_address" class="form-control">
                    {tmpl_var name='ipv6_address'}
interface/web/sites/web_vhost_domain_edit.php
@@ -757,6 +757,7 @@
         * Now we have to check, if we should use the domain-module to select the domain
         * or not
         */
        $settings = $app->getconf->get_global_config('domains');
        if ($settings['use_domain_module'] == 'y') {
            /*
             * The domain-module is in use.
interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -231,6 +231,9 @@
    transition: background ease 500ms; }
    .table tbody tr:last-child {
      border-radius: 4px; }
    .table tbody tr td {
      text-overflow: ellipsis;
      overflow-x: hidden; }
.tfooter {
  margin-top: -1px;
interface/web/themes/default/assets/stylesheets/ispconfig.min.css
@@ -1 +1 @@
body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0}
body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.table tbody tr td{text-overflow:ellipsis;overflow-x:hidden}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0}
interface/web/themes/default/assets/stylesheets/select2x2.png
remoting_client/examples/rest_example.php
New file
@@ -0,0 +1,57 @@
<?php
$remote_user = 'test';
$remote_pass = 'apipassword';
$remote_url = 'https://yourserver.com:8080/remote/json.php';
function restCall($method, $data) {
    global $remote_url;
    if(!is_array($data)) return false;
    $json = json_encode($data);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_POST, 1);
    if($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    // needed for self-signed cert
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    // end of needed for self-signed cert
    curl_setopt($curl, CURLOPT_URL, $remote_url . '?' . $method);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}
$result = restCall('login', array('username' => $remote_user, 'password' => $remote_pass, 'client_login' => false));
if($result) {
    $data = json_decode($result, true);
    if(!$data) die("ERROR!\n");
    $session_id = $data['response'];
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array('username' => 'abcde')));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    // or by id
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => 2));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    // or all
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array()));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    $result = restCall('logout', array('session_id' => $session_id));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get logout result\n";
}
server/conf/apache_ispconfig.conf.master
@@ -6,6 +6,12 @@
LogFormat "%v %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig
<IfModule mod_headers.c>
    <LocationMatch "/.well-known/acme-challenge/*">
        Header set Content-Type "text/plain"
    </LocationMatch>
</IfModule>
<Directory /var/www/clients>
    AllowOverride None
    <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
@@ -14,13 +20,6 @@
    Order Deny,Allow
    Deny from all
    </tmpl_if>
 <IfModule mod_headers.c>
    <LocationMatch "/.well-known/acme-challenge/*">
      Header set Content-Type "text/plain"
    </LocationMatch>
  </IfModule>
</Directory>
# Do not allow access to the root file system of the server for security reasons
server/conf/nginx_vhost.conf.master
@@ -263,8 +263,8 @@
        }
</tmpl_if>
location /\.well-known/acme-challenge {
       root /usr/local/ispconfig/interface/acme/.well-known/acme-challenge;
location ~ /\.well-known/acme-challenge/ {
       root /usr/local/ispconfig/interface/acme/;
       index index.html index.htm;
       try_files $uri =404;
}
@@ -301,8 +301,8 @@
        
        server_name <tmpl_var name='rewrite_domain'>;
location /\.well-known/acme-challenge {
       root /usr/local/ispconfig/interface/acme-challenge;
location ~ /\.well-known/acme-challenge/ {
       root /usr/local/ispconfig/interface/acme/;
       index index.html index.htm;
       try_files $uri =404;
}
server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -37,7 +37,8 @@
        global $app, $conf;
        if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
            exec('/root/.local/share/letsencrypt/bin/letsencrypt renew');
            exec('/root/.local/share/letsencrypt/bin/letsencrypt -n renew');
            $app->services->restartServiceDelayed('httpd', 'reload');
        }
        
        parent::onRunJob();
server/plugins-available/apache2_plugin.inc.php
@@ -1232,11 +1232,22 @@
            //* check if we have already a Let's Encrypt cert
            if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
                $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
                $success = false;
                if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
                    $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                    $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                }
            };
                if(!$success) {
                    // error issuing cert
                    $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
                    $data['new']['ssl_letsencrypt'] = 'n';
                    if($data['old']['ssl'] == 'n') $data['new']['ssl'] = 'n';
                    /* Update the DB of the (local) Server */
                    $app->db->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                    /* Update also the master-DB of the Server-Farm */
                    $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                }
            }
            //* check is been correctly created
            if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
@@ -1279,11 +1290,11 @@
                /* we don't need to store it.
                /* Update the DB of the (local) Server */
                $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key' WHERE domain = '".$data['new']['domain']."'");
                $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
                $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
                $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
                /* Update also the master-DB of the Server-Farm */
                $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key' WHERE domain = '".$data['new']['domain']."'");
                $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
                $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
                $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
            }
        }
@@ -3363,8 +3374,12 @@
    //* Wrapper for exec function for easier debugging
    private function _exec($command) {
        global $app;
        $out = array();
        $ret = 0;
        $app->log('exec: '.$command, LOGLEVEL_DEBUG);
        exec($command);
        exec($command, $out, $ret);
        if($ret != 0) return false;
        else return true;
    }
    private function _checkTcp ($host, $port) {
server/plugins-available/nginx_plugin.inc.php
@@ -745,7 +745,7 @@
          $file_system = explode(" ", $df_output)[0];
          $primitive_root = explode(" ", $df_output)[1];
          if ( $file_system , array('ext2','ext3','ext4') ) {
          if ( in_array($file_system , array('ext2','ext3','ext4'), true) ) {
            exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
            exec('setquota -T -u '.$username.' 604800 604800 -a &> /dev/null');
          } elseif ($file_system == 'xfs') {
@@ -1310,11 +1310,22 @@
            //* check if we have already a Let's Encrypt cert
            if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
                $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
                $success = false;
                if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
                    $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                    $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                }
            };
                if(!$success) {
                    // error issuing cert
                    $app->log('Let\'s Encrypt SSL Cert for: ' . $domain . ' could not be issued.', LOGLEVEL_WARN);
                    $data['new']['ssl_letsencrypt'] = 'n';
                    if($data['old']['ssl'] == 'n') $data['new']['ssl'] = 'n';
                    /* Update the DB of the (local) Server */
                    $app->db->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                    /* Update also the master-DB of the Server-Farm */
                    $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                }
            }
            //* check is been correctly created
            if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
@@ -1346,11 +1357,11 @@
                /* we don't need to store it.
                /* Update the DB of the (local) Server */
                $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = '".$data['new']['domain']."'");
                $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
                $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
                $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
                /* Update also the master-DB of the Server-Farm */
                $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = '".$data['new']['domain']."'");
                $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
                $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '', ssl_key = '' WHERE domain = ?", $data['new']['domain']);
                $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = ?", $data['new']['domain']);
            }
        };
@@ -3103,8 +3114,12 @@
    //* Wrapper for exec function for easier debugging
    private function _exec($command) {
        global $app;
        $out = array();
        $ret = 0;
        $app->log('exec: '.$command, LOGLEVEL_DEBUG);
        exec($command);
        exec($command, $out, $ret);
        if($ret != 0) return false;
        else return true;
    }
    private function _checkTcp ($host, $port) {