diff --git a/.gitignore b/.gitignore index e43b0f988953ae3a84b00331d0ccf5f7d51cb3cf..1a3b8bd98ef0ed25aa2dcfd12fa9671e256d0e5d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +/nbproject/private/ \ No newline at end of file diff --git a/LICENSE b/LICENSE index 139b12fc1fcc916a8a9a604e292c6238cca759ef..0624f7491f52d731c03efcf59e1ddfc01ead0ed3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2007-2016, Till Brehm, ISPConfig UG +Copyright (c) 2007-2017, Till Brehm, ISPConfig UG All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/docs/hardening/.gitkeep b/docs/hardening/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/hardening/README.md b/docs/hardening/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d4cfa15a21a18d0cde9c63cdd1005240cf2471ce --- /dev/null +++ b/docs/hardening/README.md @@ -0,0 +1,20 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +This folder contains examples for further ISPC hardening (done by NwSEC) + + +Currently, these are: + + + +anti-bruteforce WordPress Login Anti-Bruteforce via fail2ban + +postfix-ldap Query for valid recipients via LDAP in a transparent + setup routing mails e.g. to the internal server + + + +All these examples have been productively tested and implemented on various +Debian/GNU Linux based systems. + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/docs/hardening/anti-bruteforce/.gitkeep b/docs/hardening/anti-bruteforce/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/hardening/anti-bruteforce/README.md b/docs/hardening/anti-bruteforce/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2bb1a45561a426a8087f3a50dde030f13b5bf53c --- /dev/null +++ b/docs/hardening/anti-bruteforce/README.md @@ -0,0 +1,8 @@ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +This is an example to block WordPress Login Bruteforce Attacks. Further +description can also be found @ https://blog.nwsec.de/wordpress/?p=1112 + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/docs/hardening/anti-bruteforce/jail.local b/docs/hardening/anti-bruteforce/jail.local new file mode 100644 index 0000000000000000000000000000000000000000..cf9a981df2cce97d39753a9aec6b2d6529b99257 --- /dev/null +++ b/docs/hardening/anti-bruteforce/jail.local @@ -0,0 +1,10 @@ +# +# This goes into (or at the end of) /etc/fail2ban/jail.local +# +[wp-auth] + enabled = true + filter = wp-auth + action = iptables-multiport[name=wp-auth, port="http,https"] + logpath = /var/log/ispconfig/httpd/*/*.log + bantime = 1200 + maxretry = 5 diff --git a/docs/hardening/anti-bruteforce/wp-auth.conf b/docs/hardening/anti-bruteforce/wp-auth.conf new file mode 100644 index 0000000000000000000000000000000000000000..2acad450ca7f5f8a41f38a4e45a91418f9478c60 --- /dev/null +++ b/docs/hardening/anti-bruteforce/wp-auth.conf @@ -0,0 +1,5 @@ +# +# This goes into /etc/fail2ban/filter.d/wp-auth.conf +# +[Definition] + failregex = ^ .* "POST /wp-login.php \ No newline at end of file diff --git a/docs/hardening/postfix-ldap/.gitkeep b/docs/hardening/postfix-ldap/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/hardening/postfix-ldap/README.md b/docs/hardening/postfix-ldap/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b256d4b7ddb1964168bcf0e0e38f93ac8a8b7805 --- /dev/null +++ b/docs/hardening/postfix-ldap/README.md @@ -0,0 +1,17 @@ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +If mails get transparently forwarded to another mailserver, a mechanism to block +mail for invalid recipients makes sense, and drastically increaes the well-known +backscatter problem. + +LDAP queries are used to check for valid recipients, and forwards the mail, if +an entry for the user is found. + +For this to work, on Debian/GNU Linux, you also have to install postfix-ldap by + +apt install postfix-ldap + + +Further information can be found @ https://blog.nwsec.de/wordpress/?p=1031 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/docs/hardening/postfix-ldap/add_to_main.cf b/docs/hardening/postfix-ldap/add_to_main.cf new file mode 100644 index 0000000000000000000000000000000000000000..71b77ed41e4ba627fdecb0a36f6337059ed4f01c --- /dev/null +++ b/docs/hardening/postfix-ldap/add_to_main.cf @@ -0,0 +1,4 @@ +# +# This goes into /etc/postfix/main.cf in the section relay_recipient_maps +# +relay_recipient_maps = hash:/etc/postfix/relay_recipients, ldap:/etc/postfix/ldap-aliases.cf \ No newline at end of file diff --git a/docs/hardening/postfix-ldap/ldap-aliases.cf b/docs/hardening/postfix-ldap/ldap-aliases.cf new file mode 100644 index 0000000000000000000000000000000000000000..f0bf47bf816c4b2cf7243aa8250b0dea7108a227 --- /dev/null +++ b/docs/hardening/postfix-ldap/ldap-aliases.cf @@ -0,0 +1,9 @@ +server_host = x.x.x.x +search_base = ou=xxx, dc=xxx, dc=xx +version = 3 +timeout = 10 +leaf_result_attribute = mail +bind_dn = user@domain +bind_pw = userpassword +query_filter = (mail=%s) +result_attribute = mail, addressToForward \ No newline at end of file diff --git a/install/dist/conf/centos52.conf.php b/install/dist/conf/centos52.conf.php index 12044d3ce07d36d42e166c961c4939b4d82ba01f..77462bd7f4a1cb8392832853a8af10308205a30b 100644 --- a/install/dist/conf/centos52.conf.php +++ b/install/dist/conf/centos52.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/centos53.conf.php b/install/dist/conf/centos53.conf.php index 12044d3ce07d36d42e166c961c4939b4d82ba01f..77462bd7f4a1cb8392832853a8af10308205a30b 100644 --- a/install/dist/conf/centos53.conf.php +++ b/install/dist/conf/centos53.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/centos70.conf.php b/install/dist/conf/centos70.conf.php index a40e88ed70e50d7d0bdffaa6a4235b1b96d0fe48..c3076c4aab5c8fb531bbe898d683aff0341d1dac 100644 --- a/install/dist/conf/centos70.conf.php +++ b/install/dist/conf/centos70.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/centos72.conf.php b/install/dist/conf/centos72.conf.php index e7ab6030b7210051697de71425724ceaac4a1119..b6cbcabe216328f736d22ef4b0b12f24b5ef0c6b 100644 --- a/install/dist/conf/centos72.conf.php +++ b/install/dist/conf/centos72.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php index 613c828d14906474fbda3a3b475508e5b8b2f997..a85841e4ff6c6d40b53cd70880313f0c2a867245 100644 --- a/install/dist/conf/debian40.conf.php +++ b/install/dist/conf/debian40.conf.php @@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php index 2c26dcb9cbb26ae89f1126ce15440471485b028a..a7ea1364563909c56a86fd3d305fd92a00667d98 100644 --- a/install/dist/conf/debian60.conf.php +++ b/install/dist/conf/debian60.conf.php @@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/debian90.conf.php b/install/dist/conf/debian90.conf.php index cdaf7aa9a0f1bba39ea7d0ec367e0c0f36d9a4f0..7b3c2e365c01d756bdd0959118438e44b5d91116 100644 --- a/install/dist/conf/debian90.conf.php +++ b/install/dist/conf/debian90.conf.php @@ -1,7 +1,7 @@ diff --git a/install/dist/conf/debiantesting.conf.php b/install/dist/conf/debiantesting.conf.php index 92787bf428c441fdfae359ce967b6a813e42cd53..fdf83109180774a634922c994a92938f60484f5d 100644 --- a/install/dist/conf/debiantesting.conf.php +++ b/install/dist/conf/debiantesting.conf.php @@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php index 80539a78593827e76bb7828ee684833f557b9dd7..85121e7c841658e39935ba6548ada4c8a105f2dc 100644 --- a/install/dist/conf/fedora9.conf.php +++ b/install/dist/conf/fedora9.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php index 2955cfa71dd391743f705449ea6849428005a367..83a487f29097df9d68cbfea369d63ccbcac72fd4 100644 --- a/install/dist/conf/gentoo.conf.php +++ b/install/dist/conf/gentoo.conf.php @@ -131,6 +131,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['user'] = 'getmail'; diff --git a/install/dist/conf/opensuse110.conf.php b/install/dist/conf/opensuse110.conf.php index e389c3b2a0ea727d619b453c477ef0a8f0964122..909a53aba0ecf727e4da0004b148fdae8b0bb5f6 100644 --- a/install/dist/conf/opensuse110.conf.php +++ b/install/dist/conf/opensuse110.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php index fa0504652e9e75d908186507a6c69c67c271f4b9..648a9222e4c092c1ac4b091569a0b141d9c2aeb2 100644 --- a/install/dist/conf/opensuse112.conf.php +++ b/install/dist/conf/opensuse112.conf.php @@ -118,6 +118,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/conf/ubuntu1604.conf.php b/install/dist/conf/ubuntu1604.conf.php index 9ac56de3f871479033df0a742554ed6e905a3d39..a903bacfc346a5ba151eec6f01d5529c3c255525 100644 --- a/install/dist/conf/ubuntu1604.conf.php +++ b/install/dist/conf/ubuntu1604.conf.php @@ -120,6 +120,10 @@ $conf['mailman']['installed'] = false; // will be detected automatically during $conf['mailman']['config_dir'] = '/etc/mailman'; $conf['mailman']['init_script'] = 'mailman'; +//* mlmmj +$conf['mlmmj']['installed'] = false; // will be detected automatically during installation +$conf['mlmmj']['config_dir'] = '/etc/mlmmj'; + //* Getmail $conf['getmail']['installed'] = false; // will be detected automatically during installation $conf['getmail']['config_dir'] = '/etc/getmail'; diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index 57fb1934408364e2c2eef66eb757b4c099686d6d..ecf3db3a4b1eadd884d90967b811fb1449db3d67 100644 --- a/install/dist/lib/debian60.lib.php +++ b/install/dist/lib/debian60.lib.php @@ -61,7 +61,7 @@ class installer extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index f1c8d672042ac415e92b295dfac6a988bcc81a9d..70bed24d10ae482f7e2c853f081e10cb24eec824 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -394,7 +394,7 @@ class installer_dist extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index b3cfc207194f18f4dbddc039942fb06ddeb411af..46bd662535dbdec8a00c940c747001531c4e1f3d 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -303,7 +303,7 @@ class installer extends installer_base } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index f991c77d2be66295c1a3756c543e174114f39f5c..598f98ec431ab1defc4f9dff524e3ff99cd3a9c5 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -404,7 +404,7 @@ class installer_dist extends installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content); unset($content); unset($deliver_content); diff --git a/install/install.php b/install/install.php index 50e19e943e66f3e00a36bdc86396c7c527a71b4f..7e0bf50519ccdeecfd3ac4126c4903ee2a3ff4b3 100644 --- a/install/install.php +++ b/install/install.php @@ -57,19 +57,21 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ error_reporting(E_ALL|E_STRICT); +require_once realpath(dirname(__FILE__)) . '/lib/classes/libbashcolor.inc.php'; define('INSTALLER_RUN', true); //** The banner on the command line echo "\n\n".str_repeat('-', 80)."\n"; -echo " _____ ___________ _____ __ _ ____ -|_ _/ ___| ___ \ / __ \ / _(_) /__ \ - | | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ / - | | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ | - _| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \ - \___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/ +echo PXBashColor::getString( " + _____ ___________ _____ __ _ ____ +|_ _/ ___| ___ \ / __ \ / _(_) /__ \ + | | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ / + | | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ | + _| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \ + \___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/ __/ | - |___/ "; + |___/ "); echo "\n".str_repeat('-', 80)."\n"; echo "\n\n>> Initial configuration \n\n"; @@ -148,12 +150,12 @@ $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 .')); -swriteln($inst->lng(' Tap in "quit" (without the quotes) to stop the installer.'."\n\n")); +swriteln($inst->lng(' Default values are in [brackets] and can be accepted with .')); +swriteln($inst->lng(' Tap in "quit" (without the quotes) to stop the installer.'."\n\n")); //** Check log file is writable (probably not root or sudo) if(!is_writable(dirname(ISPC_LOG_FILE))){ - die("ERROR: Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n"); + die(PXBashColor::getString("[ERROR] Cannot write to the ".dirname(ISPC_LOG_FILE)." directory. Are you root or sudo ?\n\n")); } if(is_dir('/root/ispconfig') || is_dir('/home/admispconfig')) { @@ -178,6 +180,8 @@ $conf['language_file_import_enabled'] = true; //** Select installation mode $install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode'); +//** tRNG dependencies +$conf['tRNG']=''; //** Get the hostname $tmp_out = array(); @@ -282,7 +286,7 @@ if($install_mode == 'expert' && strtolower($inst->simple_query('Shall this serve // initialize the connection to the master database $inst->dbmaster = new db(); if($inst->dbmaster->linkId) $inst->dbmaster->closeConn(); - $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"], $conf['mysql']['master_port']); + $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_port"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]); $inst->dbmaster->setDBName($conf['mysql']["master_database"]); } else { @@ -339,6 +343,12 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail $inst->configure_mailman(); } + //* Configure mlmmj + if($conf['mlmmj']['installed'] == true) { + swriteln('Configuring Mlmmj'); + $inst->configure_mlmmj(/*install*/); + } + //* Check for Dovecot and Courier if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) { $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert')); @@ -426,9 +436,7 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Configure DNS swriteln('Configuring BIND'); $inst->configure_bind(); $conf['services']['dns'] = true; - if(!is_installed('haveged')) { - swriteln("[INFO] haveged not detected - DNSSEC can fail"); - } + $conf['tRNG'] .= 'DNSSEC with BIND, '; } //* Configure MyDNS if($conf['mydns']['installed']) { @@ -624,6 +632,8 @@ if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') s if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null'); if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null'); +//* test tRNG +if($conf['tRNG']) tRNG(); $inst->create_mount_script(); diff --git a/install/lib/classes/libbashcolor.inc.php b/install/lib/classes/libbashcolor.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..b4bcda6af07db7e4465b11820a32b82ff4ec9b75 --- /dev/null +++ b/install/lib/classes/libbashcolor.inc.php @@ -0,0 +1,160 @@ + 30, + 'red' => 31, + 'green' => 32, + 'yellow' => 33, + 'blue' => 34, + 'magenta' => 35, + 'cyan' => 36, + 'lightgrey' => 37, + 'default' => 39, + 'darkgrey' => 90, + 'lightred' => 91, + 'lightgreen' => 92, + 'lightyellow' => 93, + 'lightblue' => 94, + 'lightmagenta' => 95, + 'lightcyan' => 96, + 'white' => 97, + + 'bg:black' => 40, + 'bg:red' => 41, + 'bg:green' => 42, + 'bg:yellow' => 43, + 'bg:blue' => 44, + 'bg:magenta' => 45, + 'bg:cyan' => 46, + 'bg:lightgrey' => 47, + 'bg:default' => 49, + 'bg:darkgrey' => 100, + 'bg:lightred' => 101, + 'bg:lightgreen' => 102, + 'bg:lightyellow' => 103, + 'bg:lightblue' => 104, + 'bg:lightmagenta' => 105, + 'bg:lightcyan' => 106, + 'bg:white' => 107, + + 'bold' => 1, + 'dim' => 2, + 'italic' => 3, + 'underlined' => 4, + 'blink' => 5, + 'invert' => 7, + 'hidden' => 8 + + ); + + private static function getCode($active) { + $code = "\033[0;"; + if(count($active) > 0) { + $tmp = array(); + for($i = 0; $i < count($active); $i++) { + $tmp[] = self::$markers[$active[$i]]; + } + sort($tmp); + $code .= implode(';', $tmp); + unset($tmp); + } else { + $code .= "0"; + } + + $code .= "m"; + return $code; + } + + public static function getString($string, $ignore_unknown_tags = false) { + + $active = array(); + $echo_string = ""; + + while(preg_match('/<(\/?(?:bg:)?\w+)>/i', $string, $match, PREG_OFFSET_CAPTURE)) { + $pos = $match[0][1]; + $tag = $match[1][0]; + $len = strlen($match[0][0]); + + $close = false; + if(substr($tag, 0, 1) == '/') { + $close = true; + $tag = substr($tag, 1); + } + + $key = $tag; + if($key == 'strong' || $key == 'b') $key = 'bold'; + elseif($key == 'em' || $key == 'i') $key = 'italic'; + elseif($key == 'u') $key = 'underlined'; + elseif($key == 'inv') $key = 'invert'; + + if(!array_key_exists($key, self::$markers)) { + if($ignore_unknown_tags == false) { + throw new Exception('unknown tag: ' . $tag); + } else { + $echo_string .= self::getCode($active); + $echo_string .= substr($string, 0, $pos + $len); + $string = substr($string, $pos + $len); + continue; + } + } + + if($pos > 0) { + $echo_string .= self::getCode($active); + $echo_string .= substr($string, 0, $pos); + } + + if($close == true) { + $last = end($active); + if($key != $last) { + throw new Exception('unbalanced tag: ' . $tag . ' (' . $last . ' expected), ' . var_export($active, true)); + } + array_pop($active); + } else { + array_push($active, $key); + } + + $string = substr($string, $pos + $len); + } + + if($string != '') { + $echo_string .= self::getCode($active); + $echo_string .= $string; + } + + $echo_string .= "\e[0m"; + return $echo_string; + } + +} \ No newline at end of file diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php index fc68776863dce8229a2fbf9b260a2b222ab95ac1..b7fad60e75600b17afb7bedeb8c9897a82f42e49 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -32,6 +32,8 @@ error_reporting(E_ALL|E_STRICT); $FILE = realpath('../install.php'); +require_once realpath(dirname(__FILE__)) . '/classes/libbashcolor.inc.php'; + //** Get distribution identifier //** IMPORTANT! // This is the same code as in server/lib/classes/monitor_tools.inc.php @@ -222,7 +224,7 @@ function get_distname() { $distconfid = 'debian90'; $distid = 'debian60'; $distbaseid = 'debian'; - swriteln("Operating System: Debian 9.0 (Stretch) or compatible\n"); + swriteln("Operating System: Debian 9.0 (Stretch) or compatible\n"); } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) { $distname = 'Debian'; $distver = 'Testing'; @@ -240,6 +242,23 @@ function get_distname() { } } + //** Devuan + elseif(file_exists('/etc/devuan_version')) { + if(false !== strpos(trim(file_get_contents('/etc/devuan_version')), 'jessie')) { + $distname = 'Devuan'; + $distver = 'Jessie'; + $distid = 'debian60'; + $distbaseid = 'debian'; + swriteln("Operating System: Devuan 1.0 (Jessie) or compatible\n"); + } elseif(false !== strpos(trim(file_get_contents('/etc/devuan_version')), 'ceres')) { + $distname = 'Devuan'; + $distver = 'Ceres'; + $distid = 'debiantesting'; + $distbaseid = 'debian'; + swriteln("Operating System: Devuan Unstable (Ceres) or compatible\n"); + } + } + //** OpenSuSE elseif(file_exists('/etc/SuSE-release')) { if(stristr(file_get_contents('/etc/SuSE-release'), '11.0')) { @@ -371,7 +390,7 @@ function swrite($text = '') { } function swriteln($text = '') { - echo $text."\n"; + echo PXBashColor::getString($text, true)."\n"; } function ilog($msg){ @@ -969,4 +988,14 @@ function getapachemodules() { return $modules; } +function tRNG(){ + global $conf; + $path='/dev/random';$test='/tmp/ispconfig.tRNG';$time=2;$warn=8192; + echo "Testing $time seconds throughput of $path ... "; + exec("cat $path > $test & PID=\$!; sleep $time; kill \$PID"); + if(($result=filesize($test)) < $warn) { + echo "$result bytes\n[WARN] these services may fail: {$conf['tRNG']}minimum recommended: $warn\n"; + }else echo "$result bytes OK\n"; + unlink($test); +} ?> diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index eb078a1e6efb4ce079f6836128209f25fab9f860..a504b3b255b85998ed90180269e09716241b0f0b 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -157,6 +157,7 @@ class installer_base { if(is_installed('postfix')) $conf['postfix']['installed'] = true; if(is_installed('postgrey')) $conf['postgrey']['installed'] = true; if(is_installed('mailman') || is_installed('mmsitepass')) $conf['mailman']['installed'] = true; + if(is_installed('mlmmj') || is_installed('mlmmj-make-ml')) $conf['mlmmj']['installed'] = true; if(is_installed('apache') || is_installed('apache2') || is_installed('httpd') || is_installed('httpd2')) $conf['apache']['installed'] = true; if(is_installed('getmail')) $conf['getmail']['installed'] = true; if(is_installed('courierlogger')) $conf['courier']['installed'] = true; @@ -224,15 +225,8 @@ class installer_base { public function configure_database() { global $conf; - //* check sql-mode - $check_sql_mode = $this->db->queryOneRecord("SELECT @@sql_mode"); - - if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') { - echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n"; - echo " sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n"; - echo"to the mysqld-section in your mysql-config on this server and restart mysqld afterwards\n"; - die(); - } + //* ensure no modes with errors for ENGINE=MyISAM + $this->db->query("SET sql_mode = ''"); $unwanted_sql_plugins = array('validate_password'); $sql_plugins = $this->db->queryAllRecords("SELECT plugin_name FROM information_schema.plugins WHERE plugin_status='ACTIVE' AND plugin_name IN ?", $unwanted_sql_plugins); @@ -321,6 +315,7 @@ class installer_base { $tpl_ini_array['web']['php_ini_path_cgi'] = $conf['apache']['php_ini_path_cgi']; $tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier'; $tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop'; + $tpl_ini_array['mail']['mailinglist_manager'] = ($conf['mlmmj']['installed'] == true)?'mlmmj':'mailman'; $tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user']; $tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group']; $tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir']; @@ -502,15 +497,22 @@ class installer_base { //* insert the ispconfig user in the remote server $from_host = $conf['hostname']; - $from_ip = gethostbyname($conf['hostname']); $hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user']; $hosts[$from_host]['db'] = $conf['mysql']['master_database']; $hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password']; - $hosts[$from_ip]['user'] = $conf['mysql']['master_ispconfig_user']; - $hosts[$from_ip]['db'] = $conf['mysql']['master_database']; - $hosts[$from_ip]['pwd'] = $conf['mysql']['master_ispconfig_password']; + $ip_list=array(); + $ip_rec=dns_get_record($conf['hostname'], DNS_A + DNS_AAAA); + if(!empty($ip_rec)) foreach($ip_rec as $rec => $ip) $ip_list[]=@(isset($ip['ip']))?$ip['ip']:$ip['ipv6']; + + if(!empty($ip_list)) { + foreach($ip_list as $ip) { + $hosts[$ip]['user'] = $conf['mysql']['master_ispconfig_user']; + $hosts[$ip]['db'] = $conf['mysql']['master_database']; + $hosts[$ip]['pwd'] = $conf['mysql']['master_ispconfig_password']; + } + } } else{ /* * it is NOT a master-slave - Setup so we have to find out all clients and their @@ -825,6 +827,90 @@ class installer_base { exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); } + public function configure_mlmmj() { + global $conf; + + $configDir = $conf['mlmmj']['config_dir']; + @mkdir($configDir, 0755, true); + + $configFile = 'mlmmj.conf'; + + //* Backup exiting file + if(is_file("$configDir/$configFile")) { + copy("$configDir/$configFile", "$configDir/$configFile~"); + } + + // load files + if(is_file($conf['ispconfig_install_dir']."/server/conf-custom/install/$configFile.master")) { + copy($conf['ispconfig_install_dir']."/server/conf-custom/install/$configFile.master", "$configDir/$configFile"); + } else { + copy("tpl/$configFile.master", "$configDir/$configFile"); + } + + $mlConfig = @parse_ini_file("$configDir/$configFile"); + // Force PHP7 to use # to mark comments + if(PHP_MAJOR_VERSION >= 7) + $mlConfig = array_filter($mlConfig, function($v){return(substr($v,0,1)!=='#');}, ARRAY_FILTER_USE_KEY); + + $command = 'useradd --system mlmmj --home '.$mlConfig['spool_dir'].' --shell /usr/false'; + if(!is_user('mlmmj')) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); + + @mkdir($mlConfig['spool_dir'], 0755, true); + chown($mlConfig['spool_dir'], 'mlmmj'); + chgrp($mlConfig['spool_dir'], 'mlmmj'); + + // Make a backup copy of master.cf and main.cf files + copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~mlmmj'); + + //* Update postfix main.cf + $content = rf($conf['postfix']['config_dir'].'/main.cf'); + + if(!preg_match("/^alias_maps = .*hash:\/etc\/mlmmj\/aliases.*/m", $content)) { + $content = preg_replace("/^alias_maps = (.*)/m", "$0, hash:$configDir/aliases", $content); + } + + if(!preg_match("/^alias_database = .*hash:\/etc\/mlmmj\/aliases.*/m", $content)) { + $content = preg_replace("/^alias_database = (.*)/m", "$0, hash:$configDir/aliases", $content); + } + + if(!preg_match("/^virtual_alias_maps = .*hash:\/etc\/mlmmj\/virtual.*/m", $content)) { + $content = preg_replace("/^virtual_alias_maps = (.*)/m", "$0, hash:$configDir/virtual", $content); + } + + if(!preg_match("/^transport_maps = .*hash:\/etc\/mlmmj\/transport.*/m", $content)) { + $content = preg_replace("/transport_maps = (.*)/m", "$0, hash:$configDir/transport", $content); + } + + if(!preg_match("/^mlmmj_destination_recipient_limit.*/m", $content)) { + $content .= "\n# Only deliver one message to Mlmmj at a time\nmlmmj_destination_recipient_limit = 1\n"; + } + + wf($conf['postfix']['config_dir'].'/main.cf', $content); + + //* Update postfix master.cf + $content = rf($conf['postfix']['config_dir'].'/master.cf'); + if(!preg_match('/^mlmmj\s+unix\s+-\s+n\s+n\s+-\s+-\s+pipe\s*$/m', $content)) { + copy($conf['postfix']['config_dir'].'/master.cf', $conf['postfix']['config_dir'].'/master.cf~mlmmj'); + $content .= "\n# mlmmj mailing lists\n"; + $content .= "mlmmj unix - n n - - pipe\n"; + $content .= " flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-receive -F -L "; + $content .= $mlConfig['spool_dir']."/\$nexthop\n\n"; + wf($conf['postfix']['config_dir'].'/master.cf', $content); + } + + //* Create aliasaes + touch("$configDir/aliases"); + exec("nohup /usr/sbin/postalias $configDir/aliases >/dev/null 2>&1"); + touch("$configDir/virtual"); + exec("nohup /usr/sbin/postmap $configDir/virtual >/dev/null 2>&1"); + touch("$configDir/transport"); + exec("nohup /usr/sbin/postmap $configDir/transport >/dev/null 2>&1"); + + //* Create/update cron entry + $cronEntry = '0 */2 * * * find /var'.$mlConfig['spool_dir'].'/ -mindepth 1 -maxdepth 1 -type d -exec /usr/bin/mlmmj-maintd -F -d {} \;'; + file_put_contents('/etc/cron.d/mlmmj', $cronEntry); + } + public function get_postfix_service($service, $type) { global $conf; @@ -1236,7 +1322,7 @@ class installer_base { } //* Configure master.cf and add a line for deliver $content = rf($conf["postfix"]["config_dir"].'/master.cf'); - $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n"; + $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}'."\n"; af($config_dir.'/master.cf', $deliver_content); unset($content); unset($deliver_content); @@ -1422,7 +1508,7 @@ class installer_base { public function configure_spamassassin() { global $conf; - //* Enable spamasasssin on debian and ubuntu + //* Enable spamasasssin on debian, devuan and ubuntu $configfile = '/etc/default/spamassassin'; if(is_file($configfile)) { copy($configfile, $configfile.'~'); @@ -1473,11 +1559,6 @@ class installer_base { chmod($config_dir.'/'.$configfile, 0600); chown($config_dir.'/'.$configfile, 'root'); chgrp($config_dir.'/'.$configfile, 'root'); - // **enable chrooting - //exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone'); - exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone'); - exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility'); - exec('echo "yes" > '.$config_dir.'/conf/DisplayDotFiles'); if(is_file('/etc/default/pure-ftpd-common')) { replaceLine('/etc/default/pure-ftpd-common', 'STANDALONE_OR_INETD=inetd', 'STANDALONE_OR_INETD=standalone', 1, 0); @@ -1490,7 +1571,36 @@ class installer_base { //if(is_file($conf['init_scripts'].'/'.'openbsd-inetd')) exec($conf['init_scripts'].'/'.'openbsd-inetd restart'); } - if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec('echo "yes" > /etc/pure-ftpd/conf/DontResolve'); + //* backup old settings + exec("for i in $config_dir/conf/*; do printf \$i\ ; cat \$i; printf '\n'; done 2>&1 >$config_dir/conf/.backup~"); + //* clean common unused settings + exec("rm $config_dir/conf/MinUID $config_dir/conf/PAMAuthentication $config_dir/conf/PureDB $config_dir/conf/UnixAuthentication 2> /dev/null"); + //* required for ftp traffic stats + file_put_contents("$config_dir/conf/AltLog","clf:/var/log/pure-ftpd/transfer.log"); + //* improves client compatibility + file_put_contents("$config_dir/conf/BrokenClientsCompatibility","yes"); + //* needed for ispconfig implementation + file_put_contents("$config_dir/conf/ChrootEveryone","yes"); + //* improves client compatibility + file_put_contents("$config_dir/conf/DisplayDotFiles","yes"); + //* improves performance + file_put_contents("$config_dir/conf/DontResolve","yes"); + //* complies with RFC2640 + file_put_contents("$config_dir/conf/FSCharset","UTF-8"); + //* provides welcome message + file_put_contents("$config_dir/conf/FortunesFile","$config_dir/welcome.msg"); + //* increases the clients limit from 50 (default) to 1024 + file_put_contents("$config_dir/conf/MaxClientsNumber","1024"); + //* prevents DoS attack from the same IP address + file_put_contents("$config_dir/conf/MaxClientsPerIP","64"); + //* needed for ispconfig implementation + file_put_contents("$config_dir/conf/MySQLConfigFile","$config_dir/db/mysql.conf"); + //* recommended for ispconfig implementation + file_put_contents("$config_dir/conf/NoAnonymous","yes"); + //* grade A encryption + file_put_contents("$config_dir/conf/TLSCipherSuite","ECDHE:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!RC4"); + //* hides implementation details + file_put_contents("$config_dir/welcome.msg","Welcome"); } public function configure_mydns() { diff --git a/install/lib/mysql.lib.php b/install/lib/mysql.lib.php index 2528100cc51c8fc0bd096d1ef28a168a4cf42fec..d00bd7a35ff0b63bfca3086982234059c34f68c0 100644 --- a/install/lib/mysql.lib.php +++ b/install/lib/mysql.lib.php @@ -98,8 +98,9 @@ class db $this->_setCharset(); } - public function setDBData($host, $user, $password, $port) { + public function setDBData($host, $port, $user, $password) { $this->dbHost = $host; + $this->dbPort = $port; $this->dbUser = $user; $this->dbPass = $password; $this->dbPort = $port; diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php index 4fc35c3abb87bfb08f6a0c05f5916b63e028c060..4611c7bf32e97a96e58e83487fe944c9d2d91bf0 100644 --- a/install/lib/update.lib.php +++ b/install/lib/update.lib.php @@ -125,14 +125,8 @@ function checkDbHealth() { function updateDbAndIni() { global $inst, $conf; - //* check sql-mode - $check_sql_mode = $inst->db->queryOneRecord("SELECT @@sql_mode"); - if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') { - echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n"; - echo " sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n"; - echo"to the mysqld-section in your mysql-config on this server and restart mysqld afterwards\n"; - die(); - } + //* ensure no modes with errors for ENGINE=MyISAM + $inst->db->query("SET sql_mode = ''"); $unwanted_sql_plugins = array('validate_password'); $sql_plugins = $inst->db->queryAllRecords("SELECT plugin_name FROM information_schema.plugins WHERE plugin_status='ACTIVE' AND plugin_name IN ?", $unwanted_sql_plugins); diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index f73a20b0575a6162188a6269c1be60bedcfe2593..6a8550c3492c64be2fce02d708bc943f7a638b47 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,3 +1,93 @@ +<<<<<<< HEAD +ALTER TABLE `mail_mailinglist` ADD `list_type` enum('open','closed') NOT NULL DEFAULT 'open'; +ALTER TABLE `mail_mailinglist` ADD `subject_prefix` varchar(50) NOT NULL DEFAULT ''; +ALTER TABLE `mail_mailinglist` ADD `admins` mediumtext; +ALTER TABLE `mail_mailinglist` ADD `digestinterval` int(11) NOT NULL DEFAULT '7'; +ALTER TABLE `mail_mailinglist` ADD `digestmaxmails` int(11) NOT NULL DEFAULT '50'; +ALTER TABLE `mail_mailinglist` ADD `archive` enum('n','y') NOT NULL DEFAULT 'n'; +ALTER TABLE `mail_mailinglist` ADD `digesttext` ENUM('n','y') NOT NULL DEFAULT 'n'; +ALTER TABLE `mail_mailinglist` ADD `digestsub` ENUM('n','y') NOT NULL DEFAULT 'n'; +ALTER TABLE `mail_mailinglist` ADD `mail_footer` mediumtext; +ALTER TABLE `mail_mailinglist` ADD `subscribe_policy` enum('disabled','confirm','approval','both','none') NOT NULL DEFAULT 'confirm'; +ALTER TABLE `mail_mailinglist` ADD `posting_policy` enum('closed','moderated','free') NOT NULL DEFAULT 'free'; +ALTER TABLE `sys_user` ADD `last_login_ip` VARCHAR(50) NULL AFTER `lost_password_reqtime`; +ALTER TABLE `sys_user` ADD `last_login_at` BIGINT(20) NULL AFTER `last_login_ip`; +ALTER TABLE `sys_remoteaction` CHANGE `action_state` `action_state` ENUM('pending','processing','ok','warning','error') NOT NULL DEFAULT 'pending'; + +CREATE TABLE IF NOT EXISTS `dns_ssl_ca` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `sys_userid` int(11) unsigned NOT NULL DEFAULT '0', + `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0', + `sys_perm_user` varchar(5) NOT NULL DEFAULT '', + `sys_perm_group` varchar(5) NOT NULL DEFAULT '', + `sys_perm_other` varchar(5) NOT NULL DEFAULT '', + `active` enum('N','Y') NOT NULL DEFAULT 'N', + `ca_name` varchar(255) NOT NULL DEFAULT '', + `ca_issue` varchar(255) NOT NULL DEFAULT '', + `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N', + `ca_iodef` text NOT NULL, + `ca_critical` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY (`ca_issue`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +ALTER TABLE `dns_ssl_ca` ADD UNIQUE(`ca_issue`); + +UPDATE `dns_ssl_ca` SET `ca_issue` = 'comodo.com' WHERE `ca_issue` = 'comodoca.com'; +DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'geotrust.com'; +DELETE FROM `dns_ssl_ca` WHERE `ca_issue` = 'thawte.com'; +UPDATE `dns_ssl_ca` SET `ca_name` = 'Symantec / Thawte / GeoTrust' WHERE `ca_issue` = 'symantec.com'; + +INSERT IGNORE INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodoca.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0); + +ALTER TABLE `dns_rr` CHANGE `type` `type` ENUM('A','AAAA','ALIAS','CAA','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; ALTER TABLE `web_domain` ADD COLUMN `ssl_letsencrypt_exclude` enum('n','y') NOT NULL DEFAULT 'n' AFTER `ssl_letsencrypt`; ALTER TABLE `remote_user` ADD `remote_access` ENUM('y','n') NOT NULL DEFAULT 'y' AFTER `remote_password`; ALTER TABLE `remote_user` ADD `remote_ips` TEXT AFTER `remote_access`; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 9aa91701bc728b300c5b5a4640199907e06a757b..eedf8237688dffcf7b45cf115909f77b4d2c5329 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -489,7 +489,7 @@ CREATE TABLE `dns_rr` ( `server_id` int(11) NOT NULL default '1', `zone` int(11) unsigned NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', - `type` enum('A','AAAA','ALIAS','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL, + `type` enum('A','AAAA','ALIAS','CAA','CNAME','DS','HINFO','LOC','MX','NAPTR','NS','PTR','RP','SRV','TXT','TLSA','DNSKEY') default NULL, `data` TEXT NOT NULL, `aux` int(11) unsigned NOT NULL default '0', `ttl` int(11) unsigned NOT NULL default '3600', @@ -500,6 +500,79 @@ CREATE TABLE `dns_rr` ( KEY `rr` (`zone`,`type`,`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +-- -------------------------------------------------------- + +-- +-- Table structure for table `dns_ssl_ca` +-- + +CREATE TABLE IF NOT EXISTS `dns_ssl_ca` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `sys_userid` int(11) unsigned NOT NULL DEFAULT '0', + `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0', + `sys_perm_user` varchar(5) NOT NULL DEFAULT '', + `sys_perm_group` varchar(5) NOT NULL DEFAULT '', + `sys_perm_other` varchar(5) NOT NULL DEFAULT '', + `active` enum('N','Y') NOT NULL DEFAULT 'N', + `ca_name` varchar(255) NOT NULL DEFAULT '', + `ca_issue` varchar(255) NOT NULL DEFAULT '', + `ca_wildcard` enum('Y','N') NOT NULL DEFAULT 'N', + `ca_iodef` text NOT NULL, + `ca_critical` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY (`ca_issue`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +INSERT INTO `dns_ssl_ca` (`id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `active`, `ca_name`, `ca_issue`, `ca_wildcard`, `ca_iodef`, `ca_critical`) VALUES +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'AC Camerfirma', 'camerfirma.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'ACCV', 'accv.es', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Actalis', 'actalis.it', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Amazon', 'amazon.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Asseco', 'certum.pl', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Buypass', 'buypass.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CA Disig', 'disig.sk', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CATCert', 'aoc.cat', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certinomis', 'www.certinomis.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Certizen', 'hongkongpost.gov.hk', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'certSIGN', 'certsign.ro', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'CFCA', 'cfca.com.cn', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Chunghwa Telecom', 'cht.com.tw', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Comodo', 'comodo.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'D-TRUST', 'd-trust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DocuSign', 'docusign.fr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'e-tugra', 'e-tugra.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'EDICOM', 'edicomgroup.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Firmaprofesional', 'firmaprofesional.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'FNMT', 'fnmt.es', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GlobalSign', 'globalsign.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GoDaddy', 'godaddy.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Google Trust Services', 'pki.goog', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GRCA', 'gca.nat.gov.tw', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'HARICA', 'harica.gr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'IdenTrust', 'identrust.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Kamu SM', 'kamusm.gov.tr', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Microsec e-Szigno', 'e-szigno.hu', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'NetLock', 'netlock.hu', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PKIoverheid', 'www.pkioverheid.nl', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'PROCERT', 'procert.net.ve', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'QuoVadis', 'quovadisglobal.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SECOM', 'secomtrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Sertifitseerimiskeskuse', 'sk.ee', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'StartCom', 'startcomca.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'SwissSign', 'swisssign.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec / Thawte / GeoTrust', 'symantec.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'T-Systems', 'telesec.de', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Telia', 'telia.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Trustwave', 'trustwave.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Web.com', 'web.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WISeKey', 'wisekey.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0); + + -- -------------------------------------------------------- -- @@ -879,8 +952,19 @@ CREATE TABLE `mail_mailinglist` ( `server_id` int(11) unsigned NOT NULL default '0', `domain` varchar(255) NOT NULL DEFAULT '', `listname` varchar(255) NOT NULL DEFAULT '', + `list_type` enum('open','closed') NOT NULL DEFAULT 'open', `email` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '', + `subject_prefix` varchar(50) NOT NULL DEFAULT '', + `admins` mediumtext, + `digestinterval` int(11) NOT NULL DEFAULT '7', + `digestmaxmails` int(11) NOT NULL DEFAULT '50', + `archive` enum('n','y') NOT NULL DEFAULT 'n', + `digesttext` enum('n','y') NOT NULL DEFAULT 'n', + `digestsub` enum('n','y') NOT NULL DEFAULT 'n', + `mail_footer` mediumtext, + `subscribe_policy` enum('disabled','confirm','approval','both','none') NOT NULL DEFAULT 'confirm', + `posting_policy` enum('closed','moderated','free') NOT NULL DEFAULT 'free', PRIMARY KEY (`mailinglist_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; @@ -1734,7 +1818,7 @@ CREATE TABLE `sys_remoteaction` ( `tstamp` int(11) NOT NULL DEFAULT '0', `action_type` varchar(20) NOT NULL DEFAULT '', `action_param` mediumtext, - `action_state` enum('pending','ok','warning','error') NOT NULL DEFAULT 'pending', + `action_state` enum('pending','processing','ok','warning','error') NOT NULL DEFAULT 'pending', `response` mediumtext, PRIMARY KEY (`action_id`), KEY `server_id` (`server_id`) @@ -1804,6 +1888,8 @@ CREATE TABLE `sys_user` ( `lost_password_function` tinyint(1) NOT NULL default '1', `lost_password_hash` VARCHAR(50) NOT NULL default '', `lost_password_reqtime` DATETIME NULL default NULL, + `last_login_ip` varchar(50) DEFAULT NULL, + `last_login_at` bigint(20) DEFAULT NULL, PRIMARY KEY (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master index 3ce1ebb1c93ae8c7779ec793c7ece512b10de11c..91bf98cb7f18dbf6d4a43c66cd13ab8929fd9e63 100644 --- a/install/tpl/apache_ispconfig.conf.master +++ b/install/tpl/apache_ispconfig.conf.master @@ -1,12 +1,25 @@ +################################################ +# ISPConfig General Apache Options +################################################ +ServerTokens ProductOnly +ServerSignature Off + + + +SSLStaplingCache shmcb:/var/run/ocsp(128000) + + ################################################ # ISPConfig Logfile configuration for vlogger ################################################ -SetEnvIf Request_URI "^/datalogstatus.php$" dontlog - + +LogFormat '%v %h %l %u %t "%r" %>s %S "%{Referer}i" "%{User-Agent}i"' combined_ispconfig + 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 env=!dontlog + +CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig AllowOverride None @@ -131,9 +144,10 @@ Alias /.well-known/acme-challenge /usr/local/ispconfig/interface/acme/.well-know + NameVirtualHost *:80 NameVirtualHost *:443 NameVirtualHost {tmpl_var name="ip_address"}:{tmpl_var name="port"} - + diff --git a/install/tpl/apache_ispconfig.vhost.master b/install/tpl/apache_ispconfig.vhost.master index 8eccbcba3894542819ac94b2ae255e16b2c5fc5f..bcdc8b76f9db187d47866f9d4a2e87e6a9ee0dc9 100644 --- a/install/tpl/apache_ispconfig.vhost.master +++ b/install/tpl/apache_ispconfig.vhost.master @@ -4,10 +4,13 @@ ###################################################### Listen -NameVirtualHost *: +NameVirtualHost *: > ServerAdmin webmaster@localhost + + Protocols h2 h2c http/1.1 + @@ -76,7 +79,7 @@ NameVirtualHost *: SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key - SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle + SSLCertificateChainFile /usr/local/ispconfig/interface/ssl/ispserver.bundle 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 SSLHonorCipherOrder On diff --git a/install/tpl/debian6_dovecot.conf.master b/install/tpl/debian6_dovecot.conf.master index 4286689cd448ef52004801a89570730b3ac36384..b45d666c9392aee2ccc803c06c15619df9979880 100644 --- a/install/tpl/debian6_dovecot.conf.master +++ b/install/tpl/debian6_dovecot.conf.master @@ -18,7 +18,7 @@ ssl_key_file = /etc/postfix/smtpd.key mail_privileged_group = mail -login_greeting = ISPConfig3 IMAP server ready... +login_greeting = MailServer managed by ISPConfig ## IMAP specific settings protocol imap { diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master index 8d6022502f042fee8fd22d0d2c3ec92da559d64c..070e6dde3cc96096c404856647d5cd64b48d1a69 100644 --- a/install/tpl/debian_dovecot.conf.master +++ b/install/tpl/debian_dovecot.conf.master @@ -178,7 +178,7 @@ ssl_key_file = /etc/postfix/smtpd.key #login_max_connections = 256 # Greeting message for clients. -#login_greeting = Dovecot ready. +login_greeting = MailServer managed by ISPConfig # Space-separated list of elements we want to log. The elements which have # a non-empty variable value are joined together to form a comma-separated diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master index cfac8564141d0d4dc8b30564a34d7707fa6a97f6..30618fe332633ffd81b0629e37e3309bed91b1d2 100644 --- a/install/tpl/fedora_dovecot.conf.master +++ b/install/tpl/fedora_dovecot.conf.master @@ -180,7 +180,7 @@ ssl_key_file = /etc/postfix/smtpd.key #login_max_connections = 256 # Greeting message for clients. -#login_greeting = Dovecot ready. +login_greeting = MailServer managed by ISPConfig # Space separated list of trusted network ranges. Connections from these # IPs are allowed to override their IP addresses and ports (for logging and diff --git a/install/tpl/mlmmj.conf.master b/install/tpl/mlmmj.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..44ba9e8728d2f9b08168525c232377491fe946a3 --- /dev/null +++ b/install/tpl/mlmmj.conf.master @@ -0,0 +1,5 @@ +# Path of the skeleton for mailing lists +skel_dir = /usr/share/mlmmj/text.skel + +# Where to store ML data and archive +spool_dir = /var/spool/mlmmj \ No newline at end of file diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf b/install/tpl/mysql-virtual_outgoing_bcc.cf deleted file mode 100644 index dfeb04b553ccb54b108c69db1fb652bea93b05af..0000000000000000000000000000000000000000 --- a/install/tpl/mysql-virtual_outgoing_bcc.cf +++ /dev/null @@ -1,8 +0,0 @@ -user = {mysql_server_ispconfig_user} -password = {mysql_server_ispconfig_password} -dbname = {mysql_server_database} -table = mail_user -select_field = sender_cc -where_field = email -additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disables$ -hosts = 127.0.0.1 \ No newline at end of file diff --git a/install/tpl/mysql-virtual_outgoing_bcc.cf.master b/install/tpl/mysql-virtual_outgoing_bcc.cf.master index af062f66b2d3a900a2f74270b30555fd3bb41d7d..bf3ddbff01f10031183309f773d3fa6ef8f467a1 100644 --- a/install/tpl/mysql-virtual_outgoing_bcc.cf.master +++ b/install/tpl/mysql-virtual_outgoing_bcc.cf.master @@ -5,4 +5,4 @@ table = mail_user select_field = sender_cc where_field = email additional_conditions = and postfix = 'y' and disabledeliver = 'n' and disablesmtp = 'n' and sender_cc != '' -hosts = 127.0.0.1 \ No newline at end of file +hosts = {mysql_server_ip} diff --git a/install/tpl/named.conf.options.master b/install/tpl/named.conf.options.master index f13976ffd6db31f72447c1d0d57be7d2935a556d..7f89fa4ee5b902574edeaa0d3a8cb7acdddccdbe 100644 --- a/install/tpl/named.conf.options.master +++ b/install/tpl/named.conf.options.master @@ -22,6 +22,7 @@ options { dnssec-validation yes; dnssec-lookaside auto; + version "DNS-Server"; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; diff --git a/install/tpl/nginx_apps.vhost.master b/install/tpl/nginx_apps.vhost.master index e1bb6d1849d40e2eb3681ac807c98860f07f6c1c..701f3defb1db35963a2c7a04f7b3fe097f8b968b 100644 --- a/install/tpl/nginx_apps.vhost.master +++ b/install/tpl/nginx_apps.vhost.master @@ -97,7 +97,7 @@ server { # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; - # To access phpMyAdmin, the default user (like www-data on Debian/Ubuntu) must be used + # To access phpMyAdmin, the default user (like www-data on Debian/Devuan/Ubuntu) must be used {use_tcp}fastcgi_pass 127.0.0.1:9000; {use_socket}fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; @@ -147,7 +147,7 @@ server { # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; - # To access SquirrelMail, the default user (like www-data on Debian/Ubuntu) must be used + # To access SquirrelMail, the default user (like www-data on Debian/Devuan/Ubuntu) must be used {use_tcp}fastcgi_pass 127.0.0.1:9000; {use_socket}fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master index 9d345fa911af48198caf1d322b32ca460d99be59..2ecab07876de69b2fc49390a1e17666ddfdd6bb2 100644 --- a/install/tpl/opensuse_dovecot.conf.master +++ b/install/tpl/opensuse_dovecot.conf.master @@ -187,7 +187,7 @@ ssl_key_file = /etc/postfix/smtpd.key #login_max_connections = 256 # Greeting message for clients. -#login_greeting = Dovecot ready. +login_greeting = MailServer managed by ISPConfig # Space separated list of trusted network ranges. Connections from these # IPs are allowed to override their IP addresses and ports (for logging and diff --git a/install/tpl/pureftpd_mysql.conf.master b/install/tpl/pureftpd_mysql.conf.master index 484f1054c843555e273f9ac4d4141c43e2f40d13..0823f63324ce4d2bfb312e9c4c071703050375f0 100644 --- a/install/tpl/pureftpd_mysql.conf.master +++ b/install/tpl/pureftpd_mysql.conf.master @@ -5,45 +5,30 @@ # # ############################################## - # Optional : MySQL server name or IP. Don't define this for unix sockets. - MYSQLServer {mysql_server_ip} - # Optional : MySQL port. Don't define this if a local unix socket is used. - # MYSQLPort 3306 - # Optional : define the location of mysql.sock if the server runs on this host. - # MYSQLSocket /var/run/mysqld/mysqld.sock - # Mandatory : user to bind the server as. - MYSQLUser {mysql_server_ispconfig_user} - # Mandatory : user password. You must have a password. - MYSQLPassword {mysql_server_ispconfig_password} - # Mandatory : database to open. - MYSQLDatabase {mysql_server_database} - # Mandatory : how passwords are stored # Valid values are : "cleartext", "crypt", "md5" and "password" # ("password" = MySQL password() function) # You can also use "any" to try "crypt", "md5" *and* "password" - MYSQLCrypt crypt - # In the following directives, parts of the strings are replaced at # run-time before performing queries : # @@ -56,73 +41,50 @@ MYSQLCrypt crypt # Very complex queries can be performed using these substitution strings, # especially for virtual hosting. - # Query to execute in order to fetch the password - MYSQLGetPW SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Query to execute in order to fetch the system user name or uid - MYSQLGetUID SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : default UID - if set this overrides MYSQLGetUID - #MYSQLDefaultUID 1000 - # Query to execute in order to fetch the system user group or gid - MYSQLGetGID SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : default GID - if set this overrides MYSQLGetGID - #MYSQLDefaultGID 1000 - # Query to execute in order to fetch the home directory - MYSQLGetDir SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : query to get the maximal number of files # Pure-FTPd must have been compiled with virtual quotas support. - MySQLGetQTAFS SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : query to get the maximal disk usage (virtual quotas) # The number should be in Megabytes. # Pure-FTPd must have been compiled with virtual quotas support. - MySQLGetQTASZ SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : ratios. The server has to be compiled with ratio support. - MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) - # Optional : bandwidth throttling. # The server has to be compiled with throttling support. # Values are in KB/s . - MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW()) # Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS : # 1) You know what you are doing. # 2) Real and virtual users match. - # MySQLForceTildeExpansion 1 - # If you upgraded your tables to transactionnal tables (Gemini, # BerkeleyDB, Innobase...), you can enable SQL transactions to # avoid races. Leave this commented if you are using the # traditionnal MyIsam databases or old (< 3.23.x) MySQL versions. - -MySQLTransactions On +# MySQLTransactions On \ No newline at end of file diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 2f4d7db3a47265fef8a138bc5c5330fd0635199e..cfbdfa3a06c93c755bfbc479976f10cdb76ab948 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -55,6 +55,7 @@ overquota_notify_client=y overquota_notify_freq=7 overquota_notify_onok=n sendmail_path=/usr/sbin/sendmail +mailinglist_manager=mlmmj [getmail] getmail_config_dir=/etc/getmail diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master index 535bed783fa426625d77aea5b463c417124b28a8..1988762c6c6b974e0252560f9ec38420ecd70419 100644 --- a/install/tpl/system.ini.master +++ b/install/tpl/system.ini.master @@ -11,6 +11,7 @@ enable_custom_login=n mailbox_show_autoresponder_tab=y mailbox_show_mail_filter_tab=y mailbox_show_custom_rules_tab=y +mailbox_show_backup_tab=y mailboxlist_webmail_link=y webmail_url=/webmail dkim_path=/var/lib/amavis/dkim @@ -31,6 +32,7 @@ vhost_aliasdomains=n client_username_web_check_disabled=n backups_include_into_web_quota=n reseller_can_use_options=n +asp_new_package_disabled=y [tools] diff --git a/install/update.php b/install/update.php index 4b7ad1c0d347379d27a7c5202aaa0a8a58e22643..add1bb4a4a78c7957aed7b34b81e9c41180745bf 100644 --- a/install/update.php +++ b/install/update.php @@ -143,6 +143,9 @@ if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$di include_once 'dist/lib/'.$dist['id'].'.lib.php'; include_once 'dist/conf/'.$dist['confid'].'.conf.php'; +//** tRNG dependencies +$conf['tRNG']=''; + //** Get hostname exec('hostname -f', $tmp_out); $conf['hostname'] = $tmp_out[0]; @@ -276,7 +279,7 @@ if($conf['mysql']['master_slave_setup'] == 'y') { // initialize the connection to the master database $inst->dbmaster = new db(); if($inst->dbmaster->linkId) $inst->dbmaster->closeConn(); - $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"], $conf['mysql']["master_port"]); + $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_port"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]); $inst->dbmaster->setDBName($conf['mysql']["master_database"]); } else { $inst->dbmaster = $inst->db; @@ -379,6 +382,12 @@ if($reconfigure_services_answer == 'yes' || $reconfigure_services_answer == 'sel $inst->configure_mailman('update'); } + //* Configure mlmmj + if($conf['mlmmj']['installed'] == true && $inst->reconfigure_app('Mlmmj', $reconfigure_services_answer)) { + swriteln('Configuring Mlmmj'); + $inst->configure_mlmmj(/*update*/); + } + //** Configure Spamasassin if($inst->reconfigure_app('Spamassassin', $reconfigure_services_answer)) { swriteln('Configuring Spamassassin'); @@ -406,9 +415,7 @@ if($reconfigure_services_answer == 'yes' || $reconfigure_services_answer == 'sel } elseif($conf['bind']['installed'] == true) { swriteln('Configuring BIND'); $inst->configure_bind(); - if(!is_installed('haveged')) { - swriteln("[INFO] haveged not detected - DNSSEC can fail"); - } + $conf['tRNG'] .= 'DNSSEC with BIND, '; } else { swriteln('Configuring MyDNS'); $inst->configure_mydns(); @@ -569,6 +576,9 @@ if($reconfigure_services_answer == 'yes') { //* Set default servers setDefaultServers(); +//* test tRNG +if($conf['tRNG']) tRNG(); + $inst->create_mount_script(); //* Create md5 filelist diff --git a/interface/acme/.well-known/acme-challenge/empty.dir b/interface/acme/empty.dir similarity index 100% rename from interface/acme/.well-known/acme-challenge/empty.dir rename to interface/acme/empty.dir diff --git a/interface/index.htm b/interface/index.htm deleted file mode 100644 index 9e38208a2d2e5bf54750ea3ed68dea120ad39b0a..0000000000000000000000000000000000000000 --- a/interface/index.htm +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php index edbba27c7c2ea6cfaafd82333e74dbf5bc94848d..48349aec0f81a0639f82e394857dedf169118fbf 100755 --- a/interface/lib/app.inc.php +++ b/interface/lib/app.inc.php @@ -283,6 +283,7 @@ class app { $this->tpl->setVar('datalog_changes_end_txt', $this->lng('datalog_changes_end_txt')); $this->tpl->setVar('datalog_changes_count', $datalog['count']); $this->tpl->setLoop('datalog_changes', $datalog['entries']); + $this->tpl->setVar('datalog_changes_close_txt', $this->lng('datalog_changes_close_txt')); } else { $this->tpl->setVar('app_version', ''); } diff --git a/interface/lib/classes/aps_crawler.inc.php b/interface/lib/classes/aps_crawler.inc.php index a8fe812d28b8fcdf3f1428566675c5394bf8d624..cd6dd0637bcb89a5bfbc408ba58a8a82a2c2406d 100644 --- a/interface/lib/classes/aps_crawler.inc.php +++ b/interface/lib/classes/aps_crawler.inc.php @@ -588,6 +588,9 @@ class ApsCrawler extends ApsBase //$pkg_url = $this->app_download_url_list[$pkg]; $pkg_url = @file_get_contents($this->interface_pkg_dir.'/'.$pkg.'/PKG_URL'); + //* Get global sites config + $sites_config = $app->getconf->get_global_config('sites'); + // Insert only if data is complete if($pkg != '' && $pkg_name != '' && $pkg_category != '' && $pkg_version != '' && $pkg_release != '' && $pkg_url){ $insert_data = array( @@ -597,7 +600,7 @@ class ApsCrawler extends ApsBase "version" => $pkg_version, "release" => $pkg_release, "package_url" => $pkg_url, - "package_status" => PACKAGE_ENABLED + "package_status" => $sites_config['asp_new_package_disabled'] == 'y' ? PACKAGE_LOCKED : PACKAGE_ENABLED ); $app->db->datalogInsert('aps_packages', $insert_data, 'id'); } else { diff --git a/interface/lib/classes/custom_datasource.inc.php b/interface/lib/classes/custom_datasource.inc.php index 484d0fa055afbc32843039811e2622763239d6ab..9a0934f6904085de2635726f928475f552e582a4 100644 --- a/interface/lib/classes/custom_datasource.inc.php +++ b/interface/lib/classes/custom_datasource.inc.php @@ -135,6 +135,9 @@ class custom_datasource { case 'default_dbserver': $field = 'db_server'; break; + case 'default_xmppserver': + $field = 'xmpp_server'; + break; case 'default_vserverserver': $field = 'vserver_server'; break; @@ -150,6 +153,9 @@ class custom_datasource { case 'db_servers': $field = 'db_server'; break; + case 'xmpp_servers': + $field = 'xmpp_server'; + break; default: $field = 'web_server'; break; diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php index e0c003abca71a5d7117dcf360ffd95801b2e289d..7433104607d19a8085c67cf900ba837ba1298f25 100644 --- a/interface/lib/classes/db_mysql.inc.php +++ b/interface/lib/classes/db_mysql.inc.php @@ -74,14 +74,12 @@ class db { $this->dbCharset = $conf[$prefix.'db_charset']; $this->dbNewLink = $conf[$prefix.'db_new_link']; $this->dbClientFlags = $conf[$prefix.'db_client_flags']; + $this->_iConnId = mysqli_init(); - $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort); - $try = 0; - while((!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5) { - if($try > 0) sleep(1); - - $try++; - $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort); + mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort, NULL, $this->dbClientFlags); + for($try=0;(!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5;++$try) { + sleep($try); + mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort, NULL, $this->dbClientFlags); } if(!is_object($this->_iConnId) || mysqli_connect_error()) { @@ -243,7 +241,7 @@ class db { $try++; $ok = mysqli_ping($this->_iConnId); if(!$ok) { - if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort)) { + if(!mysqli_real_connect(mysqli_init(), $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) { if($try > 4) { $this->_sqlerror('DB::query -> reconnect'); return false; diff --git a/interface/lib/classes/parsedown/parsedown.php b/interface/lib/classes/parsedown/parsedown.php new file mode 100644 index 0000000000000000000000000000000000000000..5d96071ba4a6c2b94f9412b774e4b532589cb9c7 --- /dev/null +++ b/interface/lib/classes/parsedown/parsedown.php @@ -0,0 +1,1538 @@ +DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # iterate through lines to identify blocks + $markup = $this->lines($lines); + + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + # + # Setters + # + + function setBreaksEnabled($breaksEnabled) + { + $this->breaksEnabled = $breaksEnabled; + + return $this; + } + + protected $breaksEnabled; + + function setMarkupEscaped($markupEscaped) + { + $this->markupEscaped = $markupEscaped; + + return $this; + } + + protected $markupEscaped; + + function setUrlsLinked($urlsLinked) + { + $this->urlsLinked = $urlsLinked; + + return $this; + } + + protected $urlsLinked = true; + + # + # Lines + # + + protected $BlockTypes = array( + '#' => array('Header'), + '*' => array('Rule', 'List'), + '+' => array('List'), + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), + '0' => array('List'), + '1' => array('List'), + '2' => array('List'), + '3' => array('List'), + '4' => array('List'), + '5' => array('List'), + '6' => array('List'), + '7' => array('List'), + '8' => array('List'), + '9' => array('List'), + ':' => array('Table'), + '<' => array('Comment', 'Markup'), + '=' => array('SetextHeader'), + '>' => array('Quote'), + '[' => array('Reference'), + '_' => array('Rule'), + '`' => array('FencedCode'), + '|' => array('Table'), + '~' => array('FencedCode'), + ); + + # ~ + + protected $unmarkedBlockTypes = array( + 'Code', + ); + + # + # Blocks + # + + protected function lines(array $lines) + { + $CurrentBlock = null; + + foreach ($lines as $line) + { + if (chop($line) === '') + { + if (isset($CurrentBlock)) + { + $CurrentBlock['interrupted'] = true; + } + + continue; + } + + if (strpos($line, "\t") !== false) + { + $parts = explode("\t", $line); + + $line = $parts[0]; + + unset($parts[0]); + + foreach ($parts as $part) + { + $shortage = 4 - mb_strlen($line, 'utf-8') % 4; + + $line .= str_repeat(' ', $shortage); + $line .= $part; + } + } + + $indent = 0; + + while (isset($line[$indent]) and $line[$indent] === ' ') + { + $indent ++; + } + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) + { + $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); + + if (isset($Block)) + { + $CurrentBlock = $Block; + + continue; + } + else + { + if ($this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + } + } + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) + { + foreach ($this->BlockTypes[$marker] as $blockType) + { + $blockTypes []= $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) + { + $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); + + if (isset($Block)) + { + $Block['type'] = $blockType; + + if ( ! isset($Block['identified'])) + { + $Blocks []= $CurrentBlock; + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) + { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) + { + $CurrentBlock['element']['text'] .= "\n".$text; + } + else + { + $Blocks []= $CurrentBlock; + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + + # ~ + + $Blocks []= $CurrentBlock; + + unset($Blocks[0]); + + # ~ + + $markup = ''; + + foreach ($Blocks as $Block) + { + if (isset($Block['hidden'])) + { + continue; + } + + $markup .= "\n"; + $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); + } + + $markup .= "\n"; + + # ~ + + return $markup; + } + + protected function isBlockContinuable($Type) + { + return method_exists($this, 'block'.$Type.'Continue'); + } + + protected function isBlockCompletable($Type) + { + return method_exists($this, 'block'.$Type.'Complete'); + } + + # + # Code + + protected function blockCode($Line, $Block = null) + { + if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] >= 4) + { + $text = substr($Line['body'], 4); + + $Block = array( + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => array( + 'name' => 'code', + 'text' => $text, + ), + ), + ); + + return $Block; + } + } + + protected function blockCodeContinue($Line, $Block) + { + if ($Line['indent'] >= 4) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['element']['text']['text'] .= "\n"; + + $text = substr($Line['body'], 4); + + $Block['element']['text']['text'] .= $text; + + return $Block; + } + } + + protected function blockCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Comment + + protected function blockComment($Line) + { + if ($this->markupEscaped) + { + return; + } + + if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') + { + $Block = array( + 'markup' => $Line['body'], + ); + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + } + + protected function blockCommentContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + $Block['markup'] .= "\n" . $Line['body']; + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + + # + # Fenced Code + + protected function blockFencedCode($Line) + { + if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) + { + $Element = array( + 'name' => 'code', + 'text' => '', + ); + + if (isset($matches[1])) + { + $class = 'language-'.$matches[1]; + + $Element['attributes'] = array( + 'class' => $class, + ); + } + + $Block = array( + 'char' => $Line['text'][0], + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => $Element, + ), + ); + + return $Block; + } + } + + protected function blockFencedCodeContinue($Line, $Block) + { + if (isset($Block['complete'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) + { + $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); + + $Block['complete'] = true; + + return $Block; + } + + $Block['element']['text']['text'] .= "\n".$Line['body'];; + + return $Block; + } + + protected function blockFencedCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Header + + protected function blockHeader($Line) + { + if (isset($Line['text'][1])) + { + $level = 1; + + while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') + { + $level ++; + } + + if ($level > 6) + { + return; + } + + $text = trim($Line['text'], '# '); + + $Block = array( + 'element' => array( + 'name' => 'h' . min(6, $level), + 'text' => $text, + 'handler' => 'line', + ), + ); + + return $Block; + } + } + + # + # List + + protected function blockList($Line) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); + + if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'element' => array( + 'name' => $name, + 'handler' => 'elements', + ), + ); + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $matches[2], + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['li']['text'] []= ''; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $text, + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + return $Block; + } + + if ($Line['indent'] > 0) + { + $Block['li']['text'] []= ''; + + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + unset($Block['interrupted']); + + return $Block; + } + } + + # + # Quote + + protected function blockQuote($Line) + { + if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => 'lines', + 'text' => (array) $matches[1], + ), + ); + + return $Block; + } + } + + protected function blockQuoteContinue($Line, array $Block) + { + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text'] []= ''; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= $matches[1]; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $Block['element']['text'] []= $Line['text']; + + return $Block; + } + } + + # + # Rule + + protected function blockRule($Line) + { + if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) + { + $Block = array( + 'element' => array( + 'name' => 'hr' + ), + ); + + return $Block; + } + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (chop($Line['text'], $Line['text'][0]) === '') + { + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; + + return $Block; + } + } + + # + # Markup + + protected function blockMarkup($Line) + { + if ($this->markupEscaped) + { + return; + } + + if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) + { + $element = strtolower($matches[1]); + + if (in_array($element, $this->textLevelElements)) + { + return; + } + + $Block = array( + 'name' => $matches[1], + 'depth' => 0, + 'markup' => $Line['text'], + ); + + $length = strlen($matches[0]); + + $remainder = substr($Line['text'], $length); + + if (trim($remainder) === '') + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + $Block['closed'] = true; + + $Block['void'] = true; + } + } + else + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + return; + } + + if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) + { + $Block['closed'] = true; + } + } + + return $Block; + } + } + + protected function blockMarkupContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open + { + $Block['depth'] ++; + } + + if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close + { + if ($Block['depth'] > 0) + { + $Block['depth'] --; + } + else + { + $Block['closed'] = true; + } + } + + if (isset($Block['interrupted'])) + { + $Block['markup'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['markup'] .= "\n".$Line['body']; + + return $Block; + } + + # + # Reference + + protected function blockReference($Line) + { + if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) + { + $id = strtolower($matches[1]); + + $Data = array( + 'url' => $matches[2], + 'title' => null, + ); + + if (isset($matches[3])) + { + $Data['title'] = $matches[3]; + } + + $this->DefinitionData['Reference'][$id] = $Data; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Table + + protected function blockTable($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') + { + $alignments = array(); + + $divider = $Line['text']; + + $divider = trim($divider); + $divider = trim($divider, '|'); + + $dividerCells = explode('|', $divider); + + foreach ($dividerCells as $dividerCell) + { + $dividerCell = trim($dividerCell); + + if ($dividerCell === '') + { + continue; + } + + $alignment = null; + + if ($dividerCell[0] === ':') + { + $alignment = 'left'; + } + + if (substr($dividerCell, - 1) === ':') + { + $alignment = $alignment === 'left' ? 'center' : 'right'; + } + + $alignments []= $alignment; + } + + # ~ + + $HeaderElements = array(); + + $header = $Block['element']['text']; + + $header = trim($header); + $header = trim($header, '|'); + + $headerCells = explode('|', $header); + + foreach ($headerCells as $index => $headerCell) + { + $headerCell = trim($headerCell); + + $HeaderElement = array( + 'name' => 'th', + 'text' => $headerCell, + 'handler' => 'line', + ); + + if (isset($alignments[$index])) + { + $alignment = $alignments[$index]; + + $HeaderElement['attributes'] = array( + 'style' => 'text-align: '.$alignment.';', + ); + } + + $HeaderElements []= $HeaderElement; + } + + # ~ + + $Block = array( + 'alignments' => $alignments, + 'identified' => true, + 'element' => array( + 'name' => 'table', + 'handler' => 'elements', + ), + ); + + $Block['element']['text'] []= array( + 'name' => 'thead', + 'handler' => 'elements', + ); + + $Block['element']['text'] []= array( + 'name' => 'tbody', + 'handler' => 'elements', + 'text' => array(), + ); + + $Block['element']['text'][0]['text'] []= array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $HeaderElements, + ); + + return $Block; + } + } + + protected function blockTableContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) + { + $Elements = array(); + + $row = $Line['text']; + + $row = trim($row); + $row = trim($row, '|'); + + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); + + foreach ($matches[0] as $index => $cell) + { + $cell = trim($cell); + + $Element = array( + 'name' => 'td', + 'handler' => 'line', + 'text' => $cell, + ); + + if (isset($Block['alignments'][$index])) + { + $Element['attributes'] = array( + 'style' => 'text-align: '.$Block['alignments'][$index].';', + ); + } + + $Elements []= $Element; + } + + $Element = array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $Elements, + ); + + $Block['element']['text'][1]['text'] []= $Element; + + return $Block; + } + } + + # + # ~ + # + + protected function paragraph($Line) + { + $Block = array( + 'element' => array( + 'name' => 'p', + 'text' => $Line['text'], + 'handler' => 'line', + ), + ); + + return $Block; + } + + # + # Inline Elements + # + + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + ); + + # ~ + + protected $inlineMarkerList = '!"*_&[:<>`~\\'; + + # + # ~ + # + + public function line($text) + { + $markup = ''; + + # $excerpt is based on the first occurrence of a marker + + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) + { + $marker = $excerpt[0]; + + $markerPosition = strpos($text, $marker); + + $Excerpt = array('text' => $excerpt, 'context' => $text); + + foreach ($this->InlineTypes[$marker] as $inlineType) + { + $Inline = $this->{'inline'.$inlineType}($Excerpt); + + if ( ! isset($Inline)) + { + continue; + } + + # makes sure that the inline belongs to "our" marker + + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) + { + continue; + } + + # sets a default inline position + + if ( ! isset($Inline['position'])) + { + $Inline['position'] = $markerPosition; + } + + # the text that comes before the inline + $unmarkedText = substr($text, 0, $Inline['position']); + + # compile the unmarked text + $markup .= $this->unmarkedText($unmarkedText); + + # compile the inline + $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); + + # remove the examined text + $text = substr($text, $Inline['position'] + $Inline['extent']); + + continue 2; + } + + # the marker does not belong to an inline + + $unmarkedText = substr($text, 0, $markerPosition + 1); + + $markup .= $this->unmarkedText($unmarkedText); + + $text = substr($text, $markerPosition + 1); + } + + $markup .= $this->unmarkedText($text); + + return $markup; + } + + # + # ~ + # + + protected function inlineCode($Excerpt) + { + $marker = $Excerpt['text'][0]; + + if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ); + } + } + + protected function inlineEmailTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + if ( ! isset($matches[2])) + { + $url = 'mailto:' . $url; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $matches[1], + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + protected function inlineEmphasis($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + $marker = $Excerpt['text'][0]; + + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'strong'; + } + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'em'; + } + else + { + return; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => $emphasis, + 'handler' => 'line', + 'text' => $matches[1], + ), + ); + } + + protected function inlineEscapeSequence($Excerpt) + { + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) + { + return array( + 'markup' => $Excerpt['text'][1], + 'extent' => 2, + ); + } + } + + protected function inlineImage($Excerpt) + { + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') + { + return; + } + + $Excerpt['text']= substr($Excerpt['text'], 1); + + $Link = $this->inlineLink($Excerpt); + + if ($Link === null) + { + return; + } + + $Inline = array( + 'extent' => $Link['extent'] + 1, + 'element' => array( + 'name' => 'img', + 'attributes' => array( + 'src' => $Link['element']['attributes']['href'], + 'alt' => $Link['element']['text'], + ), + ), + ); + + $Inline['element']['attributes'] += $Link['element']['attributes']; + + unset($Inline['element']['attributes']['href']); + + return $Inline; + } + + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => 'line', + 'text' => null, + 'attributes' => array( + 'href' => null, + 'title' => null, + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches)) + { + $Element['text'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } + else + { + return; + } + + if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches)) + { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) + { + $Element['attributes']['title'] = substr($matches[2], 1, - 1); + } + + $extent += strlen($matches[0]); + } + else + { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) + { + $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } + else + { + $definition = strtolower($Element['text']); + } + + if ( ! isset($this->DefinitionData['Reference'][$definition])) + { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']); + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + protected function inlineMarkup($Excerpt) + { + if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false) + { + return; + } + + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + } + + protected function inlineSpecialCharacter($Excerpt) + { + if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) + { + return array( + 'markup' => '&', + 'extent' => 1, + ); + } + + $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); + + if (isset($SpecialCharacter[$Excerpt['text'][0]])) + { + return array( + 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', + 'extent' => 1, + ); + } + } + + protected function inlineStrikethrough($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) + { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'del', + 'text' => $matches[1], + 'handler' => 'line', + ), + ); + } + } + + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') + { + return; + } + + if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) + { + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $matches[0][0], + 'attributes' => array( + 'href' => $matches[0][0], + ), + ), + ); + + return $Inline; + } + } + + protected function inlineUrlTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) + { + $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]); + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + # ~ + + protected function unmarkedText($text) + { + if ($this->breaksEnabled) + { + $text = preg_replace('/[ ]*\n/', "
\n", $text); + } + else + { + $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); + $text = str_replace(" \n", "\n", $text); + } + + return $text; + } + + # + # Handlers + # + + protected function element(array $Element) + { + $markup = '<'.$Element['name']; + + if (isset($Element['attributes'])) + { + foreach ($Element['attributes'] as $name => $value) + { + if ($value === null) + { + continue; + } + + $markup .= ' '.$name.'="'.$value.'"'; + } + } + + if (isset($Element['text'])) + { + $markup .= '>'; + + if (isset($Element['handler'])) + { + $markup .= $this->{$Element['handler']}($Element['text']); + } + else + { + $markup .= $Element['text']; + } + + $markup .= ''; + } + else + { + $markup .= ' />'; + } + + return $markup; + } + + protected function elements(array $Elements) + { + $markup = ''; + + foreach ($Elements as $Element) + { + $markup .= "\n" . $this->element($Element); + } + + $markup .= "\n"; + + return $markup; + } + + # ~ + + protected function li($lines) + { + $markup = $this->lines($lines); + + $trimmedMarkup = trim($markup); + + if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') + { + $markup = $trimmedMarkup; + $markup = substr($markup, 3); + + $position = strpos($markup, "

"); + + $markup = substr_replace($markup, '', $position, 4); + } + + return $markup; + } + + # + # Deprecated Methods + # + + function parse($text) + { + $markup = $this->text($text); + + return $markup; + } + + # + # Static Methods + # + + static function instance($name = 'default') + { + if (isset(self::$instances[$name])) + { + return self::$instances[$name]; + } + + $instance = new static(); + + self::$instances[$name] = $instance; + + return $instance; + } + + private static $instances = array(); + + # + # Fields + # + + protected $DefinitionData; + + # + # Read-Only + + protected $specialCharacters = array( + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', + ); + + protected $StrongRegex = array( + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', + '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', + ); + + protected $EmRegex = array( + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', + ); + + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; + + protected $voidElements = array( + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', + ); + + protected $textLevelElements = array( + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', + 'i', 'rp', 'del', 'code', 'strike', 'marquee', + 'q', 'rt', 'ins', 'font', 'strong', + 's', 'tt', 'sub', 'mark', + 'u', 'xm', 'sup', 'nobr', + 'var', 'ruby', + 'wbr', 'span', + 'time', + ); +} \ No newline at end of file diff --git a/interface/lib/classes/parsedown/parsedown_extra.php b/interface/lib/classes/parsedown/parsedown_extra.php new file mode 100644 index 0000000000000000000000000000000000000000..7061893bd8940c11fae6a08fb0d749b28e626256 --- /dev/null +++ b/interface/lib/classes/parsedown/parsedown_extra.php @@ -0,0 +1,526 @@ +BlockTypes[':'] []= 'DefinitionList'; + $this->BlockTypes['*'] []= 'Abbreviation'; + + # identify footnote definitions before reference definitions + array_unshift($this->BlockTypes['['], 'Footnote'); + + # identify footnote markers before before links + array_unshift($this->InlineTypes['['], 'FootnoteMarker'); + } + + # + # ~ + + function text($text) + { + $markup = parent::text($text); + + # merge consecutive dl elements + + $markup = preg_replace('/<\/dl>\s+
\s+/', '', $markup); + + # add footnotes + + if (isset($this->DefinitionData['Footnote'])) + { + $Element = $this->buildFootnoteElement(); + + $markup .= "\n" . $this->element($Element); + } + + return $markup; + } + + # + # Blocks + # + + # + # Abbreviation + + protected function blockAbbreviation($Line) + { + if (preg_match('/^\*\[(.+?)\]:[ ]*(.+?)[ ]*$/', $Line['text'], $matches)) + { + $this->DefinitionData['Abbreviation'][$matches[1]] = $matches[2]; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Footnote + + protected function blockFootnote($Line) + { + if (preg_match('/^\[\^(.+?)\]:[ ]?(.*)$/', $Line['text'], $matches)) + { + $Block = array( + 'label' => $matches[1], + 'text' => $matches[2], + 'hidden' => true, + ); + + return $Block; + } + } + + protected function blockFootnoteContinue($Line, $Block) + { + if ($Line['text'][0] === '[' and preg_match('/^\[\^(.+?)\]:/', $Line['text'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + if ($Line['indent'] >= 4) + { + $Block['text'] .= "\n\n" . $Line['text']; + + return $Block; + } + } + else + { + $Block['text'] .= "\n" . $Line['text']; + + return $Block; + } + } + + protected function blockFootnoteComplete($Block) + { + $this->DefinitionData['Footnote'][$Block['label']] = array( + 'text' => $Block['text'], + 'count' => null, + 'number' => null, + ); + + return $Block; + } + + # + # Definition List + + protected function blockDefinitionList($Line, $Block) + { + if ( ! isset($Block) or isset($Block['type'])) + { + return; + } + + $Element = array( + 'name' => 'dl', + 'handler' => 'elements', + 'text' => array(), + ); + + $terms = explode("\n", $Block['element']['text']); + + foreach ($terms as $term) + { + $Element['text'] []= array( + 'name' => 'dt', + 'handler' => 'line', + 'text' => $term, + ); + } + + $Block['element'] = $Element; + + $Block = $this->addDdElement($Line, $Block); + + return $Block; + } + + protected function blockDefinitionListContinue($Line, array $Block) + { + if ($Line['text'][0] === ':') + { + $Block = $this->addDdElement($Line, $Block); + + return $Block; + } + else + { + if (isset($Block['interrupted']) and $Line['indent'] === 0) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['dd']['handler'] = 'text'; + $Block['dd']['text'] .= "\n\n"; + + unset($Block['interrupted']); + } + + $text = substr($Line['body'], min($Line['indent'], 4)); + + $Block['dd']['text'] .= "\n" . $text; + + return $Block; + } + } + + # + # Header + + protected function blockHeader($Line) + { + $Block = parent::blockHeader($Line); + + if (preg_match('/[ #]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE)) + { + $attributeString = $matches[1][0]; + + $Block['element']['attributes'] = $this->parseAttributeData($attributeString); + + $Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]); + } + + return $Block; + } + + # + # Markup + + protected function blockMarkupComplete($Block) + { + if ( ! isset($Block['void'])) + { + $Block['markup'] = $this->processTag($Block['markup']); + } + + return $Block; + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + $Block = parent::blockSetextHeader($Line, $Block); + + if (preg_match('/[ ]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE)) + { + $attributeString = $matches[1][0]; + + $Block['element']['attributes'] = $this->parseAttributeData($attributeString); + + $Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]); + } + + return $Block; + } + + # + # Inline Elements + # + + # + # Footnote Marker + + protected function inlineFootnoteMarker($Excerpt) + { + if (preg_match('/^\[\^(.+?)\]/', $Excerpt['text'], $matches)) + { + $name = $matches[1]; + + if ( ! isset($this->DefinitionData['Footnote'][$name])) + { + return; + } + + $this->DefinitionData['Footnote'][$name]['count'] ++; + + if ( ! isset($this->DefinitionData['Footnote'][$name]['number'])) + { + $this->DefinitionData['Footnote'][$name]['number'] = ++ $this->footnoteCount; # » & + } + + $Element = array( + 'name' => 'sup', + 'attributes' => array('id' => 'fnref'.$this->DefinitionData['Footnote'][$name]['count'].':'.$name), + 'handler' => 'element', + 'text' => array( + 'name' => 'a', + 'attributes' => array('href' => '#fn:'.$name, 'class' => 'footnote-ref'), + 'text' => $this->DefinitionData['Footnote'][$name]['number'], + ), + ); + + return array( + 'extent' => strlen($matches[0]), + 'element' => $Element, + ); + } + } + + private $footnoteCount = 0; + + # + # Link + + protected function inlineLink($Excerpt) + { + $Link = parent::inlineLink($Excerpt); + + $remainder = substr($Excerpt['text'], $Link['extent']); + + if (preg_match('/^[ ]*{('.$this->regexAttribute.'+)}/', $remainder, $matches)) + { + $Link['element']['attributes'] += $this->parseAttributeData($matches[1]); + + $Link['extent'] += strlen($matches[0]); + } + + return $Link; + } + + # + # ~ + # + + protected function unmarkedText($text) + { + $text = parent::unmarkedText($text); + + if (isset($this->DefinitionData['Abbreviation'])) + { + foreach ($this->DefinitionData['Abbreviation'] as $abbreviation => $meaning) + { + $pattern = '/\b'.preg_quote($abbreviation, '/').'\b/'; + + $text = preg_replace($pattern, ''.$abbreviation.'', $text); + } + } + + return $text; + } + + # + # Util Methods + # + + protected function addDdElement(array $Line, array $Block) + { + $text = substr($Line['text'], 1); + $text = trim($text); + + unset($Block['dd']); + + $Block['dd'] = array( + 'name' => 'dd', + 'handler' => 'line', + 'text' => $text, + ); + + if (isset($Block['interrupted'])) + { + $Block['dd']['handler'] = 'text'; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= & $Block['dd']; + + return $Block; + } + + protected function buildFootnoteElement() + { + $Element = array( + 'name' => 'div', + 'attributes' => array('class' => 'footnotes'), + 'handler' => 'elements', + 'text' => array( + array( + 'name' => 'hr', + ), + array( + 'name' => 'ol', + 'handler' => 'elements', + 'text' => array(), + ), + ), + ); + + uasort($this->DefinitionData['Footnote'], 'self::sortFootnotes'); + + foreach ($this->DefinitionData['Footnote'] as $definitionId => $DefinitionData) + { + if ( ! isset($DefinitionData['number'])) + { + continue; + } + + $text = $DefinitionData['text']; + + $text = parent::text($text); + + $numbers = range(1, $DefinitionData['count']); + + $backLinksMarkup = ''; + + foreach ($numbers as $number) + { + $backLinksMarkup .= ' '; + } + + $backLinksMarkup = substr($backLinksMarkup, 1); + + if (substr($text, - 4) === '

') + { + $backLinksMarkup = ' '.$backLinksMarkup; + + $text = substr_replace($text, $backLinksMarkup.'

', - 4); + } + else + { + $text .= "\n".'

'.$backLinksMarkup.'

'; + } + + $Element['text'][1]['text'] []= array( + 'name' => 'li', + 'attributes' => array('id' => 'fn:'.$definitionId), + 'text' => "\n".$text."\n", + ); + } + + return $Element; + } + + # ~ + + protected function parseAttributeData($attributeString) + { + $Data = array(); + + $attributes = preg_split('/[ ]+/', $attributeString, - 1, PREG_SPLIT_NO_EMPTY); + + foreach ($attributes as $attribute) + { + if ($attribute[0] === '#') + { + $Data['id'] = substr($attribute, 1); + } + else # "." + { + $classes []= substr($attribute, 1); + } + } + + if (isset($classes)) + { + $Data['class'] = implode(' ', $classes); + } + + return $Data; + } + + # ~ + + protected function processTag($elementMarkup) # recursive + { + # http://stackoverflow.com/q/1148928/200145 + libxml_use_internal_errors(true); + + $DOMDocument = new DOMDocument; + + # http://stackoverflow.com/q/11309194/200145 + $elementMarkup = mb_convert_encoding($elementMarkup, 'HTML-ENTITIES', 'UTF-8'); + + # http://stackoverflow.com/q/4879946/200145 + $DOMDocument->loadHTML($elementMarkup); + $DOMDocument->removeChild($DOMDocument->doctype); + $DOMDocument->replaceChild($DOMDocument->firstChild->firstChild->firstChild, $DOMDocument->firstChild); + + $elementText = ''; + + if ($DOMDocument->documentElement->getAttribute('markdown') === '1') + { + foreach ($DOMDocument->documentElement->childNodes as $Node) + { + $elementText .= $DOMDocument->saveHTML($Node); + } + + $DOMDocument->documentElement->removeAttribute('markdown'); + + $elementText = "\n".$this->text($elementText)."\n"; + } + else + { + foreach ($DOMDocument->documentElement->childNodes as $Node) + { + $nodeMarkup = $DOMDocument->saveHTML($Node); + + if ($Node instanceof DOMElement and ! in_array($Node->nodeName, $this->textLevelElements)) + { + $elementText .= $this->processTag($nodeMarkup); + } + else + { + $elementText .= $nodeMarkup; + } + } + } + + # because we don't want for markup to get encoded + $DOMDocument->documentElement->nodeValue = 'placeholder\x1A'; + + $markup = $DOMDocument->saveHTML($DOMDocument->documentElement); + $markup = str_replace('placeholder\x1A', $elementText, $markup); + + return $markup; + } + + # ~ + + protected function sortFootnotes($A, $B) # callback + { + return $A['number'] - $B['number']; + } + + # + # Fields + # + + protected $regexAttribute = '(?:[#.][-\w]+[ ]*)'; +} \ No newline at end of file diff --git a/interface/lib/classes/plugin_system_config_dns_ca.inc.php b/interface/lib/classes/plugin_system_config_dns_ca.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..6144a7349a174d11c0204dae0d3ecfbcd6227892 --- /dev/null +++ b/interface/lib/classes/plugin_system_config_dns_ca.inc.php @@ -0,0 +1,92 @@ +newTemplate('templates/system_config_dns_ca_edit.htm'); + include 'lib/lang/'.$_SESSION['s']['language'].'_system_config.lng'; + $pluginTpl->setVar($wb); + if(isset($_GET['action']) && ($_GET['action'] == 'edit') && $_GET['id'] > 0) { + $pluginTpl->setVar('edit_record', 1); + $ca_id = intval($_GET['id']); + $rec = $app->db->queryOneRecord("SELECT * FROM dns_ssl_ca WHERE id = ?", $ca_id); + $pluginTpl->setVar('id', $rec['id']); + $pluginTpl->setVar('ca_name', $rec['ca_name']); + $pluginTpl->setVar('ca_issue', $rec['ca_issue']); + $pluginTpl->setVar('ca_wildcard', $rec['ca_wildcard']); + $pluginTpl->setVar('ca_critical', $rec['ca_critical']); + $pluginTpl->setVar('ca_iodef', $rec['ca_iodef']); + $pluginTpl->setVar('active', $rec['active']); + } elseif(isset($_GET['action']) && ($_GET['action'] == 'save') && $_GET['id'] > 0) { + $pluginTpl->setVar('edit_record', 0); + $ca_id = intval($_GET['id']); + $pluginTpl->setVar('id', $ca_id); + $pluginTpl->setVar('ca_name', $_POST['ca_name']); + $pluginTpl->setVar('ca_issue', $_POST['ca_issue']); + $pluginTpl->setVar('ca_wildcard', $_POST['ca_wildcard']); + $pluginTpl->setVar('ca_critical', $_POST['ca_critical']); + $pluginTpl->setVar('ca_iodef', $_POST['ca_iodef']); + $pluginTpl->setVar('active', $_POST['active']); + } else { + $pluginTpl->setVar('edit_record', 0); + } + + return $pluginTpl->grab(); + + } + + function onUpdate() { + global $app; + + $id = intval($_GET['id']); + if(isset($_GET['action']) && $_GET['action'] == 'save') { + if($id > 0) { + $app->db->query("UPDATE dns_ssl_ca SET ca_name = ?, ca_issue = ?, ca_wildcard = ?, ca_iodef = ?, active = ? WHERE id = ?", $_POST['ca_name'], $_POST['ca_issue'], $_POST['ca_wildcard'], $_POST['ca_iodef'], $_POST['active'], $_GET['id']); + } else { + $app->db->query("INSERT INTO (sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, ca_name, ca_issue, ca_wildcard, ca_iodef, active) VALUES(1, 1, 'riud', 'riud', '', ?, ?, ?, ?, ?", $_POST['ca_name'], $_POST['ca_issue'], $_POST['ca_wildcard'], $_POST['ca_iodef'], $_POST['active']); + } + } + } + +} + +?> diff --git a/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php b/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..eb5882bd3b5bf68ed2b42dbc6577df79d927eaa6 --- /dev/null +++ b/interface/lib/classes/plugin_system_config_dns_ca_list.inc.php @@ -0,0 +1,81 @@ +newTemplate('templates/system_config_dns_ca_list.htm'); + + //* Loading language file + $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_system_config.lng'; + include $lng_file; + $listTpl->setVar($wb); + if($_SESSION['s']['user']['typ'] == 'admin') { + if(isset($_GET['action'])) { + $ca_id = $app->functions->intval($_GET['id']); + if($_GET['action'] == 'delete' && $ca_id > 0) { + $app->db->query("DELETE FROM dns_ssl_ca WHERE id = ?", $ca_id); + } + } + } + + if(isset($_GET['action']) && $_GET['action'] == 'edit' && $_GET['id'] > 0) $listTpl->setVar('edit_record', 1); + + // Getting Datasets from DB + $ca_records = $app->db->queryAllRecords("SELECT * FROM dns_ssl_ca ORDER BY ca_name ASC"); + $records=array(); + if(is_array($ca_records) && count($ca_records) > 0) { + foreach($ca_records as $ca) { + $rec['ca_id'] = $ca['id']; + $rec['name'] = $ca['ca_name']; + $rec['active'] = $ca['active']; + $records[] = $rec; + unset($rec); + } + $listTpl->setLoop('ca_records', @$records); + } + $listTpl->setVar('parent_id', $this->form->id); + + return $listTpl->grab(); + } + +} + +?> diff --git a/interface/lib/classes/remote.d/dns.inc.php b/interface/lib/classes/remote.d/dns.inc.php index 0cc7bc77add2e11d540df99b4d57d05ac98d4c17..a4e9fca013315294ad2275fea3b5bb853ce70498 100644 --- a/interface/lib/classes/remote.d/dns.inc.php +++ b/interface/lib/classes/remote.d/dns.inc.php @@ -71,6 +71,7 @@ class remoting_dns extends remoting { $tpl_rows = explode("\n", $tpl_content); $section = ''; $vars = array(); + $vars['xfer']=''; $dns_rr = array(); foreach($tpl_rows as $row) { $row = trim($row); @@ -176,6 +177,7 @@ class remoting_dns extends remoting { $dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id'); } } + return $dns_soa_id; exit; } else { throw new SoapFault('permission_denied', $error); @@ -198,15 +200,15 @@ class remoting_dns extends remoting { } //* Add a slave zone - public function dns_slave_add($session_id, $client_id, $params) - { + public function dns_slave_add($session_id, $client_id, $params) + { if(!$this->checkPerm($session_id, 'dns_zone_add')) { throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); return false; } return $this->insertQuery('../dns/form/dns_slave.tform.php', $client_id, $params); - } - + } + //* Update a slave zone public function dns_slave_update($session_id, $client_id, $primary_id, $params) { diff --git a/interface/lib/classes/remote.d/mail.inc.php b/interface/lib/classes/remote.d/mail.inc.php index bda7e861ed429f1c9c985c3dcf6d180aef843281..25bc1e8f3f64441f9700f14497fab5137a39d3d9 100644 --- a/interface/lib/classes/remote.d/mail.inc.php +++ b/interface/lib/classes/remote.d/mail.inc.php @@ -1105,6 +1105,172 @@ class remoting_mail extends remoting { return $app->quota_lib->get_mailquota_data($client_id, false); } -} + //** xmpp functions ----------------------------------------------------------------------------------- + + public function xmpp_domain_get($session_id, $primary_id) + { + global $app; + + if(!$this->checkPerm($session_id, 'xmpp_domain_get')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $app->uses('remoting_lib'); + $app->remoting_lib->loadFormDef('../mail/form/xmpp_domain.tform.php'); + return $app->remoting_lib->getDataRecord($primary_id); + } + + public function xmpp_domain_add($session_id, $client_id, $params) + { + if(!$this->checkPerm($session_id, 'xmpp_domain_add')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $primary_id = $this->insertQuery('../mail/form/xmpp_domain.tform.php', $client_id, $params); + return $primary_id; + } + + public function xmpp_domain_update($session_id, $client_id, $primary_id, $params) + { + if(!$this->checkPerm($session_id, 'xmpp_domain_update')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $affected_rows = $this->updateQuery('../mail/form/xmpp_domain.tform.php', $client_id, $primary_id, $params); + return $affected_rows; + } + + public function xmpp_domain_delete($session_id, $primary_id) + { + if(!$this->checkPerm($session_id, 'xmpp_domain_delete')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $affected_rows = $this->deleteQuery('../mail/form/xmpp_domain.tform.php', $primary_id); + return $affected_rows; + } + + public function xmpp_user_get($session_id, $primary_id) + { + global $app; + + if(!$this->checkPerm($session_id, 'xmpp_user_get')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $app->uses('remoting_lib'); + $app->remoting_lib->loadFormDef('../mail/form/xmpp_user.tform.php'); + return $app->remoting_lib->getDataRecord($primary_id); + } + + public function xmpp_user_add($session_id, $client_id, $params){ + global $app; + + if (!$this->checkPerm($session_id, 'xmpp_user_add')){ + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + + $jid_parts = explode('@', $params['jid']); + $tmp = $app->db->queryOneRecord("SELECT domain FROM xmpp_domain WHERE domain = ?", $jid_parts[1]); + if($tmp['domain'] != $jid_parts[1]) { + throw new SoapFault('xmpp_domain_does_not_exist', 'XMPP domain - '.$jid_parts[1].' - does not exist.'); + return false; + } + + $affected_rows = $this->insertQuery('../mail/form/xmpp_user.tform.php', $client_id, $params); + return $affected_rows; + } + + public function xmpp_user_update($session_id, $client_id, $primary_id, $params) + { + global $app; + + if (!$this->checkPerm($session_id, 'xmpp_user_update')) + { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + + $jid_parts = explode('@', $jid_parts['jid']); + $tmp = $app->db->queryOneRecord("SELECT domain FROM xmpp_domain WHERE domain = ?", $jid_parts[1]); + if($tmp['domain'] != $jid_parts[1]) { + throw new SoapFault('xmpp_domain_does_not_exist', 'Mail domain - '.$jid_parts[1].' - does not exist.'); + return false; + } + + $affected_rows = $this->updateQuery('../mail/form/xmpp_user.tform.php', $client_id, $primary_id, $params); + return $affected_rows; + } + + public function xmpp_user_delete($session_id, $primary_id) + { + if (!$this->checkPerm($session_id, 'xmpp_user_delete')) + { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + $affected_rows = $this->deleteQuery('../mail/form/xmpp_user.tform.php', $primary_id); + return $affected_rows; + } + + public function xmpp_domain_get_by_domain($session_id, $domain) { + global $app; + if(!$this->checkPerm($session_id, 'xmpp_domain_get_by_domain')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + if (!empty($domain)) { + $sql = "SELECT * FROM xmpp_domain WHERE domain = ?"; + $result = $app->db->queryAllRecords($sql, $domain); + return $result; + } + return false; + } + public function xmpp_domain_set_status($session_id, $primary_id, $status) { + global $app; + if(!$this->checkPerm($session_id, 'xmpp_domain_set_status')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + if(in_array($status, array('active', 'inactive'))) { + if ($status == 'active') { + $status = 'y'; + } else { + $status = 'n'; + } + $sql = "UPDATE xmpp_domain SET active = ? WHERE domain_id = ?"; + $app->db->query($sql, $status, $primary_id); + $result = $app->db->affectedRows(); + return $result; + } else { + throw new SoapFault('status_undefined', 'The status is not available'); + return false; + } + } + + public function xmpp_user_set_status($session_id, $primary_id, $status) { + global $app; + if(!$this->checkPerm($session_id, 'xmpp_user_set_status')) { + throw new SoapFault('permission_denied', 'You do not have the permissions to access this function.'); + return false; + } + if(in_array($status, array('active', 'inactive'))) { + if ($status == 'active') { + $status = 'y'; + } else { + $status = 'n'; + } + $sql = "UPDATE xmpp_user SET active = ? WHERE xmppuser_id = ?"; + $app->db->query($sql, $status, $primary_id); + $result = $app->db->affectedRows(); + return $result; + } else { + throw new SoapFault('status_undefined', 'The status is not available'); + return false; + } + } + +} ?> diff --git a/interface/lib/classes/remote.d/server.inc.php b/interface/lib/classes/remote.d/server.inc.php index 4962cb4c59e0a35575fcf4562c11322ae32fd07c..a9961784e2f2fc31c1da7eb768439b07574708d1 100644 --- a/interface/lib/classes/remote.d/server.inc.php +++ b/interface/lib/classes/remote.d/server.inc.php @@ -228,7 +228,7 @@ class remoting_server extends remoting { return false; } if (!empty($session_id) && !empty($server_id)) { - $sql = "SELECT mail_server, web_server, dns_server, file_server, db_server, vserver_server, proxy_server, firewall_server, mirror_server_id FROM server WHERE server_id = ?"; + $sql = "SELECT mail_server, web_server, dns_server, file_server, db_server, vserver_server, proxy_server, firewall_server, xmpp_server, mirror_server_id FROM server WHERE server_id = ?"; $all = $app->db->queryOneRecord($sql, $server_id); return $all; } else { diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index a3bb192d917e4049d91266b23adfe1072285f1f1..a5dfd52b19926828b736124a1a4e7fb3c55f9a36 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -71,128 +71,154 @@ class remoting { { global $app, $conf; + $error = array(); + // Maintenance mode $app->uses('ini_parser,getconf'); $server_config_array = $app->getconf->get_global_config('misc'); if($server_config_array['maintenance_mode'] == 'y'){ - throw new SoapFault('maintenance_mode', 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.'); - return false; - } + $error = array('faultcode' => 'maintenance_mode', 'faultstring' => 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.'); + } else { + if(empty($username)) { + $error = array('faultcode' => 'login_username_empty', 'faultstring' => 'The login username is empty.'); + } - if(empty($username)) { - throw new SoapFault('login_username_empty', 'The login username is empty.'); - return false; - } + if(empty($password)) { + $error = array('faultcode' => 'login_password_empty', 'faultstring' => 'The login password is empty.'); + } - if(empty($password)) { - throw new SoapFault('login_password_empty', 'The login password is empty.'); - return false; - } + //* Delete old remoting sessions + $sql = "DELETE FROM remote_session WHERE tstamp < UNIX_TIMESTAMP()"; + $app->db->query($sql); - //* Delete old remoting sessions - $sql = "DELETE FROM remote_session WHERE tstamp < UNIX_TIMESTAMP()"; - $app->db->query($sql); + $ip = md5($_SERVER['REMOTE_ADDR']); + $sql = "SELECT * FROM `attempts_login` WHERE `ip`= ? AND `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1"; + $alreadyfailed = $app->db->queryOneRecord($sql, $ip); + + if($alreadyfailed['times'] > 5) { + $error = array('faultcode' => 'error_user_too_many_logins', 'faultstring' => 'Too many failed logins.'); + } + } - if($client_login == true) { - $sql = "SELECT * FROM sys_user WHERE USERNAME = ?"; - $user = $app->db->queryOneRecord($sql, $username); - if($user) { - $saved_password = stripslashes($user['passwort']); + if (empty($error)) { + if($client_login == true) { + $sql = "SELECT * FROM sys_user WHERE USERNAME = ?"; + $user = $app->db->queryOneRecord($sql, $username); + if($user) { + $saved_password = stripslashes($user['passwort']); - if(substr($saved_password, 0, 3) == '$1$') { - //* The password is crypt-md5 encrypted - $salt = '$1$'.substr($saved_password, 3, 8).'$'; + if(substr($saved_password, 0, 3) == '$1$') { + //* The password is crypt-md5 encrypted + $salt = '$1$'.substr($saved_password, 3, 8).'$'; - if(crypt(stripslashes($password), $salt) != $saved_password) { - throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); - return false; + if(crypt(stripslashes($password), $salt) != $saved_password) { + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. Username or password wrong.'); + } + } else { + //* The password is md5 encrypted + if(md5($password) != $saved_password) { + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. Username or password wrong.'); + } } } else { - //* The password is md5 encrypted - if(md5($password) != $saved_password) { - throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); - return false; - } + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. Username or password wrong.'); + } + if($user['active'] != 1) { + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. User is blocked.'); } - } else { - throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); - return false; - } - if($user['active'] != 1) { - throw new SoapFault('client_login_failed', 'The login failed. User is blocked.'); - return false; - } - - // now we need the client data - $client = $app->db->queryOneRecord("SELECT client.can_use_api FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $user['default_group']); - if(!$client || $client['can_use_api'] != 'y') { - throw new SoapFault('client_login_failed', 'The login failed. Client may not use api.'); - return false; - } - //* Create a remote user session - //srand ((double)microtime()*1000000); - $remote_session = md5(mt_rand().uniqid('ispco')); - $remote_userid = $user['userid']; - $remote_functions = ''; - $tstamp = time() + $this->session_timeout; - $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp' - .') VALUES (?, ?, ?, 1, $tstamp)'; - $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); - return $remote_session; - } else { - $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = md5(?)"; - $remote_user = $app->db->queryOneRecord($sql, $username, $password); - if($remote_user['remote_userid'] > 0) { - $allowed_ips = explode(',',$remote_user['remote_ips']); - foreach($allowed_ips as $i => $allowed) { - if(!filter_var($allowed, FILTER_VALIDATE_IP)) { - // get the ip for a hostname - unset($allowed_ips[$i]); - $temp=dns_get_record($allowed, DNS_A+DNS_AAAA); - foreach($temp as $t) { - if(isset($t['ip'])) $allowed_ips[] = $t['ip']; - if(isset($t['ipv6'])) $allowed_ips[] = $t['ipv6']; + // now we need the client data + $client = $app->db->queryOneRecord("SELECT client.can_use_api FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $user['default_group']); + if(!$client || $client['can_use_api'] != 'y') { + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. Client may not use api.'); + } + } else { + $sql = "SELECT * FROM remote_user WHERE remote_username = ? and remote_password = md5(?)"; + $remote_user = $app->db->queryOneRecord($sql, $username, $password); + if($remote_user['remote_userid'] > 0) { + $allowed_ips = explode(',',$remote_user['remote_ips']); + foreach($allowed_ips as $i => $allowed) { + if(!filter_var($allowed, FILTER_VALIDATE_IP)) { + // get the ip for a hostname + unset($allowed_ips[$i]); + $temp=dns_get_record($allowed, DNS_A+DNS_AAAA); + foreach($temp as $t) { + if(isset($t['ip'])) $allowed_ips[] = $t['ip']; + if(isset($t['ipv6'])) $allowed_ips[] = $t['ipv6']; + } + unset($temp); } - unset($temp); } - } - $allowed_ips[] = '127.0.0.1'; - $allowed_ips[] = '::1'; - $allowed_ips=array_unique($allowed_ips); - $ip = $_SERVER['REMOTE_ADDR']; - $remote_allowed = @($ip == '::1' || $ip == '127.0.0.1')?true:false; - if(!$remote_allowed && $remote_user['remote_access'] == 'y') { - if(trim($remote_user['remote_ips']) == '') { - $remote_allowed=true; - } else { - $ip = inet_pton($_SERVER['REMOTE_ADDR']); - foreach($allowed_ips as $allowed) { - if($ip == inet_pton(trim($allowed))) { - $remote_allowed=true; - break; + $allowed_ips[] = '127.0.0.1'; + $allowed_ips[] = '::1'; + $allowed_ips=array_unique($allowed_ips); + $ip = $_SERVER['REMOTE_ADDR']; + $remote_allowed = @($ip == '::1' || $ip == '127.0.0.1')?true:false; + if(!$remote_allowed && $remote_user['remote_access'] == 'y') { + if(trim($remote_user['remote_ips']) == '') { + $remote_allowed=true; + } else { + $ip = inet_pton($_SERVER['REMOTE_ADDR']); + foreach($allowed_ips as $allowed) { + if($ip == inet_pton(trim($allowed))) { + $remote_allowed=true; + break; + } } } } + if(!$remote_allowed) { + $error = array('faultcode' => 'login_failed', 'faultstring' => 'The login is not allowed from '.$_SERVER['REMOTE_ADDR']); + } + } else { + $error = array('faultcode' => 'client_login_failed', 'faultstring' => 'The login failed. Username or password wrong.'); } - if(!$remote_allowed) { - throw new SoapFault('login_failed', 'The login is not allowed from '.$_SERVER['REMOTE_ADDR']); - return false; - } - //* Create a remote user session - //srand ((double)microtime()*1000000); - $remote_session = md5(mt_rand().uniqid('ispco')); - $remote_userid = $remote_user['remote_userid']; - $remote_functions = $remote_user['remote_functions']; - $tstamp = time() + $this->session_timeout; - $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' - .') VALUES (?, ?, ?, ?)'; - $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); - return $remote_session; - } else { - throw new SoapFault('login_failed', 'The login failed. Username or password wrong.'); + } + + if(empty($error) && isset($remote_user['remote_userid'])) { + //* Create a remote user session + //srand ((double)microtime()*1000000); + $remote_session = md5(mt_rand().uniqid('ispco')); + $remote_userid = $remote_user['remote_userid']; + $remote_functions = $remote_user['remote_functions']; + $tstamp = time() + $this->session_timeout; + $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' + .') VALUES (?, ?, ?, ?)'; + $app->db->query($sql, $remote_session,$remote_userid,$remote_functions,$tstamp); + } + } + + if (! empty($error)) { + if(! $alreadyfailed['times']) { + //* user login the first time wrong + $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; + $app->db->query($sql, $ip); + } elseif($alreadyfailed['times'] >= 1) { + //* update times wrong + $sql = "UPDATE `attempts_login` SET `times`=`times`+1, `login_time`=NOW() WHERE `ip` = ? AND `login_time` < NOW() ORDER BY `login_time` DESC LIMIT 1"; + $app->db->query($sql, $ip); + } + + $authlog = 'Failed login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s') . ' (api)'; + $authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a'); + fwrite($authlog_handle, $authlog ."\n"); + fclose($authlog_handle); + + throw new SoapFault($error['faultcode'], $error['faultstring']); return false; + } else { + // User login right, so attempts can be deleted + $sql = "DELETE FROM `attempts_login` WHERE `ip`=?"; + $app->db->query($sql, $ip); + + $authlog = 'Successful login for user \''. $username .'\' from '. $_SERVER['REMOTE_ADDR'] .' at '. date('Y-m-d H:i:s') . ' (api)'; + $authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a'); + fwrite($authlog_handle, $authlog ."\n"); + fclose($authlog_handle); } + + if (isset($remote_session)) { + return $remote_session; } } @@ -597,4 +623,4 @@ class remoting { } -?> +?> \ No newline at end of file diff --git a/interface/lib/classes/simplepie.inc.php b/interface/lib/classes/simplepie.inc.php index 5d36c09d34b62c7bf2fb1b235099b5344ac6de99..868c6bdbc90aba82334dfa9bf01be5b8ca9b033e 100644 --- a/interface/lib/classes/simplepie.inc.php +++ b/interface/lib/classes/simplepie.inc.php @@ -13338,7 +13338,7 @@ class SimplePie_Parse_Date } // Convert the number of seconds to an integer, taking decimals into account - $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); + $second = round($match[6] + (float)$match[7] / pow(10, (int)strlen($match[7]))); return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; } diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index d06072e830c75e9b33e7abe960c3ef69311d1d31..a0e196571cb29883654eff680d0e454699dd84ae 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -542,7 +542,7 @@ class tform_base { foreach($field['value'] as $k => $v) { $checked = ($k == $val)?' CHECKED':''; //$out .= "\r\n"; - $out .= "\r\n"; + $out .= "\r\n"; $elementNo++; } } @@ -673,7 +673,7 @@ class tform_base { foreach($field['value'] as $k => $v) { $checked = ($k == $field["default"])?' CHECKED':''; //$out .= "\r\n"; - $out .= "\r\n"; + $out .= "\r\n"; $elementNo++; } } @@ -1030,13 +1030,22 @@ class tform_base { //* 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 + + //* When the field may contain several email addresses, split them by the char defined as separator + if(isset($validator['separator']) && $validator['separator'] != '') + $field_value_array = explode($validator['separator'], $field_value); + else $field_value_array[] = $field_value; + + foreach($field_value_array AS $field_value) { + //* FIXME: Maybe it it's no good to alter the field value, but with multiline field we get adresses with carriege-return at the end + $field_value = trim($field_value); + if(filter_var($field_value, FILTER_VALIDATE_EMAIL) === false) { + $error = true; + } elseif (!preg_match("/^[^\\+]+$/", $field_value)) { // * disallow + in local-part $error = true; } } + if ($error) { $errmsg = $validator['errmsg']; if(isset($this->wordbook[$errmsg])) { diff --git a/interface/lib/lang/ar.lng b/interface/lib/lang/ar.lng index 25dd92083138df99e34cf3d1f6cb5057af80c3b1..749cff070736c52a37b679037ce3db95c197eeca 100644 --- a/interface/lib/lang/ar.lng +++ b/interface/lib/lang/ar.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/bg.lng b/interface/lib/lang/bg.lng index ff1e39fe34d9ba526550d6276e425f8d12d9a3a4..9e7c24c93fd2b7fef0a322d877d6294400307bee 100644 --- a/interface/lib/lang/bg.lng +++ b/interface/lib/lang/bg.lng @@ -29,14 +29,14 @@ $wb['toolsarea_head_txt'] = 'Настройки'; $wb['page_and_txt'] = 'и'; $wb['top_menu_system'] = 'Система'; $wb['top_menu_client'] = 'Клиент'; -$wb['top_menu_email'] = 'Email'; +$wb['top_menu_email'] = 'Имейл'; $wb['top_menu_monitor'] = 'Монитор'; $wb['top_menu_sites'] = 'Сайтове'; $wb['top_menu_dns'] = 'DNS'; $wb['top_menu_tools'] = 'Инструменти'; $wb['top_menu_help'] = 'Помощ'; $wb['top_menu_billing'] = 'Фактуриране'; -$wb['top_menu_domain'] = 'Domains'; +$wb['top_menu_domain'] = 'Домейни'; $wb['top_menu_dashboard'] = 'Начало'; $wb['latest_news_txt'] = 'Последни новини'; $wb['top_menu_vm'] = 'VСървър'; @@ -69,93 +69,94 @@ $wb['monthnamesshort_oct'] = 'Окт'; $wb['monthnamesshort_nov'] = 'Ное'; $wb['monthnamesshort_dec'] = 'Дек'; $wb['logout_txt'] = 'Изход'; -$wb['conf_format_dateshort_human_readable'] = 'yyyy-mm-dd'; +$wb['conf_format_dateshort_human_readable'] = 'гггг-мм-дд'; $wb['submit_confirmation'] = 'Наистина ли си съгласен с това действие?'; -$wb['top_menu_mailuser'] = 'Mailuser'; -$wb['globalsearch_resultslimit_of_txt'] = 'of'; -$wb['globalsearch_resultslimit_results_txt'] = 'results'; -$wb['globalsearch_noresults_text_txt'] = 'No results.'; -$wb['globalsearch_noresults_limit_txt'] = '0 results'; -$wb['globalsearch_searchfield_watermark_txt'] = 'Search'; -$wb['globalsearch_suggestions_text_txt'] = 'Suggestions'; -$wb['global_tabchange_warning_txt'] = 'Changed data in this tab will be changed if you press OK. On cancel they will be discarded.'; -$wb['global_tabchange_discard_txt'] = 'You have unsaved changes in this tab. Changes will be discarded if you continue.'; -$wb['datalog_changes_txt'] = 'The following changes are not yet populated to all servers:'; -$wb['datalog_changes_end_txt'] = 'Storing updates can take up to one minute. Please be patient.'; -$wb['datalog_status_i_web_database'] = 'Create new database'; -$wb['datalog_status_u_web_database'] = 'Update database'; -$wb['datalog_status_d_web_database'] = 'Delete database'; -$wb['datalog_status_i_web_database_user'] = 'Create database user for database'; -$wb['datalog_status_u_web_database_user'] = 'Update database user'; -$wb['datalog_status_d_web_database_user'] = 'Delete database user'; -$wb['datalog_status_i_web_domain'] = 'Create new website'; -$wb['datalog_status_u_web_domain'] = 'Update website settings'; -$wb['datalog_status_d_web_domain'] = 'Delete website'; -$wb['datalog_status_i_ftp_user'] = 'Create FTP user'; -$wb['datalog_status_u_ftp_user'] = 'Update FTP user'; -$wb['datalog_status_d_ftp_user'] = 'Delete FTP user'; -$wb['datalog_status_i_mail_domain'] = 'Create email domain'; -$wb['datalog_status_u_mail_domain'] = 'Update email domain'; -$wb['datalog_status_d_mail_domain'] = 'Delete email domain'; -$wb['datalog_status_i_mail_user'] = 'Create email user'; -$wb['datalog_status_u_mail_user'] = 'Update email user'; -$wb['datalog_status_d_mail_user'] = 'Delete email user'; -$wb['datalog_status_i_mail_forwarding'] = 'Create email address'; -$wb['datalog_status_u_mail_forwarding'] = 'Update email address'; -$wb['datalog_status_d_mail_forwarding'] = 'Delete email address'; -$wb['datalog_status_i_dns_rr'] = 'Create DNS record'; -$wb['datalog_status_u_dns_rr'] = 'Update DNS record'; -$wb['datalog_status_d_dns_rr'] = 'Delete DNS record'; -$wb['datalog_status_i_dns_soa'] = 'Create DNS zone'; -$wb['datalog_status_u_dns_soa'] = 'Update DNS zone'; -$wb['datalog_status_d_dns_soa'] = 'Delete DNS zone'; -$wb['datalog_status_i_cron'] = 'Create cron job'; -$wb['datalog_status_u_cron'] = 'Update cron job'; -$wb['datalog_status_d_cron'] = 'Delete cron job'; -$wb['datalog_status_i_mail_get'] = 'Create mail fetcher account'; -$wb['datalog_status_u_mail_get'] = 'Update mail fetcher account'; -$wb['datalog_status_d_mail_get'] = 'Delete mail fetcher account'; -$wb['datalog_status_i_mail_mailinglist'] = 'Create mailing list'; -$wb['datalog_status_u_mail_mailinglist'] = 'Update mailing list'; -$wb['datalog_status_d_mail_mailinglist'] = 'Delete mailing list'; -$wb['datalog_status_i_shell_user'] = 'Create shell user'; -$wb['datalog_status_u_shell_user'] = 'Update shell user'; -$wb['datalog_status_d_shell_user'] = 'Delete shell user'; -$wb['datalog_status_i_web_folder'] = 'Create folder protection'; -$wb['datalog_status_u_web_folder'] = 'Update folder protection'; -$wb['datalog_status_d_web_folder'] = 'Delete folder protection'; -$wb['datalog_status_i_web_folder_user'] = 'Create folder protection user'; -$wb['datalog_status_u_web_folder_user'] = 'Update folder protection user'; -$wb['datalog_status_d_web_folder_user'] = 'Delete folder protection user'; -$wb['datalog_status_i_spamfilter_users'] = 'Create spam filter settings'; -$wb['datalog_status_u_spamfilter_users'] = 'Update spam filter settings'; -$wb['datalog_status_d_spamfilter_users'] = 'Delete spam filter settings'; -$wb['login_as_txt'] = 'Log in as'; -$wb['no_domain_perm'] = 'You have no permission for this domain.'; -$wb['no_destination_perm'] = 'You have no permission for this destination.'; -$wb['client_you_are_locked'] = 'You have no permission to change any settings.'; -$wb['gender_m_txt'] = 'Mr.'; -$wb['gender_f_txt'] = 'Ms.'; -$wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'This client has records in the billing module, therefore he cannot be deleted.'; -$wb['yes_txt'] = 'Yes'; -$wb['no_txt'] = 'No'; -$wb['None'] = 'None'; -$wb['strength_1'] = 'Weak'; -$wb['strength_2'] = 'Fair'; -$wb['strength_3'] = 'Good'; -$wb['strength_4'] = 'Strong'; -$wb['strength_5'] = 'Very Strong'; -$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".'; -$wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.'; -$wb['security_check1_txt'] = 'Check for security permission:'; -$wb['security_check2_txt'] = 'failed.'; -$wb['err_csrf_attempt_blocked'] = 'CSRF attempt blocked.'; -$wb['select_directive_snippet_txt'] = 'Directive Snippets'; -$wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; -$wb['datalog_status_i_xmpp_domain'] = 'Create XMPP domain'; -$wb['datalog_status_u_xmpp_domain'] = 'Update XMPP domain'; -$wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; -$wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; -$wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; -$wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['top_menu_mailuser'] = 'Имейл потребител'; +$wb['globalsearch_resultslimit_of_txt'] = 'от'; +$wb['globalsearch_resultslimit_results_txt'] = 'резултата'; +$wb['globalsearch_noresults_text_txt'] = 'Няма намерени резултати.'; +$wb['globalsearch_noresults_limit_txt'] = '0 резултата'; +$wb['globalsearch_searchfield_watermark_txt'] = 'Търсене'; +$wb['globalsearch_suggestions_text_txt'] = 'Предложения'; +$wb['global_tabchange_warning_txt'] = 'Промените в тази секция бъдат запазени ако натиснете OK. При отмяна ще бъдат отхвърлени.'; +$wb['global_tabchange_discard_txt'] = 'Направили сте промени, които не са запазени. Промените ще бъдат отхвърлени, ако продължите.'; +$wb['datalog_changes_txt'] = 'Следните промени все още не са отразени на всички сървъри:'; +$wb['datalog_changes_end_txt'] = 'Запазването на промените може да отнеме до една минута. Моля, бъдете търпеливи.'; +$wb['datalog_status_i_web_database'] = 'Създай нова база данни'; +$wb['datalog_status_u_web_database'] = 'Обнови база данни'; +$wb['datalog_status_d_web_database'] = 'Изтрий база данни'; +$wb['datalog_status_i_web_database_user'] = 'Създай потребител за база данни'; +$wb['datalog_status_u_web_database_user'] = 'Обнови потребител за база данни'; +$wb['datalog_status_d_web_database_user'] = 'Изтрий потребител за база данни'; +$wb['datalog_status_i_web_domain'] = 'Създай нов уебсайт'; +$wb['datalog_status_u_web_domain'] = 'Обнови уебсайт настройките'; +$wb['datalog_status_d_web_domain'] = 'Изтрий уебсайт'; +$wb['datalog_status_i_ftp_user'] = 'Създай FTP потребител'; +$wb['datalog_status_u_ftp_user'] = 'Обнови FTP потребител'; +$wb['datalog_status_d_ftp_user'] = 'Изтрий FTP потребител'; +$wb['datalog_status_i_mail_domain'] = 'Създай имейл домейн'; +$wb['datalog_status_u_mail_domain'] = 'Обнови имейл домейн'; +$wb['datalog_status_d_mail_domain'] = 'Изтрий имейл домейн'; +$wb['datalog_status_i_mail_user'] = 'Създай имейл потребител'; +$wb['datalog_status_u_mail_user'] = 'Обнови имейл потребител'; +$wb['datalog_status_d_mail_user'] = 'Изтрий имейл потребител'; +$wb['datalog_status_i_mail_forwarding'] = 'Създай имейл адрес'; +$wb['datalog_status_u_mail_forwarding'] = 'Обнови имейл адрес'; +$wb['datalog_status_d_mail_forwarding'] = 'Изтрий имейл адрес'; +$wb['datalog_status_i_dns_rr'] = 'Създай DNS запис'; +$wb['datalog_status_u_dns_rr'] = 'Обнови DNS запис'; +$wb['datalog_status_d_dns_rr'] = 'Изтрий DNS запис'; +$wb['datalog_status_i_dns_soa'] = 'Създай DNS зона'; +$wb['datalog_status_u_dns_soa'] = 'Обнови DNS зона'; +$wb['datalog_status_d_dns_soa'] = 'Изтрий DNS зона'; +$wb['datalog_status_i_cron'] = 'Създай автоматична задача'; +$wb['datalog_status_u_cron'] = 'Обнови автоматична задача'; +$wb['datalog_status_d_cron'] = 'Изтрий автоматична задача'; +$wb['datalog_status_i_mail_get'] = 'Създай имейл акаунт за извличане на поща'; +$wb['datalog_status_u_mail_get'] = 'Обнови имейл акаунт за извличане на поща'; +$wb['datalog_status_d_mail_get'] = 'Изтрий имейл акаунт за извличане на поща'; +$wb['datalog_status_i_mail_mailinglist'] = 'Създай пощенски списък'; +$wb['datalog_status_u_mail_mailinglist'] = 'Обнови пощенски списък'; +$wb['datalog_status_d_mail_mailinglist'] = 'Изтрий пощенски списък'; +$wb['datalog_status_i_shell_user'] = 'Създай shell потребител'; +$wb['datalog_status_u_shell_user'] = 'Обнови shell потребител'; +$wb['datalog_status_d_shell_user'] = 'Изтрий shell потребител'; +$wb['datalog_status_i_web_folder'] = 'Създай защитена директория'; +$wb['datalog_status_u_web_folder'] = 'Обнови защитена директория'; +$wb['datalog_status_d_web_folder'] = 'Изтрий защитена директория'; +$wb['datalog_status_i_web_folder_user'] = 'Създай потребител за защитена директория'; +$wb['datalog_status_u_web_folder_user'] = 'Обнови потребител за защитена директория'; +$wb['datalog_status_d_web_folder_user'] = 'Изтрий потребител за защитена директория'; +$wb['datalog_status_i_spamfilter_users'] = 'Създай спам филтър настройки'; +$wb['datalog_status_u_spamfilter_users'] = 'Обнови спам филтър настройки'; +$wb['datalog_status_d_spamfilter_users'] = 'Изтрий спам филтър настройки'; +$wb['login_as_txt'] = 'Логнат като'; +$wb['no_domain_perm'] = 'Нямате права върху този домейн.'; +$wb['no_destination_perm'] = 'Нямате права върху тази дестинация.'; +$wb['client_you_are_locked'] = 'Нямате права да променяте каквито и да било настройки.'; +$wb['gender_m_txt'] = 'Г-н'; +$wb['gender_f_txt'] = 'Г-жа'; +$wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'Този клиент не може да бъде изтрит, тъй като за него съществуват записи в билинг системата.'; +$wb['yes_txt'] = 'Да'; +$wb['no_txt'] = 'Не'; +$wb['None'] = 'Без'; +$wb['strength_1'] = 'Слаба'; +$wb['strength_2'] = 'Лесна'; +$wb['strength_3'] = 'Добра'; +$wb['strength_4'] = 'Сложна'; +$wb['strength_5'] = 'Много сложна'; +$wb['weak_password_txt'] = 'Избраната парола не отговаря на изискванията за сигурност. Трябва да съдържа поне {chars} символа и сложността и трябва да е \\"{strength}\\".'; +$wb['weak_password_length_txt'] = 'Избраната парола не отговаря на изискванията за сигурност. Трябва да съдържа поне {chars} символа.'; +$wb['security_check1_txt'] = 'Проверете за права за сигурност:'; +$wb['security_check2_txt'] = 'се провали.'; +$wb['err_csrf_attempt_blocked'] = 'CSRF опитът е блокиран.'; +$wb['select_directive_snippet_txt'] = 'Извлечения от директивите'; +$wb['select_master_directive_snippet_txt'] = 'Мастър Извлечения от директивите'; +$wb['datalog_status_i_xmpp_domain'] = 'Създай XMPP домейн'; +$wb['datalog_status_u_xmpp_domain'] = 'Обнови XMPP домейн'; +$wb['datalog_status_d_xmpp_domain'] = 'Изтрий XMPP домейн'; +$wb['datalog_status_i_xmpp_user'] = 'Създай XMPP потребител'; +$wb['datalog_status_u_xmpp_user'] = 'Обнови XMPP потребител'; +$wb['datalog_status_d_xmpp_user'] = 'Изтрий XMPP потребител'; +$wb['datalog_changes_close_txt'] = 'Затвори'; ?> diff --git a/interface/lib/lang/br.lng b/interface/lib/lang/br.lng index 7db654bd05b2ecd8cccdddc501d0f0a7bb56d5e1..9e5d065231b37292d9d02b2636ab4ef62f7f4fe1 100644 --- a/interface/lib/lang/br.lng +++ b/interface/lib/lang/br.lng @@ -149,6 +149,7 @@ $wb['weak_password_length_txt'] = 'A senha escolhida não corresponde às diretr $wb['security_check1_txt'] = 'Verifique se há permissão de segurança:'; $wb['security_check2_txt'] = 'falha'; $wb['err_csrf_attempt_blocked'] = 'CSRF temporariamente bloqueado.'; +$wb['datalog_changes_close_txt'] = 'Close'; $wb['select_directive_snippet_txt'] = 'Diretiva de trechos de código'; $wb['select_master_directive_snippet_txt'] = 'Diretiva mestre de trechos de código'; $wb['None'] = 'Nenhum'; diff --git a/interface/lib/lang/ca.lng b/interface/lib/lang/ca.lng index c39cd0db272fcd0861f0fad0b5d448a6a119c202..dc4ca57a82fe54514f7621106f8735080437f57b 100644 --- a/interface/lib/lang/ca.lng +++ b/interface/lib/lang/ca.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/cz.lng b/interface/lib/lang/cz.lng index 6bd61dd6d970c365f39c0445af0224c9033d928b..b1518d96bbb88130625606c151a35b88c9377041 100644 --- a/interface/lib/lang/cz.lng +++ b/interface/lib/lang/cz.lng @@ -152,10 +152,12 @@ $wb['security_check2_txt'] = 'failed.'; $wb['err_csrf_attempt_blocked'] = 'CSRF attempt blocked.'; $wb['select_directive_snippet_txt'] = 'Šablony částí prog. kódu'; $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; +$wb['datalog_changes_close_txt'] = 'Close'; $wb['datalog_status_i_xmpp_domain'] = 'Vytvořit XMPP doménu'; $wb['datalog_status_u_xmpp_domain'] = 'Aktualizovat XMPP doménu'; $wb['datalog_status_d_xmpp_domain'] = 'Smazat XMPP doménu'; $wb['datalog_status_i_xmpp_user'] = 'Vytvořit XMPP uživatele'; $wb['datalog_status_u_xmpp_user'] = 'Aktualizovat XMPP uživatele'; $wb['datalog_status_d_xmpp_user'] = 'Smazat XMPP uživatele'; + ?> diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng index 61551ceeab566d7472f5d4f41687703edf63a34a..f690a51c4cdf4fd278f35536b738a29bbf07e37e 100644 --- a/interface/lib/lang/de.lng +++ b/interface/lib/lang/de.lng @@ -158,4 +158,5 @@ $wb['security_check1_txt'] = 'Sicherheitsüberprüfung für:'; $wb['security_check2_txt'] = 'fehlgeschlagen.'; $wb['select_directive_snippet_txt'] = 'Direktiven Schnipsel'; $wb['select_master_directive_snippet_txt'] = 'Master Direktiven Schnipsel'; +$wb['datalog_changes_close_txt'] = 'Schließen'; ?> diff --git a/interface/lib/lang/dk.lng b/interface/lib/lang/dk.lng index 798d2ccd451ef6d6f3d02cb7fbe4869de621754d..f9f2f1b4b1e7841607ef13020fbd8d65d760596c 100644 --- a/interface/lib/lang/dk.lng +++ b/interface/lib/lang/dk.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng index 382bf4a75839c737702cb9124cd900d739c044f8..0c8ad1afa45a7c8665db00672f865875d674b8d6 100644 --- a/interface/lib/lang/el.lng +++ b/interface/lib/lang/el.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng index 66f4ee3811efc6c82b08b4338cfafc33c5013d9e..a3b9a53ae173cafe67fa20a1432e9771fbdab289 100644 --- a/interface/lib/lang/en.lng +++ b/interface/lib/lang/en.lng @@ -122,6 +122,9 @@ $wb['datalog_status_d_mail_get'] = 'Delete mail fetcher account'; $wb['datalog_status_i_mail_mailinglist'] = 'Create mailing list'; $wb['datalog_status_u_mail_mailinglist'] = 'Update mailing list'; $wb['datalog_status_d_mail_mailinglist'] = 'Delete mailing list'; +$wb['datalog_status_i_mail_ml_membership'] = 'Create mailing list member'; +$wb['datalog_status_u_mail_ml_membership'] = 'Update mailing list member'; +$wb['datalog_status_d_mail_ml_membership'] = 'Delete mailing list member'; $wb['datalog_status_i_shell_user'] = 'Create shell user'; $wb['datalog_status_u_shell_user'] = 'Update shell user'; $wb['datalog_status_d_shell_user'] = 'Delete shell user'; @@ -159,4 +162,5 @@ $wb['security_check1_txt'] = 'Check for security permission:'; $wb['security_check2_txt'] = 'failed.'; $wb['select_directive_snippet_txt'] = 'Directive Snippets'; $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> \ No newline at end of file diff --git a/interface/lib/lang/es.lng b/interface/lib/lang/es.lng index 3b1bae0b469eb7e9e1a904c6d41e320e0b980efc..eebec599578be37c3479673eb3b3a2636d080c94 100644 --- a/interface/lib/lang/es.lng +++ b/interface/lib/lang/es.lng @@ -152,10 +152,11 @@ $wb['security_check1_txt'] = 'Verificar permisos de seguridad:'; $wb['security_check2_txt'] = 'ha fallado.'; $wb['select_directive_snippet_txt'] = 'Directive Snippets'; $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; -$wb['datalog_status_i_xmpp_domain'] = 'Create XMPP domain'; -$wb['datalog_status_u_xmpp_domain'] = 'Update XMPP domain'; -$wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; -$wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; -$wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; -$wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_status_i_xmpp_domain'] = 'Crear dominio XMPP'; +$wb['datalog_status_u_xmpp_domain'] = 'Actualizar dominio XMPP'; +$wb['datalog_status_d_xmpp_domain'] = 'Borrar dominio XMPP'; +$wb['datalog_status_i_xmpp_user'] = 'Crear usuario XMPP'; +$wb['datalog_status_u_xmpp_user'] = 'Actualizar usuario XMPP'; +$wb['datalog_status_d_xmpp_user'] = 'Borrar usuario XMPP'; +$wb['datalog_changes_close_txt'] = 'Cerrar'; ?> diff --git a/interface/lib/lang/fi.lng b/interface/lib/lang/fi.lng index d4c23ca777a6388718c07c4be4f6883b99392476..4cec2fc37c928215ee3733d811dbddba700a340c 100755 --- a/interface/lib/lang/fi.lng +++ b/interface/lib/lang/fi.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng index 3e9bfa8daa4521f3c5a568df8ff0e4a6932115a3..aa1392db627f7e217c892e6f19d881c79b29a02c 100644 --- a/interface/lib/lang/fr.lng +++ b/interface/lib/lang/fr.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/hr.lng b/interface/lib/lang/hr.lng index 310371be479f1ea8d250aa7956dd7da305318817..e66a36c8c55ee073c15b8f145710c13599f18371 100644 --- a/interface/lib/lang/hr.lng +++ b/interface/lib/lang/hr.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/hu.lng b/interface/lib/lang/hu.lng index dd4cce79b3bffd015b61ffc7c06379148e78b677..8f4e8761bf8049ebc6cd18327cbd02a4971e5486 100644 --- a/interface/lib/lang/hu.lng +++ b/interface/lib/lang/hu.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/id.lng b/interface/lib/lang/id.lng index bd90fd5a1b5e10cb294cec6ff7486a3365bb61e4..45447b4756dc08974c5f2677404f6489013727f5 100644 --- a/interface/lib/lang/id.lng +++ b/interface/lib/lang/id.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/it.lng b/interface/lib/lang/it.lng index 33d16c3d5f66d055bfabf69dc69e4dbc7a16ae51..f5c22a67449051aba44ea9777367ddfd957728b1 100644 --- a/interface/lib/lang/it.lng +++ b/interface/lib/lang/it.lng @@ -114,6 +114,9 @@ $wb['datalog_status_d_cron'] = 'Elimina cron job'; $wb['datalog_status_i_mail_mailinglist'] = 'Crea mailing list'; $wb['datalog_status_u_mail_mailinglist'] = 'Aggiorna mailing list'; $wb['datalog_status_d_mail_mailinglist'] = 'Elimina mailing list'; +$wb['datalog_status_i_mail_ml_membership'] = 'Crea membro di mailing list'; +$wb['datalog_status_u_mail_ml_membership'] = 'Aggiorna membro di mailing list'; +$wb['datalog_status_d_mail_ml_membership'] = 'Elimina membro di mailing list'; $wb['datalog_status_i_shell_user'] = 'Crea utente shell'; $wb['datalog_status_u_shell_user'] = 'Aggiorna utente shell'; $wb['datalog_status_d_shell_user'] = 'Elimina utente shell'; @@ -142,20 +145,21 @@ $wb['weak_password_txt'] = 'La password indicata non segue le impostazioni di si $wb['weak_password_length_txt'] = 'La password indicata non segue le impostazioni di sicurezza. Deve essere lunga almeno {chars} caratteri.'; $wb['security_check1_txt'] = 'Verifica permessi di sicurezza:'; $wb['security_check2_txt'] = 'fallito.'; -$wb['global_tabchange_warning_txt'] = 'Changed data in this tab will be changed if you press OK. On cancel they will be discarded.'; -$wb['datalog_status_i_mail_get'] = 'Create mail fetcher account'; -$wb['datalog_status_u_mail_get'] = 'Update mail fetcher account'; -$wb['datalog_status_d_mail_get'] = 'Delete mail fetcher account'; -$wb['datalog_status_i_web_folder_user'] = 'Create folder protection user'; -$wb['datalog_status_u_web_folder_user'] = 'Update folder protection user'; -$wb['datalog_status_d_web_folder_user'] = 'Delete folder protection user'; -$wb['err_csrf_attempt_blocked'] = 'CSRF attempt blocked.'; -$wb['select_directive_snippet_txt'] = 'Directive Snippets'; +$wb['global_tabchange_warning_txt'] = 'Cliccando OK le modifiche effettuate in questo tab verranno salvate. Cancel per non salvare le modifiche.'; +$wb['datalog_status_i_mail_get'] = 'Crea account mail fetcher'; +$wb['datalog_status_u_mail_get'] = 'Aggiorna account mail fetcher'; +$wb['datalog_status_d_mail_get'] = 'Elimina account mail fetcher'; +$wb['datalog_status_i_web_folder_user'] = 'Crea protezione cartella'; +$wb['datalog_status_u_web_folder_user'] = 'Aggiorna protezione cartella'; +$wb['datalog_status_d_web_folder_user'] = 'Elimina protezione cartella'; +$wb['err_csrf_attempt_blocked'] = 'Tentativo CSRF bloccato.'; +$wb['select_directive_snippet_txt'] = 'Snippets direttiva'; $wb['select_master_directive_snippet_txt'] = 'Master Directive Snippets'; -$wb['datalog_status_i_xmpp_domain'] = 'Create XMPP domain'; -$wb['datalog_status_u_xmpp_domain'] = 'Update XMPP domain'; -$wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; -$wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; -$wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; -$wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_status_i_xmpp_domain'] = 'Crea dominio XMPP'; +$wb['datalog_status_u_xmpp_domain'] = 'Aggiorna dominio XMPP'; +$wb['datalog_status_d_xmpp_domain'] = 'Elimina dominio XMPP'; +$wb['datalog_status_i_xmpp_user'] = 'Crea utente XMPP'; +$wb['datalog_status_u_xmpp_user'] = 'Aggiorna utente XMPP'; +$wb['datalog_status_d_xmpp_user'] = 'Elimina utente XMPP'; +$wb['datalog_changes_close_txt'] = 'Chiudi'; ?> diff --git a/interface/lib/lang/ja.lng b/interface/lib/lang/ja.lng index 2a56e77399dc0a7d9f98fabba751d7e909082525..0946603c46b2955b13384c67d454cbaa0a5a079e 100644 --- a/interface/lib/lang/ja.lng +++ b/interface/lib/lang/ja.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/nl.lng b/interface/lib/lang/nl.lng index 888f9c020098702b7d3c1e4b8e9a956419bbee71..0605e02a125722a6dfa41b6f8831c0e99a2e2cc3 100644 --- a/interface/lib/lang/nl.lng +++ b/interface/lib/lang/nl.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/pl.lng b/interface/lib/lang/pl.lng index b5b62c816dd9a20b699ee7eaef9bc076d7af3c6b..b225430f15336748639d7fa5fbf3ce2b7bd84f3c 100644 --- a/interface/lib/lang/pl.lng +++ b/interface/lib/lang/pl.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/pt.lng b/interface/lib/lang/pt.lng index 7845520a5bb8db428dab5d281e2bfe476eb725c3..7f232a8e73f323c4ff5fc4015b43f4453a12de6f 100644 --- a/interface/lib/lang/pt.lng +++ b/interface/lib/lang/pt.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/ro.lng b/interface/lib/lang/ro.lng index 613f2377a12bfe152ad2bcc0764ed4480cc8ac51..6db08b7e1e1dcef4cf0305cd248293ab86b4d247 100644 --- a/interface/lib/lang/ro.lng +++ b/interface/lib/lang/ro.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/ru.lng b/interface/lib/lang/ru.lng index 823ef44c79161730252ef0143cb5960a457807d1..a1503b2677cd52858cb1b70349ca4201f5ed5a7e 100644 --- a/interface/lib/lang/ru.lng +++ b/interface/lib/lang/ru.lng @@ -68,7 +68,7 @@ $wb['monthnamesshort_sep'] = 'Сен'; $wb['monthnamesshort_oct'] = 'Окт'; $wb['monthnamesshort_nov'] = 'Ноя'; $wb['monthnamesshort_dec'] = 'Дек'; -$wb['conf_format_dateshort_human_readable'] = 'гггг-мм-дд'; +$wb['conf_format_dateshort_human_readable'] = 'yyyy-mm-dd'; $wb['logout_txt'] = 'Выход'; $wb['submit_confirmation'] = 'Вы действительно хотите выполнить это действие?'; $wb['top_menu_mailuser'] = 'Пользователь почты'; @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Удалить домен XMPP'; $wb['datalog_status_i_xmpp_user'] = 'Создать пользователя XMPP'; $wb['datalog_status_u_xmpp_user'] = 'Обновить пользователя XMPP'; $wb['datalog_status_d_xmpp_user'] = 'Удалить пользователя XMPP'; + ?> diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng index b6767144df9eaaca9528a3666128a2a6af85f114..cd7d80e9c39521ad8c2a19c3ca52df04d87912b5 100644 --- a/interface/lib/lang/se.lng +++ b/interface/lib/lang/se.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/sk.lng b/interface/lib/lang/sk.lng index 6b4ef7676f8f38e29409f6b649a3b063670c6853..a2c13805c69d4a84a4566ef3e1945531c2e3bcd1 100644 --- a/interface/lib/lang/sk.lng +++ b/interface/lib/lang/sk.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/lang/tr.lng b/interface/lib/lang/tr.lng index 115bc890bb97fb7536a4960bc705b0e05d37a46c..8e7b790b74716d96f31d2269cfc3661f4ca606b3 100644 --- a/interface/lib/lang/tr.lng +++ b/interface/lib/lang/tr.lng @@ -158,4 +158,5 @@ $wb['datalog_status_d_xmpp_domain'] = 'Delete XMPP domain'; $wb['datalog_status_i_xmpp_user'] = 'Create XMPP user'; $wb['datalog_status_u_xmpp_user'] = 'Update XMPP user'; $wb['datalog_status_d_xmpp_user'] = 'Delete XMPP user'; +$wb['datalog_changes_close_txt'] = 'Close'; ?> diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 5afd1c004494fc96062d253d3aa8f8779e6a235b..a4e973973e66629deca2949698168b4acf559801 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -148,17 +148,20 @@ class mail_user_filter_plugin { } $content .= 'if size :over '.intval($page_form->dataRecord["searchterm"]).$unit.' {'."\n"; } else { - - if($page_form->dataRecord["source"] == 'Header') { - $parts = explode(':',trim($page_form->dataRecord["searchterm"])); - $page_form->dataRecord["source"] = trim($parts[0]); - unset($parts[0]); - $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); - unset($parts); + if($page_form->dataRecord["source"] == 'Detail') { + $content .= 'if envelope :detail :regex "to" ["'; + } else { + if($page_form->dataRecord["source"] == 'Header') { + $parts = explode(':',trim($page_form->dataRecord["searchterm"])); + $page_form->dataRecord["source"] = trim($parts[0]); + unset($parts[0]); + $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); + unset($parts); + } + + $content .= 'if header :regex ["'.strtolower($page_form->dataRecord["source"]).'"] ["'; } - $content .= 'if header :regex ["'.strtolower($page_form->dataRecord["source"]).'"] ["'; - $searchterm = preg_quote($page_form->dataRecord["searchterm"]); $searchterm = str_replace( array( @@ -193,6 +196,8 @@ class mail_user_filter_plugin { $content .= " stop;\n"; } elseif ($page_form->dataRecord["action"] == 'reject') { $content .= ' reject "'.$page_form->dataRecord["target"].'"; stop;\n\n'; + } elseif ($page_form->dataRecord["action"] == 'read') { + $content .= ' setflag "\\\\Seen";\n stop;\n'; } else { $content .= " discard;\n stop;\n"; } @@ -254,6 +259,8 @@ if ( ".'$RETURNCODE'." != 1 ) $content .= 'ID' . "$page_form->id" . 'EndFolder = "$DEFAULT/.' . $page_form->dataRecord['target'] . '/"' . "\n"; $content .= "xfilter \"/usr/bin/formail -A \\\"X-User-Mail-Filter-ID"."$page_form->id".": Yes\\\"\"" . "\n"; $content .= "to ". '$ID' . "$page_form->id" . 'EndFolder' . "\n"; + } elseif ($page_form->dataRecord["action"] == 'read') { + $content .= ''; // mark as read currently not supported for Maildrop } else { $content .= "to /dev/null\n"; } diff --git a/interface/lib/plugins/system_config_dns_ca_plugin.inc.php b/interface/lib/plugins/system_config_dns_ca_plugin.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..5ab338640c006065a653abbaa97f3ce507972459 --- /dev/null +++ b/interface/lib/plugins/system_config_dns_ca_plugin.inc.php @@ -0,0 +1,103 @@ +plugin->registerEvent('dns:dns_caa:on_after_update', 'system_config_dns_ca_plugin', 'caa_update'); + $app->plugin->registerEvent('dns:dns_caa:on_after_insert', 'system_config_dns_ca_plugin', 'caa_update'); + + $app->plugin->registerEvent('sites:web_vhost_domain:on_after_insert', 'system_config_dns_ca_plugin', 'web_vhost_domain_edit'); + $app->plugin->registerEvent('sites:web_vhost_domain:on_after_update', 'system_config_dns_ca_plugin', 'web_vhost_domain_edit'); + } + + function caa_update($event_name, $page_form) { + global $app; + + if(trim($page_form->dataRecord['additional'] != '')) { + $rec = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE id = ?", $page_form->id); + unset($rec['id']); + $zone = $app->db->queryOneRecord("SELECT origin FROM dns_soa WHERE id = ?", $rec['zone']); + $host=str_replace($zone['origin'], '', $page_form->dataRecord['name']); + $host=rtrim($host,'.'); + $page_form->dataRecord['additional']=str_replace($host, '', $page_form->dataRecord['additional']); + $additional=explode(',', $page_form->dataRecord['additional']); + foreach($additional as $new) { + if($new != '') { + $insert_data = $rec; + $insert_data['name'] = $new.'.'.$zone['origin']; + $app->db->datalogInsert('dns_rr', $insert_data, 'id'); + } + } + } + } //* End function + + function web_vhost_domain_edit($event_name, $page_form) { + global $app; + + if($page_form->dataRecord['ssl_letsencrypt'] == 'y') { + $domain = $page_form->dataRecord['domain']; + $subdomain = $page_form->dataRecord['subdomain']; + $temp=$app->db->queryAllRecords("SELECT * FROM dns_rr WHERE type = 'CAA' AND (name = ? OR name = ?) AND data like ?", $domain.'.', $subdomain.'.'.$domain.'.', '%letsencrypt%'); + if(count($temp) == 0) { + $caa = $app->db->queryOneRecord("SELECT * FROM dns_ssl_ca WHERE ca_issue = 'letsencrypt.org' AND active = 'Y'"); + $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE origin = ?", $domain.'.'); + if(is_array($caa) && is_array($soa)) { + $records = array(); + $records[] = $domain.'.';; + if($subdomain != '' && $subdomain != 'www') $records[] = $subdomain.'.'.$domain; + foreach($records as $record) { + $new_rr = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE name = ?", $soa['origin']); + unset($new_rr['id']); + $new_rr['type'] = 'CAA'; + $new_rr['name'] = $record; + $new_rr['data'] = "0 issue \"$caa[ca_issue]\""; + $new_rr['ttl'] = $soa['ttl']; + $new_rr['active'] = 'Y'; + $new_rr['stamp'] = date('Y-m-d H:i:s'); + $new_rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']); + $app->db->datalogInsert('dns_rr', $new_rr, 'id', $new_rr['zone']); + $zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_rr['zone']); + $new_serial = $app->validate_dns->increase_serial($zone['serial']); + $app->db->datalogUpdate('dns_soa', array("serial" => $new_serial), 'id', $zone['id']); + } + } + } + } + } + +} // End class + +?> diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 70aac48e0787e06835b32a6773012e1cf213ec16..df1d2befdfacce4632facb3f0ce3afb5b031ed5c 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -375,6 +375,34 @@ $form["tabs"]['server'] = array( 'width' => '40', 'maxlength' => '255' ), + 'nagios_url' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array ( 0 => array ( 'type' => 'REGEX', + 'regex' => '/(^$)|(^((?:http|https)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s"]*))$)/', + 'errmsg'=> 'nagios_url_error_regex'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'nagios_user' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'nagios_password' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), 'monitor_system_updates' => array( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', @@ -650,6 +678,12 @@ $form["tabs"]['mail'] = array( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), + 'mailinglist_manager' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => '20', + 'value' => array('mlmmj' => 'Mlmmj', 'mailman' => 'Mailman') + ), //################################# // ENDE Datatable fields //################################# @@ -1664,7 +1698,7 @@ $form["tabs"]['jailkit'] = array( 'validators' => array( 0 => array('type' => 'NOTEMPTY', 'errmsg' => 'jailkit_chroot_app_programs_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/', + 'regex' => '/^[a-zA-Z0-9\*\.\-\_\/\ ]{1,}$/', 'errmsg'=> 'jailkit_chroot_app_programs_error_regex'), ), 'value' => '', diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php index 681d166b34c729a824902385c77d8cbfb3795f75..c3c4c969dfa38f3cf9eac4b34872991a27b2d460 100644 --- a/interface/web/admin/form/system_config.tform.php +++ b/interface/web/admin/form/system_config.tform.php @@ -160,6 +160,12 @@ $form["tabs"]['sites'] = array ( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), + 'asp_new_package_disabled' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), 'client_username_web_check_disabled' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', @@ -238,6 +244,12 @@ $form["tabs"]['mail'] = array ( 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') ), + 'mailbox_show_backup_tab' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), 'mailboxlist_webmail_link' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', @@ -730,5 +742,21 @@ $form["tabs"]['misc'] = array ( ) ); +$form['tabs']['dns_ca'] = array ( + 'title' => 'DNS CAs', + 'width' => 100, + 'template' => 'templates/system_config_dns_ca.htm', + 'fields' => array (), + 'plugins' => array ( + 'dns_ca' => array ( + 'class' => 'plugin_system_config_dns_ca', + 'options' => array() + ), + 'dns_ca_list' => array ( + 'class' => 'plugin_system_config_dns_ca_list', + 'options' => array() + ) + ) +); ?> diff --git a/interface/web/admin/lib/lang/ar_directive_snippets.lng b/interface/web/admin/lib/lang/ar_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/ar_directive_snippets.lng +++ b/interface/web/admin/lib/lang/ar_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/ar_system_config.lng b/interface/web/admin/lib/lang/ar_system_config.lng index 45fb0fa9e9a26d796f1b91a8697e84bbd4af64e7..d5a54ab724053bb52b84b791c2f406a2aa194415 100644 --- a/interface/web/admin/lib/lang/ar_system_config.lng +++ b/interface/web/admin/lib/lang/ar_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/bg_directive_snippets.lng b/interface/web/admin/lib/lang/bg_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/bg_directive_snippets.lng +++ b/interface/web/admin/lib/lang/bg_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/bg_system_config.lng b/interface/web/admin/lib/lang/bg_system_config.lng index 2f4eb86d3c33b4dd414a8b76e97593903f11f949..0aea75e2f7e586e1f9f54d5d9aa4d41a32a8a175 100644 --- a/interface/web/admin/lib/lang/bg_system_config.lng +++ b/interface/web/admin/lib/lang/bg_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/br_system_config.lng b/interface/web/admin/lib/lang/br_system_config.lng index 12b8dfddc99a731017a59f9ee1f728d3e4b05d1a..46b496d89c3390446f20d3caa9a50e15366710d1 100644 --- a/interface/web/admin/lib/lang/br_system_config.lng +++ b/interface/web/admin/lib/lang/br_system_config.lng @@ -79,6 +79,14 @@ $wb['default_mailserver_txt'] = 'Servidor de e-mails padrão'; $wb['default_webserver_txt'] = 'Servidor web padrão'; $wb['default_dnsserver_txt'] = 'Servidor dns padrão'; $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; $wb['default_dbserver_txt'] = 'Servidor de banco de dados padrão'; $wb['No'] = 'Não'; ?> diff --git a/interface/web/admin/lib/lang/ca_directive_snippets.lng b/interface/web/admin/lib/lang/ca_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/ca_directive_snippets.lng +++ b/interface/web/admin/lib/lang/ca_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/ca_system_config.lng b/interface/web/admin/lib/lang/ca_system_config.lng index 5809cc97b2816aca52e978689f2f7ce8176d482d..804bce4675c7b3676ed01ea845de0174bedbec44 100644 --- a/interface/web/admin/lib/lang/ca_system_config.lng +++ b/interface/web/admin/lib/lang/ca_system_config.lng @@ -28,6 +28,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Link to webmail in Mailbox list'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_txt'] = 'Webmail URL'; $wb['mailmailinglist_link_txt'] = 'Link to mailing list in Mailing list list'; $wb['mailmailinglist_url_txt'] = 'Mailing list URL'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Custom Text on Login-Page'; $wb['custom_login_link_txt'] = 'Custom Link on Login-Page'; $wb['login_link_error_regex'] = 'Invalid Link for Custom Login'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/cz_system_config.lng b/interface/web/admin/lib/lang/cz_system_config.lng index 930e3ebbfb6b4f56ee6f7d2a5eb8b7a8d82da21a..5f7e8cd7d443eae3386b59ce212d1c25324ac3ef 100644 --- a/interface/web/admin/lib/lang/cz_system_config.lng +++ b/interface/web/admin/lib/lang/cz_system_config.lng @@ -49,6 +49,7 @@ $wb['client_username_web_check_disabled_txt'] = 'Disable client username check f $wb['mailbox_show_autoresponder_tab_txt'] = 'Ukázat kartu automatická odpověď v podrobnostech u e-mailové schránky'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Ukázat kartu e-mailové filtry v podrobnostech u e-mailové schránky'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Ukázat kartu vlastní pravidla v podrobnostech u e-mailové schránky'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Neplatný webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Zástupný symbol'; $wb['webmail_url_note_txt'] = 'Zástupný symbol'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Vlastní text na přihlašovací stránce'; $wb['custom_login_link_txt'] = 'Vlastní odkaz (URL) na přihlašovací stránce (vlastní text)'; $wb['login_link_error_regex'] = 'Neplatný formát URL pro vlastní odkaz na přihlašovací stránce'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/de_directive_snippets.lng b/interface/web/admin/lib/lang/de_directive_snippets.lng index 9e369f4b514708b62098bd0f4796b338c0b24df6..d6d13c6d764449c8937591833cbd0ccbbf446d36 100644 --- a/interface/web/admin/lib/lang/de_directive_snippets.lng +++ b/interface/web/admin/lib/lang/de_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Bitte geben Sie einen Namen für den Sch $wb['directive_snippets_name_error_unique'] = 'Es existiert schon ein Direktiven-Schnipsel mit diesem Namen.'; $wb['variables_txt'] = 'Variablen'; $wb['customer_viewable_txt'] = 'Sichtbar für Kunden'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 2656243d6aa05abfabb2fb47ab88c0ba676a72f2..1d2755fe41c147b7aa59ed8b8f8f331c2343bdcf 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -198,6 +198,11 @@ $wb['munin_user_txt'] = 'Munin-Benutzer'; $wb['munin_password_txt'] = 'Munin-Passwort'; $wb['munin_url_error_regex'] = 'Ungültige Munin-URL'; $wb['munin_url_note_txt'] = 'Platzhalter:'; +$wb['nagios_url_txt'] = 'Nagios/Check_MK-URL'; +$wb['nagios_user_txt'] = 'Nagios/Check_MK-Benutzer'; +$wb['nagios_password_txt'] = 'Nagios/Check_MK-Passwort'; +$wb['nagios_url_error_regex'] = 'Ungültige Nagios/Check_MK-URL'; +$wb['nagios_url_note_txt'] = 'Check_MK wird automatisch erkannt. Platzhalter:'; $wb['backup_dir_is_mount_txt'] = 'Backupverzeichnis ist ein eigener Mount?'; $wb['backup_dir_mount_cmd_txt'] = 'Mount-Befehl, falls Backupverzeichnis nicht gemountet'; $wb['backup_delete_txt'] = 'Backups loeschen wenn eine Domain / Webseite geloescht wird'; diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng index 8620491ad4734f4a98ebb9271583ce5904301e97..84fd847330b9accf5eac6ece10605a380f817e3a 100644 --- a/interface/web/admin/lib/lang/de_system_config.lng +++ b/interface/web/admin/lib/lang/de_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Backups in Web Quota hinzuzählen.' $wb['mailbox_show_autoresponder_tab_txt'] = 'Zeige Autoresponder Reiter in E-Mail Kontodetails'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Zeige E-Mail Filter Reiter in E-Mail Kontodetails'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Zeige Benutzerregel Reiter in E-Mail Kontodetails'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Falsche Webmail URL'; $wb['reseller_can_use_options_txt'] = 'Reseller können den Optionen Reiter bei Webseiten verwenden'; $wb['phpmyadmin_url_note_txt'] = 'Platzhalter:'; diff --git a/interface/web/admin/lib/lang/dk_directive_snippets.lng b/interface/web/admin/lib/lang/dk_directive_snippets.lng index 7b43dcd40b8059b344ca2155647296bab1fe13dd..cf7ce200ded9e39612346b8658a10b396de47728 100644 --- a/interface/web/admin/lib/lang/dk_directive_snippets.lng +++ b/interface/web/admin/lib/lang/dk_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Angiv et navn til uddrag.'; $wb['directive_snippets_name_error_unique'] = 'Der er allerede et direktiv uddrag med dette navn.'; $wb['variables_txt'] = 'Variabler'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/dk_system_config.lng b/interface/web/admin/lib/lang/dk_system_config.lng index 2834cacad6e2acc15a3647a0e5b44f1408e386a0..ce4fd2326a7de7b5cffaa3b70e6973226b2599ea 100644 --- a/interface/web/admin/lib/lang/dk_system_config.lng +++ b/interface/web/admin/lib/lang/dk_system_config.lng @@ -49,6 +49,7 @@ $wb['client_username_web_check_disabled_txt'] = 'Deaktiver klient-brugernavns ch $wb['mailbox_show_autoresponder_tab_txt'] = 'Vis autoresponder tab i mail kontooplysninger'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Vis mail filter tab i mail kontooplysninger'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Vis custom mailfilter tab i mail kontooplysninger'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Ugyldigt webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Pladsholder:'; $wb['webmail_url_note_txt'] = 'Pladsholder:'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Custom Text on Login-Page'; $wb['custom_login_link_txt'] = 'Custom Link on Login-Page'; $wb['login_link_error_regex'] = 'Invalid Link for Custom Login'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/el_directive_snippets.lng b/interface/web/admin/lib/lang/el_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/el_directive_snippets.lng +++ b/interface/web/admin/lib/lang/el_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng index 4dadc1290bfc36a9f31fa2a9f91bc3092e1c145d..d99ccd2347b596158170448733f2f3c3182b4892 100644 --- a/interface/web/admin/lib/lang/el_system_config.lng +++ b/interface/web/admin/lib/lang/el_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Εμφάνιση της καρτέλας Αυτόματης Απάντησης στις λεπτομέρειες του λογαριασμού mail'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Εμφάνιση της καρτέλας Φίλτρα mail στις λεπτομέρειες του λογαριασμού mail'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Εμφάνιση της καρτέλας Προσαρμοσμένοι Κανόνες στις λεπτομέρειες του λογαριασμού mail'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/en_directive_snippets.lng b/interface/web/admin/lib/lang/en_directive_snippets.lng index 8e8a63afe1e3a8e3d5cd7d60b0c46432db51f2b6..7cb406a0d0720092a23a1e379d11aea0db724ade 100644 --- a/interface/web/admin/lib/lang/en_directive_snippets.lng +++ b/interface/web/admin/lib/lang/en_directive_snippets.lng @@ -8,5 +8,5 @@ $wb["directive_snippets_name_empty"] = 'Please specify a name for the snippet.'; $wb["directive_snippets_name_error_unique"] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; -?> \ No newline at end of file +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; +?> diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 80849cb5a795f23962d6a1e90849fa656b9c4cd5..b851dae68f8f68b8a7019b7055fddba61535072c 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -94,7 +94,7 @@ $wb["named_conf_local_path_txt"] = 'BIND named.conf.local path'; $wb["php_ini_path_cgi_txt"] = 'CGI php.ini path'; $wb["php_ini_path_apache_txt"] = 'Apache php.ini path'; $wb["check_apache_config_txt"] = 'Test apache configuration on restart'; -$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian and Ubuntu Servers. Do not enable this option if your network interface is not eth0.'; +$wb["network_config_warning_txt"] = 'The network configuration option is only available for Debian, Devuan and Ubuntu Servers. Do not enable this option if your network interface is not eth0.'; $wb["CA_path_txt"] = 'CA Path'; $wb["CA_pass_txt"] = 'CA passphrase'; $wb["fastcgi_config_syntax_txt"] = 'FastCGI config syntax'; @@ -199,6 +199,11 @@ $wb['munin_user_txt'] = 'Munin User'; $wb['munin_password_txt'] = 'Munin Password'; $wb['munin_url_error_regex'] = 'Invalid Munin URL'; $wb['munin_url_note_txt'] = 'Placeholder:'; +$wb['nagios_url_txt'] = 'Nagios/Check_MK URL'; +$wb['nagios_user_txt'] = 'Nagios/Check_MK User'; +$wb['nagios_password_txt'] = 'Nagios/Check_MK Password'; +$wb['nagios_url_error_regex'] = 'Invalid Nagios/Check_MK URL'; +$wb['nagios_url_note_txt'] = 'Check_MK is being autodetected. Placeholder:'; $wb["v6_prefix_txt"] = 'IPv6 Prefix'; $wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror'; $wb["v6_prefix_length"] = 'Prefix too long according to defined IPv6 '; @@ -282,6 +287,7 @@ $wb['xmpp_port_pastebin_txt'] = 'Pastebin'; $wb['xmpp_port_bosh_txt'] = 'BOSH'; $wb["disable_bind_log_txt"] = "Disable bind9 messages for Loglevel WARN"; $wb["apps_vhost_enabled_txt"] = "Apps-vhost enabled"; +$wb["mailinglist_manager_txt"] = 'Mailinglist Manager'; $wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check'; $wb['migration_mode_txt'] = 'Server Migration Mode'; ?> diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng index 38f178f9f5ba58672db59073790ca7400e9caa50..945d60372f6cd76d85c95a60de3ce15ff5b084e5 100644 --- a/interface/web/admin/lib/lang/en_system_config.lng +++ b/interface/web/admin/lib/lang/en_system_config.lng @@ -17,6 +17,7 @@ $wb['vhost_subdomains_txt'] = 'Create subdomains as web site'; $wb['vhost_subdomains_note_txt'] = 'You cannot disable this as long as vhost subdomains exist in the system!'; $wb['vhost_aliasdomains_txt'] = 'Create aliasdomains as web site'; $wb['vhost_aliasdomains_note_txt'] = 'You cannot disable this as long as vhost aliasdomains exist in the system!'; +$wb["asp_new_package_disabled_txt"] = 'Disable new aps packages'; $wb["dbname_prefix_error_regex"] = 'Char not allowed in database name prefix.'; $wb["dbuser_prefix_error_regex"] = 'Char not allowed in database user prefix.'; $wb["ftpuser_prefix_error_regex"] = 'Char not allowed in ftp user prefix.'; @@ -28,6 +29,7 @@ $wb["mailboxlist_webmail_link_txt"] = 'Link to webmail in Mailbox list'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show Autoresponder tab in Mailbox detail'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show Mail Filter tab in Mailbox detail'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show Custom Rules tab in Mailbox detail'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb["webmail_url_txt"] = 'Webmail URL'; $wb["mailmailinglist_link_txt"] = 'Link to mailing list in Mailing list list'; $wb["mailmailinglist_url_txt"] = 'Mailing list URL'; @@ -55,6 +57,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -84,4 +87,12 @@ $wb["reseller_can_use_options_txt"] = "Reseller can use the option-tab for websi $wb["custom_login_text_txt"] = "Custom Text on Login-Page"; $wb["custom_login_link_txt"] = "Custom Link on Login-Page"; $wb["login_link_error_regex"] = "Invalid Link for Custom Login"; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/es_directive_snippets.lng b/interface/web/admin/lib/lang/es_directive_snippets.lng index 8e2a9270791b70c7a2a9d287496dc1645dd3420e..f254c08aa09092bcc423740eb83cc26ff5b03232 100755 --- a/interface/web/admin/lib/lang/es_directive_snippets.lng +++ b/interface/web/admin/lib/lang/es_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['name_txt'] = 'Nombre del fragmento'; $wb['snippet_txt'] = 'Fragmento'; $wb['type_txt'] = 'Tipo'; $wb['variables_txt'] = 'Variables'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/es_system_config.lng b/interface/web/admin/lib/lang/es_system_config.lng index cc81939cb389078cf90fa8c14caea505c378829e..0b86864c294822817f138d14b227f288aeb58d9d 100755 --- a/interface/web/admin/lib/lang/es_system_config.lng +++ b/interface/web/admin/lib/lang/es_system_config.lng @@ -35,6 +35,7 @@ $wb['ftpuser_prefix_txt'] = 'Prefijo del usuario de FTP'; $wb['login_link_error_regex'] = 'Enlace incorrecto para el inicio de sesión personalizado'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Mostrar la pestaña del auto-respondedor en los detalles de la cuenta de correo'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Mostrar la pestaña filtro de correo personalizado en los detalles de la cuenta de correo'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Mostrar la pestaña filtro de correo en los detalles de la cuenta de correo'; $wb['mailboxlist_webmail_link_txt'] = 'Vinculo a correo web en la lista de buzones de correo'; $wb['mailmailinglist_link_txt'] = 'Vínculo a la lista de correos en la lista de la Lista de correos'; @@ -81,4 +82,12 @@ $wb['webftp_url_txt'] = 'Enlace al cliente FTP por web'; $wb['webmail_url_error_regex'] = 'Dirección del correo web inválida'; $wb['webmail_url_note_txt'] = 'Marcador de posición:'; $wb['webmail_url_txt'] = 'URL de correo web'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/fi_directive_snippets.lng b/interface/web/admin/lib/lang/fi_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/fi_directive_snippets.lng +++ b/interface/web/admin/lib/lang/fi_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/fi_system_config.lng b/interface/web/admin/lib/lang/fi_system_config.lng index c4987d01a3addf5ca64cea624c56e8eaa7c37cfd..0da09111965fcfb81093cce5a5073ffb77260965 100644 --- a/interface/web/admin/lib/lang/fi_system_config.lng +++ b/interface/web/admin/lib/lang/fi_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/fr_directive_snippets.lng b/interface/web/admin/lib/lang/fr_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/fr_directive_snippets.lng +++ b/interface/web/admin/lib/lang/fr_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng index 5892e3a269c698417280ce398730926011cfcda4..cbffe8fc4b304eb208349562329333225baa98e0 100644 --- a/interface/web/admin/lib/lang/fr_system_config.lng +++ b/interface/web/admin/lib/lang/fr_system_config.lng @@ -49,6 +49,7 @@ $wb['client_username_web_check_disabled_txt'] = 'Disable client username check f $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Custom Text on Login-Page'; $wb['custom_login_link_txt'] = 'Custom Link on Login-Page'; $wb['login_link_error_regex'] = 'Invalid Link for Custom Login'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/hr_directive_snippets.lng b/interface/web/admin/lib/lang/hr_directive_snippets.lng index 077896577db3f9b8aec8aad5f33966bd1780ea6c..11cc8bf1892e9094cfa8ec589b85d7b49709be9a 100644 --- a/interface/web/admin/lib/lang/hr_directive_snippets.lng +++ b/interface/web/admin/lib/lang/hr_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Molimo vas specificirajte naziv direktiv $wb['directive_snippets_name_error_unique'] = 'Već postoji direktiva sa tim imenom.'; $wb['variables_txt'] = 'Varijable'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/hr_system_config.lng b/interface/web/admin/lib/lang/hr_system_config.lng index e02ae57a20a6cc5baa655e7c45cc7c38459ab1b9..346722123b2a162568e731f16be2451c32dc4b91 100644 --- a/interface/web/admin/lib/lang/hr_system_config.lng +++ b/interface/web/admin/lib/lang/hr_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/hu_directive_snippets.lng b/interface/web/admin/lib/lang/hu_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/hu_directive_snippets.lng +++ b/interface/web/admin/lib/lang/hu_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/hu_system_config.lng b/interface/web/admin/lib/lang/hu_system_config.lng index d26fc5be2dc52df07d71ff65dba9b981c8d8d1ef..202c86cd8ca9cadb227f2197455271e93dfcc876 100644 --- a/interface/web/admin/lib/lang/hu_system_config.lng +++ b/interface/web/admin/lib/lang/hu_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/id_directive_snippets.lng b/interface/web/admin/lib/lang/id_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/id_directive_snippets.lng +++ b/interface/web/admin/lib/lang/id_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/id_system_config.lng b/interface/web/admin/lib/lang/id_system_config.lng index c865dff3d81619315d566ef3ee58501485606412..c0c504145a708bba148897b7cfbce776aebc62f1 100644 --- a/interface/web/admin/lib/lang/id_system_config.lng +++ b/interface/web/admin/lib/lang/id_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/it_directive_snippets.lng b/interface/web/admin/lib/lang/it_directive_snippets.lng index 5598aacecc152ca4c07d07a7e9ad5cd0e6af4c28..49d91b2bbcfc7c0d4903de6891235af27ea6f241 100644 --- a/interface/web/admin/lib/lang/it_directive_snippets.lng +++ b/interface/web/admin/lib/lang/it_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Indicare un nome per lo snippet.'; $wb['directive_snippets_name_error_unique'] = 'Esiste già una direttiva snippet con questo nome.'; $wb['variables_txt'] = 'Variabili'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 80a5d05208a632f27b281879695bdca95e412cdd..1d0f5a865061ec6661af2b3f1b543cf5ab4b9e43 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -83,7 +83,7 @@ $wb['ufw_default_forward_policy_txt'] = 'Default Forward Policy'; $wb['ufw_default_application_policy_txt'] = 'Default Application Policy'; $wb['ufw_log_level_txt'] = 'Livello di Log'; $wb['website_symlinks_rel_txt'] = 'Make relative symlinks'; -$wb['network_config_warning_txt'] = 'L opzione di configurazione di rete è disponibile solo per Debian and Ubuntu Servers. Non abilitare se la tua interfaccia di rete non è eth0.'; +$wb['network_config_warning_txt'] = 'L\'opzione di configurazione di rete è disponibile solo per Debian, Devuan e Ubuntu Server. Non abilitare se la tua interfaccia di rete non è eth0.'; $wb['CA_path_txt'] = 'Percorso CA'; $wb['CA_pass_txt'] = 'CA passphrase'; $wb['fastcgi_config_syntax_txt'] = 'Sintassi configurazione FastCGI'; @@ -281,6 +281,7 @@ $wb['xmpp_port_bosh_txt'] = 'BOSH'; $wb['disable_bind_log_txt'] = 'Disable bind9 messages for Loglevel WARN'; $wb['apps_vhost_enabled_txt'] = 'Apps-vhost enabled'; $wb['backup_time_txt'] = 'Backup time'; +$wb["mailinglist_manager_txt"] = 'Gestore delle Liste' $wb['skip_le_check_txt'] = 'Skip Lets Encrypt Check'; $wb['migration_mode_txt'] = 'Server Migration Mode'; ?> diff --git a/interface/web/admin/lib/lang/it_system_config.lng b/interface/web/admin/lib/lang/it_system_config.lng index 396503f02e34087ddf62f4e40f568cb4a7639191..56e95c06be8e48174fa95c1d4efa3dfe2f0a9199 100644 --- a/interface/web/admin/lib/lang/it_system_config.lng +++ b/interface/web/admin/lib/lang/it_system_config.lng @@ -49,6 +49,7 @@ $wb['client_username_web_check_disabled_txt'] = 'Disable client username check f $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Custom Text on Login-Page'; $wb['custom_login_link_txt'] = 'Custom Link on Login-Page'; $wb['login_link_error_regex'] = 'Invalid Link for Custom Login'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/ja_directive_snippets.lng b/interface/web/admin/lib/lang/ja_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/ja_directive_snippets.lng +++ b/interface/web/admin/lib/lang/ja_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/ja_system_config.lng b/interface/web/admin/lib/lang/ja_system_config.lng index fc32081d962b0c6be9e19465b4514a67d1354c9b..4ede217807c21ee2e57ed8e911e1215d9f720a6a 100644 --- a/interface/web/admin/lib/lang/ja_system_config.lng +++ b/interface/web/admin/lib/lang/ja_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/nl_directive_snippets.lng b/interface/web/admin/lib/lang/nl_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/nl_directive_snippets.lng +++ b/interface/web/admin/lib/lang/nl_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/nl_system_config.lng b/interface/web/admin/lib/lang/nl_system_config.lng index 5177888bb06b645358090a945a5d1835804ec48f..ce2e1d84c09134dcc63a15f4167f5d704d48eff3 100644 --- a/interface/web/admin/lib/lang/nl_system_config.lng +++ b/interface/web/admin/lib/lang/nl_system_config.lng @@ -19,6 +19,7 @@ $wb['mailboxlist_webmail_link_txt'] = 'Link naar webmail in Mailbox lijst'; $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_txt'] = 'Webmail URL'; $wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL'; $wb['use_domain_module_txt'] = 'Gebruik de domein-module om nieuwe domeinen toe te voegen'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/pl_directive_snippets.lng b/interface/web/admin/lib/lang/pl_directive_snippets.lng index 4902bf3282ce2e1148d5e5a40c9c73c998c3ccdc..ba57dfb4c1cb0760ce4d6c0df3997be262073a9f 100644 --- a/interface/web/admin/lib/lang/pl_directive_snippets.lng +++ b/interface/web/admin/lib/lang/pl_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Wybierz nazwę dla zestawu dyrektyw'; $wb['directive_snippets_name_error_unique'] = 'Istnieje już zestaw dyrektyw o podanej nazwie'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/pl_system_config.lng b/interface/web/admin/lib/lang/pl_system_config.lng index cea6345e63746e2eef461e50a332438bec11df64..f9bcdb6832befc2c81cd1c044be3fd71273470ab 100644 --- a/interface/web/admin/lib/lang/pl_system_config.lng +++ b/interface/web/admin/lib/lang/pl_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Pokaż zakładkę autorespondera w szczegółach konta email.'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Pokaż zakładkę filtra email w szczegółach konta email.'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Pokaż zakładkę własnych filtrów email w szczegółach konta email.'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/pt_directive_snippets.lng b/interface/web/admin/lib/lang/pt_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/pt_directive_snippets.lng +++ b/interface/web/admin/lib/lang/pt_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/pt_system_config.lng b/interface/web/admin/lib/lang/pt_system_config.lng index 24ff94fca278da5e3366db422e69bc1a701e7950..bdf99eb06d908f582fa49342d917daa5db56e466 100644 --- a/interface/web/admin/lib/lang/pt_system_config.lng +++ b/interface/web/admin/lib/lang/pt_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/ro_directive_snippets.lng b/interface/web/admin/lib/lang/ro_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/ro_directive_snippets.lng +++ b/interface/web/admin/lib/lang/ro_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/ro_system_config.lng b/interface/web/admin/lib/lang/ro_system_config.lng index b258ee18707b95d94d77a287fdc7e59effd758c5..01563482f2bb03759f5fa8cb380da70f193fdef8 100644 --- a/interface/web/admin/lib/lang/ro_system_config.lng +++ b/interface/web/admin/lib/lang/ro_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/ru_system_config.lng b/interface/web/admin/lib/lang/ru_system_config.lng index 861f647a736e1fc3c0b817d4240f568ef93f7a33..4a604ddcdc195917cf145138481d36378e1a72b8 100644 --- a/interface/web/admin/lib/lang/ru_system_config.lng +++ b/interface/web/admin/lib/lang/ru_system_config.lng @@ -82,4 +82,12 @@ $wb['default_webserver_txt'] = 'Web-сервер по умолчанию'; $wb['default_dnsserver_txt'] = 'DNS-сервер по умолчанию'; $wb['default_slave_dnsserver_txt'] = 'Вторичный DNS-сервер по умолчанию'; $wb['default_dbserver_txt'] = 'Сервер базы данных по умолчанию'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/se_directive_snippets.lng b/interface/web/admin/lib/lang/se_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/se_directive_snippets.lng +++ b/interface/web/admin/lib/lang/se_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng index 285f7807e8c3f16867a4d3b2f0bfc15af7f29906..342a088f7763a9e5deedcb21a26d19377d14d923 100644 --- a/interface/web/admin/lib/lang/se_system_config.lng +++ b/interface/web/admin/lib/lang/se_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Visa autosvarsfliken vid detaljerna för epostkonto'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Visa epostfilterfliken vid detaljerna för epostkonto'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/sk_directive_snippets.lng b/interface/web/admin/lib/lang/sk_directive_snippets.lng index 0616afad8b6c76c9eb284f57a673f6c35d286310..5371b632a9e607f0c5d3faa39e516762fdfc939a 100644 --- a/interface/web/admin/lib/lang/sk_directive_snippets.lng +++ b/interface/web/admin/lib/lang/sk_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Please specify a name for the snippet.'; $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.'; $wb['variables_txt'] = 'Variables'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/sk_system_config.lng b/interface/web/admin/lib/lang/sk_system_config.lng index be8789a80347ff34217022e783823f8f36a89719..5da76cea6b0e5c15164d38c4dd2b4c60227f970a 100644 --- a/interface/web/admin/lib/lang/sk_system_config.lng +++ b/interface/web/admin/lib/lang/sk_system_config.lng @@ -52,6 +52,7 @@ $wb['backups_include_into_web_quota_txt'] = 'Include backup files into web quota $wb['mailbox_show_autoresponder_tab_txt'] = 'Show autoresponder tab in mail account details'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Show mail filter tab in mail account details'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Show custom mailfilter tab in mail account details'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Invalid webmail URL'; $wb['phpmyadmin_url_note_txt'] = 'Placeholder:'; $wb['webmail_url_note_txt'] = 'Placeholder:'; @@ -81,4 +82,12 @@ $wb['default_webserver_txt'] = 'Default Webserver'; $wb['default_dnsserver_txt'] = 'Default DNS Server'; $wb['default_slave_dnsserver_txt'] = 'Default Secondary DNS Server'; $wb['default_dbserver_txt'] = 'Default Database Server'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/lib/lang/tr_directive_snippets.lng b/interface/web/admin/lib/lang/tr_directive_snippets.lng index f5034865282259e495dba557390156b9eaa27eb0..de8893ddf460e85d03285b37887fa9e5bf047416 100644 --- a/interface/web/admin/lib/lang/tr_directive_snippets.lng +++ b/interface/web/admin/lib/lang/tr_directive_snippets.lng @@ -8,5 +8,5 @@ $wb['directive_snippets_name_empty'] = 'Parçacık adı boş olamaz.'; $wb['directive_snippets_name_error_unique'] = 'Aynı adlı bir yönerge parçacığı zaten var.'; $wb['variables_txt'] = 'Değişkenler'; $wb['customer_viewable_txt'] = 'Customer viewable'; -$wb['required_php_snippets_txt'] = 'Requiered PHP Snippet'; +$wb['required_php_snippets_txt'] = 'Required PHP Snippet'; ?> diff --git a/interface/web/admin/lib/lang/tr_system_config.lng b/interface/web/admin/lib/lang/tr_system_config.lng index 8f5bef0e4d4d2dde47393325292255a4685ed3cd..6d7737a0898c47e2d79b4a0fada1a5fef8d1efab 100644 --- a/interface/web/admin/lib/lang/tr_system_config.lng +++ b/interface/web/admin/lib/lang/tr_system_config.lng @@ -49,6 +49,7 @@ $wb['client_username_web_check_disabled_txt'] = 'Müşteri kullanıcı adında \ $wb['mailbox_show_autoresponder_tab_txt'] = 'Posta hesabı ayrıntılarında otoyanıtlayıcı sekmesi görüntülensin'; $wb['mailbox_show_mail_filter_tab_txt'] = 'Posta hesabı ayrıntılarında posta süzgeci sekmesi görüntülensin'; $wb['mailbox_show_custom_rules_tab_txt'] = 'Posta hesabı ayrıntılarında isteğe bağlı posta süzgeci sekmesi görüntülensin'; +$wb['mailbox_show_backup_tab_txt'] = 'Show backup tab in mail account details'; $wb['webmail_url_error_regex'] = 'Webmail adresi geçersiz'; $wb['phpmyadmin_url_note_txt'] = 'Kod:'; $wb['webmail_url_note_txt'] = 'Kod:'; @@ -81,4 +82,12 @@ $wb['reseller_can_use_options_txt'] = 'Reseller can use the option-tab for websi $wb['custom_login_text_txt'] = 'Custom Text on Login-Page'; $wb['custom_login_link_txt'] = 'Custom Link on Login-Page'; $wb['login_link_error_regex'] = 'Invalid Link for Custom Login'; +$wb['ca_name_txt'] = 'Name'; +$wb['ca_issue_txt'] = 'Issue'; +$wb['ca_wildcard_txt'] = 'Use Wildcard'; +$wb['ca_critical_txt'] = 'Strict Check'; //For future use. At this time, CA<80><99>s do not recognize any other flag values as described in RFC 6844 +$wb['ca_iodef_txt'] = 'iodef'; +$wb['active_txt'] = 'Aktive'; +$wb['btn_save_txt'] = 'Save'; +$wb['btn_cancel_txt'] = 'Cancel'; ?> diff --git a/interface/web/admin/templates/language_edit.htm b/interface/web/admin/templates/language_edit.htm index d3830494dac7577aed6126206e39dbbc81be6079..1a1625b4bb745853efdb58e48e75a2ff96abb027 100644 --- a/interface/web/admin/templates/language_edit.htm +++ b/interface/web/admin/templates/language_edit.htm @@ -8,7 +8,7 @@ - +
diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index 926be8e62c97f43738f4c167de3e9182e6a7a998..499a47f5985f0f51beca75fb74cb69959869050f 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -117,6 +117,12 @@ {tmpl_var name='overquota_notify_onok'} +
+ +
+
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm index 7868e87568d91797de16192f7d2deb16cce45885..90be365f174f662e39cd3e3182c2e003a00400fe 100644 --- a/interface/web/admin/templates/server_config_server_edit.htm +++ b/interface/web/admin/templates/server_config_server_edit.htm @@ -96,6 +96,16 @@
+ +
 {tmpl_var name='nagios_url_note_txt'} [SERVERNAME]
+
+
+ +
+
+ +
+
{tmpl_var name='monitor_system_updates'} diff --git a/interface/web/admin/templates/system_config_dns_ca.htm b/interface/web/admin/templates/system_config_dns_ca.htm new file mode 100644 index 0000000000000000000000000000000000000000..7f430a85e393b8b06b5ba120a9c2828211b85447 --- /dev/null +++ b/interface/web/admin/templates/system_config_dns_ca.htm @@ -0,0 +1,15 @@ +

+

+ +{tmpl_var name='dns_ca'} +{tmpl_var name='dns_ca_list'} + diff --git a/interface/web/admin/templates/system_config_dns_ca_edit.htm b/interface/web/admin/templates/system_config_dns_ca_edit.htm new file mode 100644 index 0000000000000000000000000000000000000000..739c3f93fea5c3dac21b9e902d6f9d02d7aa0de2 --- /dev/null +++ b/interface/web/admin/templates/system_config_dns_ca_edit.htm @@ -0,0 +1,41 @@ + + +
{tmpl_var name='error'}
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
checked />
+
+ +
+ +
checked />
+
+ +
+ +
checked />
+
+ +
+
+ + +
+ diff --git a/interface/web/admin/templates/system_config_dns_ca_list.htm b/interface/web/admin/templates/system_config_dns_ca_list.htm new file mode 100644 index 0000000000000000000000000000000000000000..7af2b78d13c74bcc038bfda70c01deef34ecfce8 --- /dev/null +++ b/interface/web/admin/templates/system_config_dns_ca_list.htm @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name="active"}{tmpl_var name="name"} + + +
+
diff --git a/interface/web/admin/templates/system_config_mail_edit.htm b/interface/web/admin/templates/system_config_mail_edit.htm index 526da2502a84d7c5756744f7f7f0c7a8b32fd1ab..e29c5f44282d004e28ff5989c5b471025789d588 100644 --- a/interface/web/admin/templates/system_config_mail_edit.htm +++ b/interface/web/admin/templates/system_config_mail_edit.htm @@ -29,6 +29,12 @@ {tmpl_var name='mailbox_show_custom_rules_tab'}
+
+ +
+ {tmpl_var name='mailbox_show_backup_tab'} +
+
diff --git a/interface/web/admin/templates/system_config_sites_edit.htm b/interface/web/admin/templates/system_config_sites_edit.htm index 1c4c5c6f9a19b924f283c3cf767b25f6ff40ddd8..500d69e8180f7d118f5824cdf4d256f07a0e9d32 100644 --- a/interface/web/admin/templates/system_config_sites_edit.htm +++ b/interface/web/admin/templates/system_config_sites_edit.htm @@ -45,6 +45,12 @@ {tmpl_var name='vhost_aliasdomains'} {tmpl_var name='vhost_aliasdomains_note_txt'}
+
+ +
+ {tmpl_var name='asp_new_package_disabled'} +
+
diff --git a/interface/web/client/lib/lang/pl.lng b/interface/web/client/lib/lang/pl.lng index ca1563e8b840e13b5f44b072f33e60ee477de5ee..da5250f9b133d71b9ac877c63ee74381a51fb6c1 100644 --- a/interface/web/client/lib/lang/pl.lng +++ b/interface/web/client/lib/lang/pl.lng @@ -5,8 +5,8 @@ $wb['Limits'] = 'Limity'; $wb['Add Client'] = 'Dodaj klienta'; $wb['Edit Client'] = 'Edytuj klienta'; $wb['Clients'] = 'Klienci'; -$wb['Templates'] = 'Templates'; -$wb['Limit-Templates'] = 'Limit-Templates'; +$wb['Templates'] = 'Szablony'; +$wb['Limit-Templates'] = 'Szablony limitów'; $wb['Add Reseller'] = 'Dodaj Resellera'; $wb['Edit Reseller'] = 'Edytuj Resellera'; $wb['Resellers'] = 'Resellerzy'; @@ -23,7 +23,7 @@ $wb['error_domain_in mailuse'] = 'Ta domena nie może zostać usunięta poniewa $wb['error_domain_in webuse'] = 'Ta domena nie może zostać usunięta ponieważ jest używana jako domena dla strony www.'; $wb['error_client_can_not_add_domain'] = 'Nie możesz dodać nowej domeny'; $wb['error_client_group_id_empty'] = 'Musisz wybrać klienta
'; -$wb['error_domain_in dnsuse'] = 'This domain cannot be deleted, because it is in use as dns zone'; -$wb['error_domain_in dnsslaveuse'] = 'This domain cannot be deleted, because it is in use as secondary dns zone'; -$wb['Email-Templates'] = 'Email-Templates'; +$wb['error_domain_in dnsuse'] = 'Nie można usunąć tej domeny, ponieważ jest ona używana jako strefa dns'; +$wb['error_domain_in dnsslaveuse'] = 'Ta domena nie może zostać usunięta, ponieważ jest ona używana jako druga strefa dns'; +$wb['Email-Templates'] = 'Szablony email'; ?> diff --git a/interface/web/dashboard/dashlets/limits.php b/interface/web/dashboard/dashlets/limits.php index d58c3eb8e0dcd8c7c5e5cd362e3a28e35e816fd0..62cd2db358c7bf923bc065bcef137320fdbe7dde 100644 --- a/interface/web/dashboard/dashlets/limits.php +++ b/interface/web/dashboard/dashlets/limits.php @@ -8,6 +8,11 @@ class dashlet_limits { $limits = array(); /* Limits to be shown*/ + + $limits[] = array('field' => 'limit_mailquota', + 'db_table' => 'mail_user', + 'db_where' => 'quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'quota'); $limits[] = array('field' => 'limit_maildomain', 'db_table' => 'mail_domain', @@ -61,6 +66,11 @@ class dashlet_limits { 'db_table' => 'spamfilter_policy', 'db_where' => ""); + $limits[] = array('field' => 'limit_web_quota', + 'db_table' => 'web_domain', + 'db_where' => 'hd_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'hd_quota'); + $limits[] = array('field' => 'limit_web_domain', 'db_table' => 'web_domain', 'db_where' => "type = 'vhost'"); @@ -93,6 +103,11 @@ class dashlet_limits { 'db_table' => 'dns_rr', 'db_where' => ""); + $limits[] = array('field' => 'limit_database_quota', + 'db_table' => 'web_database', + 'db_where' => 'database_quota > 0', /* Count only posive value of quota, negative value -1 is unlimited */ + 'q_type' => 'database_quota'); + $limits[] = array('field' => 'limit_database', 'db_table' => 'web_database', 'db_where' => ""); @@ -143,7 +158,11 @@ class dashlet_limits { } if($value != 0 || $value == $wb['unlimited_txt']) { $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value; - $usage = $this->_get_limit_usage($limit); + if($limit['q_type']!=''){ + $usage = $this->_get_assigned_quota($limit) . " MB"; + $value_formatted = ($value == '-1')?$wb['unlimited_txt']:$value . " MB"; + } + else $usage = $this->_get_limit_usage($limit); $percentage = ($value == '-1' || $value == 0 ? 0 : round(100 * $usage / $value)); $rows[] = array('field' => $field, 'field_txt' => $wb[$field.'_txt'], @@ -172,6 +191,19 @@ class dashlet_limits { return $rec['number']; } + + function _get_assigned_quota($limit) { + global $app; + + $sql = "SELECT sum(??) as number FROM ?? WHERE "; + if($limit['db_where'] != '') $sql .= $limit['db_where']." AND "; + $sql .= $app->tform->getAuthSQL('r'); + $rec = $app->db->queryOneRecord($sql, $limit['q_type'], $limit['db_table']); + if($limit['db_table']=='mail_user') $quotaMB = $rec['number'] / 1048576; // Mail quota is in bytes, must be converted to MB + else $quotaMB = $rec['number']; + return $quotaMB; + + } } diff --git a/interface/web/dashboard/lib/lang/ar.lng b/interface/web/dashboard/lib/lang/ar.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/ar.lng +++ b/interface/web/dashboard/lib/lang/ar.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/bg.lng b/interface/web/dashboard/lib/lang/bg.lng index 16a6b88be1d78155b1dec3a8724e15c9170ad1d6..0e83d308354074fd809966ef9d84a698a1abd0ca 100644 --- a/interface/web/dashboard/lib/lang/bg.lng +++ b/interface/web/dashboard/lib/lang/bg.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/br.lng b/interface/web/dashboard/lib/lang/br.lng index 05935493bb7e36cc8cb058bd6ed6aad10d7a119c..465b11f5b0aec296bdc88c7d4d9f492d92998372 100644 --- a/interface/web/dashboard/lib/lang/br.lng +++ b/interface/web/dashboard/lib/lang/br.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/ca.lng b/interface/web/dashboard/lib/lang/ca.lng index a33b5e4efcbb1314437cdcfa3b67cdb486cb10b1..cb11661b0bb8beec8032947feef9bda2aa7852d2 100644 --- a/interface/web/dashboard/lib/lang/ca.lng +++ b/interface/web/dashboard/lib/lang/ca.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/cz.lng b/interface/web/dashboard/lib/lang/cz.lng index 9d2a3211cb0d4cabaade52c01f42a146df72eafb..16ed927c3417154479f3d85a20d192b6a85a6a07 100644 --- a/interface/web/dashboard/lib/lang/cz.lng +++ b/interface/web/dashboard/lib/lang/cz.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/de.lng b/interface/web/dashboard/lib/lang/de.lng index 45d6b1e174559c6e205427946dce505cdaa9cdd1..ac6e8ff5a27373e586a15ce8d9e176aa400261a0 100644 --- a/interface/web/dashboard/lib/lang/de.lng +++ b/interface/web/dashboard/lib/lang/de.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/dk.lng b/interface/web/dashboard/lib/lang/dk.lng index 3701c791ccc660a63bc6fc0647c98e10c23702f6..fe4c09dfc9d479f8eaa1ba1c97511f4e05a05ae4 100644 --- a/interface/web/dashboard/lib/lang/dk.lng +++ b/interface/web/dashboard/lib/lang/dk.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/el.lng b/interface/web/dashboard/lib/lang/el.lng index 134b9b52c58866912344df2b52fa32a3e99962b2..76f5991a8719179cfee60e65e63d15c640a9a419 100644 --- a/interface/web/dashboard/lib/lang/el.lng +++ b/interface/web/dashboard/lib/lang/el.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/en.lng b/interface/web/dashboard/lib/lang/en.lng index 177fad0416a8a85f1be052efcd0973a08e572968..793a310e370087ccc18b72db2f835643838ef5e8 100644 --- a/interface/web/dashboard/lib/lang/en.lng +++ b/interface/web/dashboard/lib/lang/en.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng index 3f0ce2f43cbe940045df7a75f89b64b59b66f78a..5d504c8e9b6e91dd62aa181fcd354781b5470567 100644 --- a/interface/web/dashboard/lib/lang/en_dashlet_limits.lng +++ b/interface/web/dashboard/lib/lang/en_dashlet_limits.lng @@ -28,4 +28,7 @@ $wb["limit_webdav_user_txt"] = 'Number of Webdav users'; $wb["limit_client_txt"] = 'Number of Clients'; $wb["limit_database_txt"] = 'Number of Databases'; $wb['limit_domain_txt'] = 'Number of Domains'; +$wb['limit_mailquota_txt'] = 'Assigned mailbox quota'; +$wb['limit_web_quota_txt'] = 'Assigned web quota'; +$wb['limit_database_quota_txt'] = 'Assigned database quota'; ?> diff --git a/interface/web/dashboard/lib/lang/es.lng b/interface/web/dashboard/lib/lang/es.lng index 4338e475a7f0b85ea32f53f7bcd252f71a9575fe..18cbe02a8452839e9f699a3bc69d455944ec322a 100755 --- a/interface/web/dashboard/lib/lang/es.lng +++ b/interface/web/dashboard/lib/lang/es.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/fi.lng b/interface/web/dashboard/lib/lang/fi.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/fi.lng +++ b/interface/web/dashboard/lib/lang/fi.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/fr.lng b/interface/web/dashboard/lib/lang/fr.lng index a33b5e4efcbb1314437cdcfa3b67cdb486cb10b1..cb11661b0bb8beec8032947feef9bda2aa7852d2 100644 --- a/interface/web/dashboard/lib/lang/fr.lng +++ b/interface/web/dashboard/lib/lang/fr.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/hr.lng b/interface/web/dashboard/lib/lang/hr.lng index 769b77ae54356d66d5922d5eafa5c5222fa14d3c..200f7698b74826665a9c548ffcdf10973f34ed53 100644 --- a/interface/web/dashboard/lib/lang/hr.lng +++ b/interface/web/dashboard/lib/lang/hr.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/hu.lng b/interface/web/dashboard/lib/lang/hu.lng index 18ffd803c1ec7d8e58a829ab05df19c422eb7057..cfbe0287648bd97f9a28aea814d077b773799cab 100644 --- a/interface/web/dashboard/lib/lang/hu.lng +++ b/interface/web/dashboard/lib/lang/hu.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/id.lng b/interface/web/dashboard/lib/lang/id.lng index 4d07360183bddbf288af718e06a115a699c26186..4b6dfd741d3eeaeb1649fb9228d93bfa697307cf 100644 --- a/interface/web/dashboard/lib/lang/id.lng +++ b/interface/web/dashboard/lib/lang/id.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/it.lng b/interface/web/dashboard/lib/lang/it.lng index db8858aafd91a6b2f02237957262fc08a60d5d61..f187dbbbbf20c260e9a41554728844f836e22ee5 100644 --- a/interface/web/dashboard/lib/lang/it.lng +++ b/interface/web/dashboard/lib/lang/it.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/ja.lng b/interface/web/dashboard/lib/lang/ja.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/ja.lng +++ b/interface/web/dashboard/lib/lang/ja.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/nl.lng b/interface/web/dashboard/lib/lang/nl.lng index aa92b9ce57cf5ce114e5c45bbf1ea2bafa788915..fde9bd05b884833c9787538d520f28bbcfd5f101 100644 --- a/interface/web/dashboard/lib/lang/nl.lng +++ b/interface/web/dashboard/lib/lang/nl.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/pl.lng b/interface/web/dashboard/lib/lang/pl.lng index 5ef320a86ece666580ef419b0ac34c084e5c81f4..31becb98476682a65eede1c0b2c9760cb7bdb143 100644 --- a/interface/web/dashboard/lib/lang/pl.lng +++ b/interface/web/dashboard/lib/lang/pl.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/pt.lng b/interface/web/dashboard/lib/lang/pt.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/pt.lng +++ b/interface/web/dashboard/lib/lang/pt.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/ro.lng b/interface/web/dashboard/lib/lang/ro.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/ro.lng +++ b/interface/web/dashboard/lib/lang/ro.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/ru.lng b/interface/web/dashboard/lib/lang/ru.lng index 2681fcfa451f070910b91d304f73e337f4ecc10d..67df1a241d8778e0d2b82299110867bdab60e2ad 100644 --- a/interface/web/dashboard/lib/lang/ru.lng +++ b/interface/web/dashboard/lib/lang/ru.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/se.lng b/interface/web/dashboard/lib/lang/se.lng index 307e9e1ca1fcc35f95504642c7b2e9a4593e6c52..0451661b3a536f037d54e738157c5a3e066041b8 100644 --- a/interface/web/dashboard/lib/lang/se.lng +++ b/interface/web/dashboard/lib/lang/se.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/sk.lng b/interface/web/dashboard/lib/lang/sk.lng index 246054599fc1e41cbac86df2f063020ae5299c81..ad0858d861f436b45859734c8c143cf4722fd1fe 100644 --- a/interface/web/dashboard/lib/lang/sk.lng +++ b/interface/web/dashboard/lib/lang/sk.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/lib/lang/tr.lng b/interface/web/dashboard/lib/lang/tr.lng index fea8a3ae5a25ff604b4d34fa051dbab66d08a754..599e2052fb6c80a7101c023e3391aee3583d4e65 100644 --- a/interface/web/dashboard/lib/lang/tr.lng +++ b/interface/web/dashboard/lib/lang/tr.lng @@ -1,4 +1,5 @@ diff --git a/interface/web/dashboard/templates/dashboard.htm b/interface/web/dashboard/templates/dashboard.htm index 7c8b46e2a2b51f3e291479dc15220685a1f23467..bd9553c8ba0755bf869f42f3e9ca110782ec9763 100644 --- a/interface/web/dashboard/templates/dashboard.htm +++ b/interface/web/dashboard/templates/dashboard.htm @@ -1,5 +1,8 @@ diff --git a/interface/web/dns/ajax_get_json.php b/interface/web/dns/ajax_get_json.php index c2da4dce631172dab52b487509e639da8a6988d2..b2c381f3e46820997cab0317adbeb7475e69b3c6 100644 --- a/interface/web/dns/ajax_get_json.php +++ b/interface/web/dns/ajax_get_json.php @@ -35,6 +35,7 @@ require_once '../../lib/app.inc.php'; $app->auth->check_module_permissions('dns'); $type = $_GET["type"]; +$ca_id = $_GET['ca_id']; if($type == 'get_ipv4'){ $result = array(); @@ -54,6 +55,17 @@ if($type == 'get_ipv6'){ $json = $app->functions->json_encode($result); } +if($type == 'ca_wildcard'){ + $json = '{'; + $json .= '"ca_wildcard":"'; + $tmp = $app->db->queryOneRecord("SELECT ca_wildcard, ca_issue, ca_critical FROM dns_ssl_ca WHERE id = ?", $ca_id); + $json .= $tmp['ca_wildcard'].'"'; + $json .= ',"ca_issue":"'.$tmp['ca_issue'].'"'; + $json .= ',"ca_critical":"'.$tmp['ca_critical'].'"'; + unset($tmp); + $json .= '}'; +} + header('Content-type: application/json'); echo $json; ?> diff --git a/interface/web/dns/dns_caa_edit.php b/interface/web/dns/dns_caa_edit.php new file mode 100644 index 0000000000000000000000000000000000000000..c3d8618414a1148672c78dddb63eec23c3ee7f4c --- /dev/null +++ b/interface/web/dns/dns_caa_edit.php @@ -0,0 +1,222 @@ +auth->check_module_permissions('dns'); + +// Loading classes +$app->uses('tpl,tform,tform_actions,validate_dns'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + + function onShowNew() { + global $app; + // we will check only users, not admins + if($_SESSION['s']['user']['typ'] == 'user') { + // Get the limits of the client + $client_group_id = intval($_SESSION['s']['user']['default_group']); + $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + + // Check if the user may add another record. + if($client['limit_dns_record'] >= 0) { + $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id); + if($tmp['number'] >= $client['limit_dns_record']) { + $app->error($app->tform->wordbook['limit_dns_record_txt']); + } + } + } + + parent::onShowNew(); + } + + function onShowEnd() { + global $app; + + $zone = @(!isset($this->dataRecord['zone']))?$app->functions->intval($_GET['zone']):$this->dataRecord['zone']; + + // get domain-name + $sql = "SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'); + $soa = $app->db->queryOneRecord($sql, $zone); + $domain_name = rtrim($soa['origin'], '.'); + $app->tpl->setVar('name', $domain_name); + if($this->id > 0) { + $temp = $this->dataRecord['name']; + $temp = str_replace($soa['origin'], '', $this->dataRecord['name']); + $temp = trim($temp,'.'); + if(trim($temp != '')) $app->tpl->setVar('additional', $temp); + unset($temp); + } + + //create ca-list + $rec = $app->db->QueryAllRecords("SELECT * FROM dns_ssl_ca WHERE active = 'Y' AND ca_issue != '' ORDER by ca_name ASC"); + $ca_select = ""; + if(count($rec) > 0) { + foreach($rec as $ca) { + if(strpos($this->dataRecord['data'], $ca['ca_issue']) !== FALSE) $selected = ' selected'; else $selected=''; + $ca_select .= "\r\n"; + } + } + $app->tpl->setVar('ca_list', $ca_select); + $app->tpl->setVar('type', 'CAA'); + if($this->id > 0) { + if(stristr($this->dataRecord['data'], 'issuewild') !== FALSE) $app->tpl->setVar('allow_wildcard', 'CHECKED'); else $app->tpl->setVar('allow_wildcard', 'UNCHECKED'); + if(strpos($this->dataRecord['data'], '128') === 0) $app->tpl->setVar('allow_critical', 'CHECKED'); else $app->tpl->setVar('allow_critical', 'UNCHECKED'); + $app->tpl->setVar('edit_disabled', 1); + } else { + $app->tpl->setVar('ttl', $soa['ttl']); + } + + parent::onShowEnd(); + } + + function onSubmit() { + global $app; + + // Check the client limits, if user is not the admin + if($_SESSION['s']['user']['typ'] != 'admin') { // if user is not admin + // Get the limits of the client + $client_group_id = intval($_SESSION['s']['user']['default_group']); + $client = $app->db->queryOneRecord("SELECT limit_dns_record FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); + + // Check if the user may add another record. + if($this->id == 0 && $client['limit_dns_record'] >= 0) { + $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE sys_groupid = ?", $client_group_id); + if($tmp['number'] >= $client['limit_dns_record']) { + $app->error($app->tform->wordbook['limit_dns_record_txt']); + } + } + } // end if user is not admin + + // Check CA + if($this->dataRecord['ca_issue'] == '') $this->error('ca_error_txt'); + + // Get the parent soa record of the domain + $soa = $app->db->queryOneRecord("SELECT * FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $_POST['zone']); + $this->dataRecord['name'] = $soa['origin']; + + // Check if Domain belongs to user + if($soa['id'] != $_POST['zone']) $this->error('no_zone_perm'); + + // Set the server ID of the rr record to the same server ID as the parent record. + $this->dataRecord['server_id'] = $soa['server_id']; + + // Set issue + $critical = 0; //* To use critical > 0, uncommented "
" in the template + if(isset($this->dataRecord['allow_critical']) && $this->dataRecord['allow_critical'] == 'on' && isset($this->dataRecord['ca_critical']) && $this->dataRecord['ca_critical'] == 1) $critical = 128; + if(isset($this->dataRecord['allow_wildcard']) && $this->dataRecord['allow_wildcard'] == "on") { + $this->dataRecord['data'] = $critical.' issuewild "'.$this->dataRecord['ca_issue']; + } else { + $this->dataRecord['data'] = $critical.' issue "'.$this->dataRecord['ca_issue']; + } + unset($critical); + if(isset($this->dataRecord['options']) && $this->dataRecord['options'] != '') { + $options=explode(',', $this->dataRecord['options']); + foreach($options as $option) { + if(trim($option) != '') { + if(preg_match('/^(\w+|d\+)=(\w+|d\+)/', $option)) { + $this->dataRecord['data'] = $this->dataRecord['data'] . '; '.$option; + } else { + $this->error('ca_option_error'); + } + } + } + } + $this->dataRecord['data'] = $this->dataRecord['data'].'"'; + + // Set name + if($this->dataRecord['additional'] != '') { + $temp = explode(',', $this->dataRecord['additional'])[0]; // if we have more hostnames the interface-plugin will be used + $temp = trim($temp,'.'); + if(trim($temp != '')) $this->dataRecord['name'] = $temp.'.'.$this->dataRecord['name']; + unset($temp); + } + + // Check for duplicate + $temp = $app->db->queryOneRecord("SELECT * FROM dns_rr WHERE type = 'CAA' AND name = ? AND data = ? AND active = ?", $this->dataRecord['name'], $this->dataRecord['data'], $POST['active']); + if(is_array($temp)) $this->error('caa_exists_error'); + unset($temp); + + // Update the serial number and timestamp of the RR record + $dns_rr = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id); + $this->dataRecord['serial'] = $app->validate_dns->increase_serial($dns_rr['serial']); + $this->dataRecord['stamp'] = date('Y-m-d H:i:s'); + + parent::onSubmit(); + } + + function onAfterInsert() { + global $app; + + //* Set the sys_groupid of the rr record to be the same then the sys_groupid of the soa record + $soa = $app->db->queryOneRecord("SELECT sys_groupid,serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord['zone']); + $app->db->datalogUpdate('dns_rr', array('sys_groupid' => $soa['sys_groupid']), 'id', $this->id); + + //* Update the serial number of the SOA record + $soa_id = $app->functions->intval($_POST["zone"]); + $serial = $app->validate_dns->increase_serial($soa['serial']); + $app->db->datalogUpdate('dns_soa', array('serial' => $serial), 'id', $soa_id); + + } + + function onAfterUpdate() { + global $app; + + //* Update the serial number of the SOA record + $soa = $app->db->queryOneRecord("SELECT serial FROM dns_soa WHERE id = ? AND " . $app->tform->getAuthSQL('r'), $this->dataRecord['zone']); + $soa_id = $app->functions->intval($_POST['zone']); + $serial = $app->validate_dns->increase_serial($soa['serial']); + $app->db->datalogUpdate('dns_soa', array('serial' => $serial), 'id', $soa_id); + } + + private function error($errmsg) { + global $app; + if (isset($app->tform->errorMessage)) $app->tform->errorMessage = '
' . $app->tform->errorMessage; + $app->tform->errorMessage .= $app->tform->wordbook[$errmsg]; + } + +} + +$page = new page_action; +$page->onLoad(); + +?> diff --git a/interface/web/dns/form/dns_a.tform.php b/interface/web/dns/form/dns_a.tform.php index d9ed197c515aa71593670828511f56a7d7f1eef5..49f26d2fd7934cf8db829948a3894c74e79c7154 100644 --- a/interface/web/dns/form/dns_a.tform.php +++ b/interface/web/dns/form/dns_a.tform.php @@ -86,7 +86,7 @@ $form["tabs"]['dns'] = array ( 'type' => 'TOLOWER') ), 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\*]{0,64}$/', + 'regex' => '/^([a-zA-Z0-9\.\-\*]{0,64}|@)$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_aaaa.tform.php b/interface/web/dns/form/dns_aaaa.tform.php index 018657b838edf181add028e4025bbaec98c7308f..7e61c5bae982e2687f8357ba26adda2167467afe 100644 --- a/interface/web/dns/form/dns_aaaa.tform.php +++ b/interface/web/dns/form/dns_aaaa.tform.php @@ -79,7 +79,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\*]{0,64}$/', + 'regex' => '/^([a-zA-Z0-9\.\-\*]{0,64}|@)$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_caa.tform.php b/interface/web/dns/form/dns_caa.tform.php new file mode 100644 index 0000000000000000000000000000000000000000..aa297f29d77bd3a8018d25027fdefae628fedeb7 --- /dev/null +++ b/interface/web/dns/form/dns_caa.tform.php @@ -0,0 +1,117 @@ + 'DNS CAA', + 'width' => 100, + 'template' => 'templates/dns_caa_edit.htm', + 'fields' => array ( + 'server_id' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'SELECT', + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'zone' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => @$app->functions->intval($_REQUEST['zone']), + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'name' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'filters' => array( 0 => array( 'event' => 'SAVE', + 'type' => 'IDNTOASCII'), + 1 => array( 'event' => 'SHOW', + 'type' => 'IDNTOUTF8'), + 2 => array( 'event' => 'SAVE', + 'type' => 'TOLOWER') + ), + 'validators' => array ( 0 => array ( 'type' => 'REGEX', + 'regex' => '/^[a-zA-Z0-9\.\-\_]{0,255}$/', + 'errmsg'=> 'name_error_regex'), + ), + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'type' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => 'CAA', + 'value' => '', + 'width' => '5', + 'maxlength' => '5' + ), + 'data' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'ttl' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'RANGE', + 'range' => '60:', + 'errmsg'=> 'ttl_range_error'), + ), + 'default' => '3600', + 'value' => '', + 'width' => '10', + 'maxlength' => '10' + ), + 'active' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'Y', + 'value' => array(0 => 'N', 1 => 'Y') + ), + 'stamp' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255' + ), + 'serial' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '10', + 'maxlength' => '10' + ), + ) +); + + + +?> diff --git a/interface/web/dns/form/dns_mx.tform.php b/interface/web/dns/form/dns_mx.tform.php index 9aace37ae7858a9b2197e320c70a00182578e45a..94436400d53204ea21ed7676d7988c523b1673ce 100644 --- a/interface/web/dns/form/dns_mx.tform.php +++ b/interface/web/dns/form/dns_mx.tform.php @@ -87,7 +87,7 @@ $form["tabs"]['dns'] = array ( 'type' => 'TOLOWER') ), 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[a-zA-Z0-9\.\-\*]{0,255}$/', + 'regex' => '/^([a-zA-Z0-9\.\-\*]{0,255}|@)$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/lib/lang/ar_dns_caa.lng b/interface/web/dns/lib/lang/ar_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/ar_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/bg.lng b/interface/web/dns/lib/lang/bg.lng index 6208f82996b4cc87f2d8ec39865c03c5523a7244..643b9d937cb8d4d6a100d14211cad05a5923e8dd 100644 --- a/interface/web/dns/lib/lang/bg.lng +++ b/interface/web/dns/lib/lang/bg.lng @@ -4,10 +4,10 @@ $wb['Zones'] = 'Зони'; $wb['DNS A'] = 'DNS A'; $wb['DNS ALIAS'] = 'DNS ALIAS'; $wb['DNS CNAME'] = 'DNS CNAME'; -$wb['DNS hinfo'] = 'DNS hinfo'; -$wb['DNS mx'] = 'DNS mx'; -$wb['DNS ns'] = 'DNS ns'; -$wb['DNS ptr'] = 'DNS ptr'; +$wb['DNS hinfo'] = 'DNS HINFO'; +$wb['DNS mx'] = 'DNS MX'; +$wb['DNS ns'] = 'DNS NS'; +$wb['DNS ptr'] = 'DNS PTR'; $wb['DNS RP'] = 'DNS RP'; $wb['DNS Zone'] = 'DNS Зона'; $wb['Records'] = 'Записи'; @@ -16,7 +16,7 @@ $wb['DNS TXT Record'] = 'DNS TXT Запис'; $wb['DNS TXT'] = 'DNS TXT'; $wb['DNS Wizard'] = 'DNS Помощник'; $wb['Add DNS Zone'] = 'Добави DNS зона'; -$wb['Templates'] = 'Шаблон'; +$wb['Templates'] = 'Темплейт'; $wb['Secondary Zones'] = 'Вторична зона'; -$wb['Import Zone File'] = 'Въведи зона чрез файл'; +$wb['Import Zone File'] = 'Импортирай зонов файл'; ?> diff --git a/interface/web/dns/lib/lang/bg_dns_a.lng b/interface/web/dns/lib/lang/bg_dns_a.lng index e397d9774efceae21c7cb2219e0a66efedc704c8..ca0b8e471786455bcc613a4c8d138d9a592151cd 100644 --- a/interface/web/dns/lib/lang/bg_dns_a.lng +++ b/interface/web/dns/lib/lang/bg_dns_a.lng @@ -2,16 +2,16 @@ $wb['server_id_txt'] = 'Сървър'; $wb['zone_txt'] = 'Зона'; $wb['name_txt'] = 'Име на хоста'; -$wb['type_txt'] = 'тип'; -$wb['data_txt'] = 'IP-адрес'; +$wb['type_txt'] = 'Tип'; +$wb['data_txt'] = 'IP адрес'; $wb['ttl_txt'] = 'TTL'; $wb['active_txt'] = 'Активен'; $wb['limit_dns_record_txt'] = 'Максималният брой за DNS записи в твоят профил е достигнат.'; $wb['no_zone_perm'] = 'Нямате права да добавяте записи за DNS в тази зона.'; $wb['name_error_empty'] = 'Полето за хост име е празно.'; $wb['name_error_regex'] = 'Избраното име на хост е в грешен формат.'; -$wb['data_error_empty'] = 'Полето за IP-адреса е празно'; -$wb['ip_error_wrong'] = 'Формата на IP-адреса е грешен'; -$wb['data_error_duplicate'] = 'Дублиран A-Запис'; -$wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.'; +$wb['data_error_empty'] = 'Полето за IP адреса е празно'; +$wb['ip_error_wrong'] = 'Формата на IP адреса е грешен'; +$wb['data_error_duplicate'] = 'Дублиран A Запис'; +$wb['ttl_range_error'] = 'Минималния TTL е 60 секунди.'; ?> diff --git a/interface/web/dns/lib/lang/bg_dns_caa.lng b/interface/web/dns/lib/lang/bg_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/bg_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/br_dns_caa.lng b/interface/web/dns/lib/lang/br_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/br_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/ca_dns_caa.lng b/interface/web/dns/lib/lang/ca_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/ca_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/cz_dns_caa.lng b/interface/web/dns/lib/lang/cz_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/cz_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/de_dns_caa.lng b/interface/web/dns/lib/lang/de_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..88dbf6e47aa2b8490718b46defad6b761169fa1e --- /dev/null +++ b/interface/web/dns/lib/lang/de_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/dk_dns_caa.lng b/interface/web/dns/lib/lang/dk_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/dk_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/el_dns_caa.lng b/interface/web/dns/lib/lang/el_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..1fa7dcb7d579d3913038504ed9dff698bb747402 --- /dev/null +++ b/interface/web/dns/lib/lang/el_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/en_dns_caa.lng b/interface/web/dns/lib/lang/en_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/en_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/es_dns_caa.lng b/interface/web/dns/lib/lang/es_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/es_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/fi_dns_caa.lng b/interface/web/dns/lib/lang/fi_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/fi_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/fr_dns_caa.lng b/interface/web/dns/lib/lang/fr_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/fr_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/hr_dns_caa.lng b/interface/web/dns/lib/lang/hr_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/hr_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/hu_dns_caa.lng b/interface/web/dns/lib/lang/hu_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/hu_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/id_dns_caa.lng b/interface/web/dns/lib/lang/id_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/id_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/it_dns_caa.lng b/interface/web/dns/lib/lang/it_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/it_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/ja_dns_caa.lng b/interface/web/dns/lib/lang/ja_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/ja_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/nl_dns_caa.lng b/interface/web/dns/lib/lang/nl_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/nl_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/pl_dns_caa.lng b/interface/web/dns/lib/lang/pl_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/pl_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/pt_dns_caa.lng b/interface/web/dns/lib/lang/pt_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/pt_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/ro_dns_caa.lng b/interface/web/dns/lib/lang/ro_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/ro_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/ru_dns_caa.lng b/interface/web/dns/lib/lang/ru_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/ru_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/se_dns_caa.lng b/interface/web/dns/lib/lang/se_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/se_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/sk_dns_caa.lng b/interface/web/dns/lib/lang/sk_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/sk_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/lib/lang/tr_dns_caa.lng b/interface/web/dns/lib/lang/tr_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..bf5b2ac8e1a8a4c34a001ffc843e1338bf54d3ce --- /dev/null +++ b/interface/web/dns/lib/lang/tr_dns_caa.lng @@ -0,0 +1,19 @@ + diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php index 748bc405d82072d25aa4183b2259368c04f58ed2..1c6999511d1280b8c015b422bed9435a6cf5485b 100644 --- a/interface/web/dns/list/dns_a.list.php +++ b/interface/web/dns/list/dns_a.list.php @@ -132,7 +132,7 @@ $liste["item"][] = array( 'field' => "type", 'prefix' => "", 'suffix' => "", 'width' => "", - 'value' => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT')); + 'value' => array('A'=>'A', 'AAAA' => 'AAAA', 'ALIAS'=>'ALIAS', 'CAA'=>'CAA', 'CNAME'=>'CNAME', 'DS'=>'DS', 'HINFO'=>'HINFO', 'LOC'=>'LOC', 'MX'=>'MX', 'NS'=>'NS', 'PTR'=>'PTR', 'RP'=>'RP', 'SRV'=>'SRV', 'TLSA'=>'TLSA', 'TXT'=>'TXT')); ?> diff --git a/interface/web/dns/templates/dns_a_edit.htm b/interface/web/dns/templates/dns_a_edit.htm index 92dfbcd3ae1328546c9dc0ddf4759eaf60906002..a0b678ed78483b94b0627c96c44e553652271c8b 100644 --- a/interface/web/dns/templates/dns_a_edit.htm +++ b/interface/web/dns/templates/dns_a_edit.htm @@ -29,7 +29,7 @@
- +
+ + diff --git a/interface/web/dns/templates/dns_cname_edit.htm b/interface/web/dns/templates/dns_cname_edit.htm index 778279cbd80687f507086c6870107b8388a3f603..0172016b4f658fa3141e768df3ac21ea9e02e239 100644 --- a/interface/web/dns/templates/dns_cname_edit.htm +++ b/interface/web/dns/templates/dns_cname_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_dkim_edit.htm b/interface/web/dns/templates/dns_dkim_edit.htm index 310dda1c9e9cc056c2a95b6cf80b34934a730ede..39d8bb4c2f981d224d31410eef43b00881c46797 100644 --- a/interface/web/dns/templates/dns_dkim_edit.htm +++ b/interface/web/dns/templates/dns_dkim_edit.htm @@ -34,5 +34,5 @@
- +
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm index 1418a897bf87a17fef75e362f6ce0085487a16fe..88ec0dcb64d71f64f164c68b51a14351b25514ef 100644 --- a/interface/web/dns/templates/dns_dmarc_edit.htm +++ b/interface/web/dns/templates/dns_dmarc_edit.htm @@ -159,6 +159,6 @@
- +
diff --git a/interface/web/dns/templates/dns_ds_edit.htm b/interface/web/dns/templates/dns_ds_edit.htm index 56113f0ec0e95df7075d815bfc96a3c63c6c60fc..bc57484bac29739e1805a7425290680dae13b87d 100644 --- a/interface/web/dns/templates/dns_ds_edit.htm +++ b/interface/web/dns/templates/dns_ds_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_hinfo_edit.htm b/interface/web/dns/templates/dns_hinfo_edit.htm index 0be975f529bee5aa8c25147866b789bd27007fec..8964f7a525cc99949a9164408316026c368437eb 100644 --- a/interface/web/dns/templates/dns_hinfo_edit.htm +++ b/interface/web/dns/templates/dns_hinfo_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_loc_edit.htm b/interface/web/dns/templates/dns_loc_edit.htm index 12cfb6357fd42285214e4423c5e9196b6c5dc7df..a1ba7c95cd39d132655d14f35a8ac547e5dc7ba6 100644 --- a/interface/web/dns/templates/dns_loc_edit.htm +++ b/interface/web/dns/templates/dns_loc_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_mx_edit.htm b/interface/web/dns/templates/dns_mx_edit.htm index 290c218faf96b3cbb772c2b257c4c1c2aef67f69..576ffc9dc61151ef67d264c4795e0a46f38b7b24 100644 --- a/interface/web/dns/templates/dns_mx_edit.htm +++ b/interface/web/dns/templates/dns_mx_edit.htm @@ -31,5 +31,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_ns_edit.htm b/interface/web/dns/templates/dns_ns_edit.htm index 3cafa17dafaa8bf64046db2bf86f10874ab02f8e..9460ff3937ba885d29eb62cce075d1ecec319bc2 100644 --- a/interface/web/dns/templates/dns_ns_edit.htm +++ b/interface/web/dns/templates/dns_ns_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_ptr_edit.htm b/interface/web/dns/templates/dns_ptr_edit.htm index de59069259df650f1359a102d3b52af31b1ff27a..10f26fd365269d34a0a5ab6cb39de9b4eb16d25a 100644 --- a/interface/web/dns/templates/dns_ptr_edit.htm +++ b/interface/web/dns/templates/dns_ptr_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_rp_edit.htm b/interface/web/dns/templates/dns_rp_edit.htm index 3dd04adf1a3344d7d9864c02f57e0bb4bb7465fd..68912309612c134a708d9ecc70a360b9a8ca914a 100644 --- a/interface/web/dns/templates/dns_rp_edit.htm +++ b/interface/web/dns/templates/dns_rp_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_spf_edit.htm b/interface/web/dns/templates/dns_spf_edit.htm index 3c34b37a41b03d0f74b5f335d2a3986c25f2ed43..9939a86d38e8e62f9183056ab6ca9e5cb21fedec 100644 --- a/interface/web/dns/templates/dns_spf_edit.htm +++ b/interface/web/dns/templates/dns_spf_edit.htm @@ -57,6 +57,6 @@
- +
diff --git a/interface/web/dns/templates/dns_srv_edit.htm b/interface/web/dns/templates/dns_srv_edit.htm index fd9f00d7b48058871fc68373d7ff8d2be8ac7320..1d1d07b5a2ef3dd7be864fa5fe467e5fb7e8b33a 100644 --- a/interface/web/dns/templates/dns_srv_edit.htm +++ b/interface/web/dns/templates/dns_srv_edit.htm @@ -37,5 +37,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_tlsa_edit.htm b/interface/web/dns/templates/dns_tlsa_edit.htm index c2cde8be6197c060588bf337749b315e6ed151c9..15a9fa227493d265afb07b3516e5ad97cb395942 100644 --- a/interface/web/dns/templates/dns_tlsa_edit.htm +++ b/interface/web/dns/templates/dns_tlsa_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/dns/templates/dns_txt_edit.htm b/interface/web/dns/templates/dns_txt_edit.htm index f03f6d36c86209aec2aff3e2c368ba83e13b7f41..a35909dfa48a54b1ba742664a270b0e14f566be4 100644 --- a/interface/web/dns/templates/dns_txt_edit.htm +++ b/interface/web/dns/templates/dns_txt_edit.htm @@ -28,5 +28,5 @@
- +
\ No newline at end of file diff --git a/interface/web/help/faq_list.php b/interface/web/help/faq_list.php index 128480dca2c2573d3dcb630a4a4d0730d00ce640..4ea86722cfe07a78b4b8016d9775edc3ac38e952 100644 --- a/interface/web/help/faq_list.php +++ b/interface/web/help/faq_list.php @@ -3,6 +3,10 @@ require_once '../../lib/config.inc.php'; require_once '../../lib/app.inc.php'; +// Markdown support +require_once '../../lib/classes/parsedown/parsedown.php'; +require_once '../../lib/classes/parsedown/parsedown_extra.php'; + // Path to the list definition file $list_def_file = 'list/faq_list.php'; @@ -15,6 +19,18 @@ if(!stristr($_SESSION['s']['user']['modules'], 'help')) { // Loading the class $app->uses('listform_actions'); +class list_actions extends listform_actions { + /** + * @author Frantisek Preissler + */ + function prepareDataRow($rec) { + $rec['hf_answer'] = ParsedownExtra::instance()->parse($rec['hf_answer']); + return parent::prepareDataRow($rec); + } +} + +$override = new list_actions; + // Optional limit $hf_section = 0; if(isset($_GET['hfs_id'])) @@ -26,12 +42,12 @@ if(!$hf_section) $res = $app->db->queryOneRecord("SELECT MIN(hfs_id) AS min_id FROM help_faq_sections"); $hf_section = $res['min_id']; } -$app->listform_actions->SQLExtWhere = "help_faq.hf_section = $hf_section"; +$override->SQLExtWhere = "help_faq.hf_section = $hf_section"; if($hf_section) $res = $app->db->queryOneRecord("SELECT hfs_name FROM help_faq_sections WHERE hfs_id=?", $hf_section); // Start the form rendering and action ahndling echo "

FAQ: ".$res['hfs_name']."

"; -if($hf_section) $app->listform_actions->onLoad(); +if($hf_section) $override->onLoad(); ?> diff --git a/interface/web/help/lib/lang/bg.lng b/interface/web/help/lib/lang/bg.lng index fa57a5d4d99183c0aae002562e89a20402b60040..7d65941b7990f016dda966200b313d10e81ce66b 100644 --- a/interface/web/help/lib/lang/bg.lng +++ b/interface/web/help/lib/lang/bg.lng @@ -6,9 +6,9 @@ $wb['View messages'] = 'Преглед на съобщенията'; $wb['Support'] = 'Поддръжка'; $wb['About ISPConfig'] = 'За ISPConfig'; $wb['Version'] = 'Версия'; -$wb['Frequently Asked Questions'] = 'Често задавани въпроси'; -$wb['FAQ Sections'] = 'ЧЗВ секция'; -$wb['Manage Sections'] = 'Редактирай секциите'; -$wb['Add a Question & Answer Pair'] = 'Добави въпрос & Отговор '; -$wb['Manage Questions'] = 'Редактирай въпроса'; +$wb['Frequently Asked Questions'] = 'Често Задавани Въпроси'; +$wb['FAQ Sections'] = 'ЧЗВ секции'; +$wb['Manage Sections'] = 'Управление секциите'; +$wb['Add a Question & Answer Pair'] = 'Добави Въпрос и Отговор'; +$wb['Manage Questions'] = 'Управление на въпросите'; ?> diff --git a/interface/web/help/lib/lang/it.lng b/interface/web/help/lib/lang/it.lng index d02e52ee374dcb67fabc8b850dab2972aa880ba6..fc4f0431750c03cfec012750abc1cf177612afc9 100644 --- a/interface/web/help/lib/lang/it.lng +++ b/interface/web/help/lib/lang/it.lng @@ -4,11 +4,11 @@ $wb['Message'] = 'Messaggi'; $wb['Send message'] = 'Spedisci messaggio'; $wb['View messages'] = 'Visualizza messaggi'; $wb['Support'] = 'Supporto'; -$wb['About ISPConfig'] = 'About ISPConfig'; +$wb['About ISPConfig'] = 'Info su ISPConfig'; $wb['Version'] = 'Versione'; -$wb['Frequently Asked Questions'] = 'Frequently Asked Questions'; +$wb['Frequently Asked Questions'] = 'Domande frequenti'; $wb['FAQ Sections'] = 'FAQ Sezioni'; $wb['Manage Sections'] = 'Gestisci Sezioni'; $wb['Add a Question & Answer Pair'] = 'Aggiungi una domanda e rispondi'; -$wb['Manage Questions'] = 'Manage Questions'; +$wb['Manage Questions'] = 'Gestisci domande'; ?> diff --git a/interface/web/help/lib/lang/it_faq_form.lng b/interface/web/help/lib/lang/it_faq_form.lng index 7716d19dfa17b215a8d83955eb05fc57dfd2c941..c271fa40803622362ad58019a77ecd110c39090b 100644 --- a/interface/web/help/lib/lang/it_faq_form.lng +++ b/interface/web/help/lib/lang/it_faq_form.lng @@ -1,5 +1,5 @@ diff --git a/interface/web/help/lib/lang/it_support_message.lng b/interface/web/help/lib/lang/it_support_message.lng index e4e18aa3ee3707b71c3ab2501847f99448b4dcbe..89e0b91687c35515d5d81855bcf92899faf50af4 100644 --- a/interface/web/help/lib/lang/it_support_message.lng +++ b/interface/web/help/lib/lang/it_support_message.lng @@ -12,5 +12,5 @@ $wb['answer_to_support_request_txt'] = 'Hai una risposta alla richiesta di suppo $wb['answer_to_support_request_sent_txt'] = 'La tua richiesta di supporto è stata trasmessa. Non rispondere a questa email.'; $wb['support_request_sent_txt'] = 'La tua richiesta di supporto è stata trasmessa. Non rispondere a questa email.'; $wb['recipient_or_sender_email_address_not_valid_txt'] = 'Impossibile trasmettere il messaggio. Destinatario non valido.'; -$wb['subject_is_empty'] = 'The subject can not be empty.'; +$wb['subject_is_empty'] = 'L'oggetto non può essere vuoto.'; ?> diff --git a/interface/web/login/index.php b/interface/web/login/index.php index bccf4330af9e6dedc0c9328976cddd9ccb5cf361..303e2e88c5a96fc25975d417ecdd2c99d51cd5fc 100644 --- a/interface/web/login/index.php +++ b/interface/web/login/index.php @@ -267,12 +267,20 @@ if(count($_POST) > 0) { fwrite($authlog_handle, $authlog ."\n"); fclose($authlog_handle); + // get last IP used to login + $user_data = $app->db->queryOneRecord("SELECT last_login_ip,last_login_at FROM sys_user WHERE username = ?", $username); + + $_SESSION['s']['last_login_ip'] = $user_data['last_login_ip']; + $_SESSION['s']['last_login_at'] = $user_data['last_login_at']; + if(!$loginAs) { + $app->db->query("UPDATE sys_user SET last_login_ip = ?, last_login_at = ? WHERE username = ?", $_SERVER['REMOTE_ADDR'], time(), $username); + } /* * We need LOGIN_REDIRECT instead of HEADER_REDIRECT to load the * new theme, if the logged-in user has another */ - if ($loginAs){ + if($loginAs) { echo 'LOGIN_REDIRECT:'.$_SESSION['s']['module']['startpage']; exit; } else { @@ -284,8 +292,7 @@ if(count($_POST) > 0) { $error = $app->lng('error_user_blocked'); } } else { - if(!$alreadyfailed['times'] ) - { + if(!$alreadyfailed['times']) { //* user login the first time wrong $sql = "INSERT INTO `attempts_login` (`ip`, `times`, `login_time`) VALUES (?, 1, NOW())"; $app->db->query($sql, $ip); diff --git a/interface/web/login/lib/lang/ar_login_as.lng b/interface/web/login/lib/lang/ar_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/ar_login_as.lng +++ b/interface/web/login/lib/lang/ar_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/bg_login_as.lng b/interface/web/login/lib/lang/bg_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/bg_login_as.lng +++ b/interface/web/login/lib/lang/bg_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng index e2a6f529dcc3403f807f80ee3016be04ff523196..8fc0d1c1c3ce0ebe0e51cb64aeb0adf6f09ff16b 100644 --- a/interface/web/login/lib/lang/br_login_as.lng +++ b/interface/web/login/lib/lang/br_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Já existe um registro de firewall igual para es $wb['tcp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta TCP. Caracteres permitidos são: números, \':\' e \',\'.'; $wb['udp_ports_error_regex'] = 'Caractere não permitido para atribuição numa porta UDP. Caracteres permitidos são: números, \':\' e \',\'.'; $wb['login_as_or_logout_txt'] = 'Você deseja acessar novamente como {UTYPE} ou sair?'; +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; ?> diff --git a/interface/web/login/lib/lang/ca_login_as.lng b/interface/web/login/lib/lang/ca_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/ca_login_as.lng +++ b/interface/web/login/lib/lang/ca_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/cz_login_as.lng b/interface/web/login/lib/lang/cz_login_as.lng index 53629ac2a5127b46fd872adcec215632b5479dc2..9c0e7368f7314edeb828ae0022a07b39078af9a3 100644 --- a/interface/web/login/lib/lang/cz_login_as.lng +++ b/interface/web/login/lib/lang/cz_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Pro tento server již existuje záznam firewallu $wb['tcp_ports_error_regex'] = 'Znak není povole v definici TCP portu. Povolené symboly jsou čísla, : a ,.'; $wb['udp_ports_error_regex'] = 'Znak není povole v definici UDP portu. Povolené symboly jsou čísla, : a ,.'; $wb['login_as_or_logout_txt'] = 'Chcete se znovu přihlásit jako uživatel {UTYPE} nebo se chcete odhlásit ?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/de_login_as.lng b/interface/web/login/lib/lang/de_login_as.lng index 4baa195d3a71735586dba972a96b968d0cbf70da..131ff5fa3cd4eeb98d0954cca3f73bad502a28e0 100644 --- a/interface/web/login/lib/lang/de_login_as.lng +++ b/interface/web/login/lib/lang/de_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Es gibt bereits einen Firewalleintrag für diese $wb['tcp_ports_error_regex'] = 'Es sind nur Zahlen in der TCP Port Definition erlaubt. '; $wb['udp_ports_error_regex'] = 'Es sind nur Zahlen in der UDP Port Definition erlaubt., '; $wb['login_as_or_logout_txt'] = 'Wollen Sie sich wieder als {UTYPE} anmelden oder sich abmelden?'; -?> +$wb['btn_reloginas_txt'] = 'Ja, erneut als %s anmelden'; +$wb['btn_nologout_txt'] = 'Nein, abmelden'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/dk_login_as.lng b/interface/web/login/lib/lang/dk_login_as.lng index bebcf165a7bf2a78b5ba13d7eb1d47d41c214e4c..83dcf39c63698953cce51142524e98e4ef60d86b 100644 --- a/interface/web/login/lib/lang/dk_login_as.lng +++ b/interface/web/login/lib/lang/dk_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Der er allerede en firewall post for denne serve $wb['tcp_ports_error_regex'] = 'Tegn ikke tilladt i TCP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".'; $wb['udp_ports_error_regex'] = 'Tegn ikke tilladt i UDP port definition. Tilladt tegn er tal, \\":\\" og \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/el_login_as.lng b/interface/web/login/lib/lang/el_login_as.lng index 435d3e9a69eeb7f79abbc9c30d98ecaf32913529..060b91aa8417fd1cf58cc3f5bea0ce09d6d8e385 100644 --- a/interface/web/login/lib/lang/el_login_as.lng +++ b/interface/web/login/lib/lang/el_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Υπάρχει ήδη μια εγγραφή Fire $wb['tcp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας tcp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".'; $wb['udp_ports_error_regex'] = 'Μη έγκυρος χαρακτήρας για τον ορισμός θύρας udp. Επιτρεπόμενοι χαρακτήρες είναι οι αριθμοί, η \\":\\" και οι \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/en_login_as.lng b/interface/web/login/lib/lang/en_login_as.lng index d1f98c8806204e162954107caf753aa174153295..c849db3d04b724f0ae8a65de2dff4b6ca43e38f3 100644 --- a/interface/web/login/lib/lang/en_login_as.lng +++ b/interface/web/login/lib/lang/en_login_as.lng @@ -10,4 +10,6 @@ $wb["active_txt"] = 'Active'; $wb["tcp_ports_error_regex"] = 'Character not allowed in tcp port definition. Allowed characters are numbers, ":" and ",".'; $wb["udp_ports_error_regex"] = 'Character not allowed in udp port definition. Allowed characters are numbers, ":" and ",".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; ?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/es.lng b/interface/web/login/lib/lang/es.lng index c7576d509d8aec45c7799df0958125e4d349e10c..ccd34f244c1d89d0ff1e48c866d205f4a58e599b 100755 --- a/interface/web/login/lib/lang/es.lng +++ b/interface/web/login/lib/lang/es.lng @@ -25,10 +25,10 @@ $wb['stay_logged_in_txt'] = 'Permanecer conectado'; $wb['theme_not_compatible'] = 'El tema elegido no es compatible con la versión actual. Por favor busca una nueva versión del tema.
Se ha activado el tema por defecto automáticamente.'; $wb['user_regex_error'] = 'El nombre de usuario contiene caracteres no permitidos o tiene más de 64 caracteres.'; $wb['username_txt'] = 'Nombre de usuario'; -$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.'; -$wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset'; -$wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: '; -$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.'; -$wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.'; -$wb['lost_password_function_denied_txt'] = 'This activation link is not valid.'; +$wb['pw_reset_act'] = 'Se le ha eniado un enlace de activación. Por favor visite el enlace para confirmar la petición de cambio de contraseña.'; +$wb['pw_reset_act_mail_title'] = 'Confirmar restablecer la contraseña del panel de control ISPConfig 3'; +$wb['pw_reset_act_mail_msg'] = 'Por favor confirme que desea restablecer la contraseña de su panel de control ISPConfig 3 visitando el siguiente enlace de activación: '; +$wb['lost_password_function_wait_txt'] = 'No puede solicitar una nueva contraseña todavía. Por favor, espere unos minutos.'; +$wb['lost_password_function_expired_txt'] = 'Este enlace de activación ha caducado. Por favor, solicite uno nuevo.'; +$wb['lost_password_function_denied_txt'] = 'Este enlace de activación no es válido.'; ?> diff --git a/interface/web/login/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng index b7f3e21f987f2ca4016eeaf3834b4e5445983571..b235675a6f88c2b79f933bece533dc5fa35c27c2 100755 --- a/interface/web/login/lib/lang/es_login_as.lng +++ b/interface/web/login/lib/lang/es_login_as.lng @@ -8,5 +8,7 @@ $wb['login_2_txt'] = 'Si lo hace, puede \\"volver\\" haciendo clic en salir.'; $wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos tcp. Los caracteres permitidos son: números, \\":\\" y \\",\\".'; $wb['udp_port_help_txt'] = 'Separado por comas'; $wb['udp_ports_error_regex'] = 'Caracteres no permitidos en la definición de puertos udp. Los caracteres permitidos son: números, \\":\\" y \\",\\".'; -$wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['login_as_or_logout_txt'] = '¿Desea reiniciar sesión como {UTYPE} o terminar sesión?'; +$wb['btn_reloginas_txt'] = 'Sí, reiniciar como %s'; +$wb['btn_nologout_txt'] = 'No, terminar sesión'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/fi_login_as.lng b/interface/web/login/lib/lang/fi_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/fi_login_as.lng +++ b/interface/web/login/lib/lang/fi_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/fr_login_as.lng b/interface/web/login/lib/lang/fr_login_as.lng index 55c9f6df5b6a302d260b83c3e61b0f668d7f5154..612246a33cd488b4cd8ac5f659b5c7efb648cc00 100644 --- a/interface/web/login/lib/lang/fr_login_as.lng +++ b/interface/web/login/lib/lang/fr_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Caractère non autorisé dans la règle de port TCP. Les caractères autorisés sont : les chiffres, « : » et « , ».'; $wb['udp_ports_error_regex'] = 'Caractère non autorisé dans la règle de port UDP. Les caractères autorisés sont : les chiffres, « : » et « , ».'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/hr_login_as.lng b/interface/web/login/lib/lang/hr_login_as.lng index bcd13040d38363cad1bddf8ed3953ad13edbbeb8..e1fe01edc14811455c63d7f1e4ec0f9bcfb8e9a2 100644 --- a/interface/web/login/lib/lang/hr_login_as.lng +++ b/interface/web/login/lib/lang/hr_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/hu_login_as.lng b/interface/web/login/lib/lang/hu_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/hu_login_as.lng +++ b/interface/web/login/lib/lang/hu_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/id_login_as.lng b/interface/web/login/lib/lang/id_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/id_login_as.lng +++ b/interface/web/login/lib/lang/id_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/it.lng b/interface/web/login/lib/lang/it.lng index 017d60df78beb46a9a6ee5654caaee0a915d8e1f..d45c7b406bd3db2499259749fab246ed15ee0ed0 100644 --- a/interface/web/login/lib/lang/it.lng +++ b/interface/web/login/lib/lang/it.lng @@ -24,11 +24,11 @@ $wb['theme_not_compatible'] = 'Il tema selezionato non è compatibile con questa $wb['back_txt'] = 'Indietro'; $wb['email_error'] = 'Email contiene caratteri non autorizzati o un formato non valido.'; $wb['stay_logged_in_txt'] = 'Ricordami'; -$wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.'; -$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.'; -$wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset'; -$wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: '; -$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.'; -$wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.'; -$wb['lost_password_function_denied_txt'] = 'This activation link is not valid.'; +$wb['lost_password_function_disabled_txt'] = 'Funzione di password persa non disponibile per questo utente.'; +$wb['pw_reset_act'] = 'Link per reset password. Prego visitare il link per confermare la password.'; +$wb['pw_reset_act_mail_title'] = 'Conferma reset password ISPConfig 3'; +$wb['pw_reset_act_mail_msg'] = 'Per confermare il reset della password per ISPConfig 3 si prega di visitare questo link: '; +$wb['lost_password_function_wait_txt'] = 'Non puoi richiedere una nuova password in questo momento. Riprova tra qualche minuto.'; +$wb['lost_password_function_expired_txt'] = 'Link di attivazione scaduto. Si prega di richiedere un nuovo link di attivazione.'; +$wb['lost_password_function_denied_txt'] = 'Link di attivazione non valido.'; ?> diff --git a/interface/web/login/lib/lang/it_login_as.lng b/interface/web/login/lib/lang/it_login_as.lng index 3fa23da2741f0911bc933af3a615b675507813b3..70ac752eda0f553059a7359b349ce99e57f89b62 100644 --- a/interface/web/login/lib/lang/it_login_as.lng +++ b/interface/web/login/lib/lang/it_login_as.lng @@ -8,5 +8,7 @@ $wb['active_txt'] = 'Attivo'; $wb['firewall_error_unique'] = 'Esiste già un record firewall per questo server.'; $wb['tcp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta tcp. Sono consentiti caratteri numerici, \\":\\" e \\",\\".'; $wb['udp_ports_error_regex'] = 'Caratteri non autorizzati nella definizine di porta udp. ono consentiti caratteri numerici, \\":\\" e \\",\\".'; -$wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['login_as_or_logout_txt'] = 'Ri-loggarsi come {UTYPE} o uscire?'; +$wb['btn_reloginas_txt'] = 'Sì, ri-loggarsi come %s'; +$wb['btn_nologout_txt'] = 'No, esci'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/ja_login_as.lng b/interface/web/login/lib/lang/ja_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/ja_login_as.lng +++ b/interface/web/login/lib/lang/ja_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng index d4d2715e7a664a3aa0b7b0b2b89503dc3caf546c..1952618e0e5565bc2c0100bd8776f0a9be08f757 100644 --- a/interface/web/login/lib/lang/nl_login_as.lng +++ b/interface/web/login/lib/lang/nl_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/pl.lng b/interface/web/login/lib/lang/pl.lng index 702b50117f7000a48e7a1a9c08e9f7d5b7b4332d..ce9c489ce47f3919700964796882faf2013c3e50 100644 --- a/interface/web/login/lib/lang/pl.lng +++ b/interface/web/login/lib/lang/pl.lng @@ -14,21 +14,21 @@ $wb['error_user_too_many_logins'] = 'Zbyt dużo niepoprawnych logowań. Prosimy $wb['username_txt'] = 'Nazwa użytkownika'; $wb['password_txt'] = 'Hasło'; $wb['login_button_txt'] = 'Zaloguj'; -$wb['login_txt'] = 'Login'; +$wb['login_txt'] = 'Zaloguj'; $wb['pw_lost_txt'] = 'Zapomniałem hasła'; $wb['pw_reset_txt'] = 'Reset hasła'; $wb['pw_button_txt'] = 'Prześlij hasło ponownie'; $wb['email_txt'] = 'E-mail'; $wb['error_maintenance_mode'] = 'Ta instalacja ISPConfig jest aktualnie w trakcje modernizacji. Wracamy niebawem - proszę o cierpliwość.'; $wb['theme_not_compatible'] = 'Wybrany temat nie jest kompatybilny z aktualną wersją ISPConfig. Proszę wybrać nową wersję tematu.
Został aktywowany automatycznie domyślny temat.'; -$wb['back_txt'] = 'Back'; -$wb['email_error'] = 'Email contains unallowed characters or has a invalid format.'; -$wb['stay_logged_in_txt'] = 'Keep me logged in'; -$wb['lost_password_function_disabled_txt'] = 'The lost password function is not available for this user.'; -$wb['pw_reset_act'] = 'You have been sent an activation link. Please visit the link to confirm your password request.'; +$wb['back_txt'] = 'Wstecz'; +$wb['email_error'] = 'E-mail zawiera niedozwolone znaki lub ma nieprawidłowy format.'; +$wb['stay_logged_in_txt'] = 'Pozostaw mnie zalogowanym'; +$wb['lost_password_function_disabled_txt'] = 'Funkcja utraconego hasła nie jest dostępna dla tego użytkownika.'; +$wb['pw_reset_act'] = 'Został wysłany link aktywacyjny. Przejdź do linku, aby potwierdzić prośbę o podanie hasła.'; $wb['pw_reset_act_mail_title'] = 'Confirm ISPConfig 3 Control panel password reset'; $wb['pw_reset_act_mail_msg'] = 'Please confirm that your want to reset your ISPConfig 3 control panel account password by visiting the following activation link: '; -$wb['lost_password_function_wait_txt'] = 'You cannot request a new password, yet. Please wait a few minutes.'; -$wb['lost_password_function_expired_txt'] = 'This activation link has expired. Please request a new one.'; -$wb['lost_password_function_denied_txt'] = 'This activation link is not valid.'; +$wb['lost_password_function_wait_txt'] = 'Nie możesz jeszcze zażądać nowego hasła. Poczekaj kilka minut.'; +$wb['lost_password_function_expired_txt'] = 'Link aktywacyjny wygasł. Poproś o nowy.'; +$wb['lost_password_function_denied_txt'] = 'Ten link aktywacyjny jest nieprawidłowy.'; ?> diff --git a/interface/web/login/lib/lang/pl_login_as.lng b/interface/web/login/lib/lang/pl_login_as.lng index fd673484d7bfbbc44175d3939d12fb48c5a20593..55683a80b0738b675ffeff7336d93f21949fdc6c 100644 --- a/interface/web/login/lib/lang/pl_login_as.lng +++ b/interface/web/login/lib/lang/pl_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Istnieje już wpis firewalla dla tego serwera.'; $wb['tcp_ports_error_regex'] = 'Niedozwolony znam w definicji portu TCP. Dozwolone są liczby, dwukropek i przecinek (: i ,)'; $wb['udp_ports_error_regex'] = 'Niedozwolony znam w definicji portu UDP. Dozwolone są liczby, dwukropek i przecinek (: i ,)'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/pt_login_as.lng b/interface/web/login/lib/lang/pt_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/pt_login_as.lng +++ b/interface/web/login/lib/lang/pt_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/ro_login_as.lng b/interface/web/login/lib/lang/ro_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/ro_login_as.lng +++ b/interface/web/login/lib/lang/ro_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng index 653f4174a0d20ee439fc0427b93695e1b1d80a93..2fdafc39802f61bc8cb1b5ba569d58cc144db0dc 100644 --- a/interface/web/login/lib/lang/ru_login_as.lng +++ b/interface/web/login/lib/lang/ru_login_as.lng @@ -9,4 +9,4 @@ $wb['firewall_error_unique'] = 'Уже есть такая запись бред $wb['tcp_ports_error_regex'] = 'Недопустимый символ в указании tcp порта. Корректные сиволы - цифры, ":" и ","'; $wb['udp_ports_error_regex'] = 'Некорректный символ в указании UDP порта. Допустимые сиволы - цифры, ":" и ","'; $wb['login_as_or_logout_txt'] = 'Вы хотите заново войти как {UTYPE} или выйти?'; -?> +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng index 17a82080dc9defec177c24ad06092da45f1a7e07..3ce5b9be41c7281595e815c9f40b9e99cbd8d0c5 100644 --- a/interface/web/login/lib/lang/se_login_as.lng +++ b/interface/web/login/lib/lang/se_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/sk_login_as.lng b/interface/web/login/lib/lang/sk_login_as.lng index cf75b54b47a852400eec51271488e41ea64e69c4..cf9d01f16b887af957146ebcd060c3ff984f2d34 100644 --- a/interface/web/login/lib/lang/sk_login_as.lng +++ b/interface/web/login/lib/lang/sk_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'There is already a firewall record for this serv $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \\":\\" and \\",\\".'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng index f7f12feeff4124ca933211de12edd708dd0ec508..7dc28e71c77faba2f72c43a1ab255d4c78e5c3b5 100644 --- a/interface/web/login/lib/lang/tr_login_as.lng +++ b/interface/web/login/lib/lang/tr_login_as.lng @@ -9,4 +9,6 @@ $wb['firewall_error_unique'] = 'Bu sunucu için bir güvenlik duvarı kaydı zat $wb['tcp_ports_error_regex'] = 'TCP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.'; $wb['udp_ports_error_regex'] = 'UDP kapı açıklamasında karakter kullanılamaz. Yalnız rakam, \\":\\" ve \\",\\" karakterleri kullanılabilir.'; $wb['login_as_or_logout_txt'] = 'Do you want to re-login as {UTYPE} or logout?'; -?> +$wb['btn_reloginas_txt'] = 'Yes, re-login as %s'; +$wb['btn_nologout_txt'] = 'No, logout'; +?> \ No newline at end of file diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php index a4a127ff8bcfa3cd3e48fcd1f3cfa311a070e84e..db5f3adbcc39396ee054a77a2bd48eb5c937b850 100644 --- a/interface/web/login/logout.php +++ b/interface/web/login/logout.php @@ -56,8 +56,8 @@ if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin'
- - + +
'; exit; @@ -84,4 +84,4 @@ if($_SESSION["s"]["site"]["logout"] != '') { $_SESSION = array(); session_destroy(); session_write_close(); -?> +?> \ No newline at end of file diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm index 9a75a66cbda5003c367ceda39aaa93d34c22a23c..3662dff52bb1bb5d937c6d999df806ba5ef957eb 100644 --- a/interface/web/login/templates/index.htm +++ b/interface/web/login/templates/index.htm @@ -21,8 +21,8 @@
- +
diff --git a/interface/web/mail/form/mail_mailinglist.tform.php b/interface/web/mail/form/mail_mailinglist.tform.php index ba877f410cec3f6c57b4dbe571d2691c9f905d46..2914e42f833091731a6c92e146b6709a6f0f070c 100644 --- a/interface/web/mail/form/mail_mailinglist.tform.php +++ b/interface/web/mail/form/mail_mailinglist.tform.php @@ -38,6 +38,9 @@ */ +$app->uses('getconf'); +$mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + $form["title"] = "Mailing List"; $form["description"] = ""; $form["name"] = "mail_mailinglist"; @@ -157,4 +160,136 @@ $form["tabs"]['mailinglist'] = array ( //################################# ) ); + +if($mlManager == 'mlmmj') { + $form["tabs"]['options'] = array ( + 'title' => "Options", + 'width' => 100, + 'template' => "templates/mail_mailinglist_options.htm", + 'fields' => array ( + //################################# + // Begin Datatable fields + //################################# + 'admins' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + 'validators' => array ( + 0 => array ( 'type' => 'ISEMAIL', + 'allowempty' => 'y', + 'separator' => "\n", + 'errmsg'=> 'email_error_isemail'), + ), + 'cols' => '30', + 'rows' => '5' + ), + 'subject_prefix' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255', + ), + 'mail_footer' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + 'cols' => '30', + 'rows' => '5' + ), + 'archive' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), + ) + ); + + $form["tabs"]['privacy'] = array ( + 'title' => "Privacy", + 'width' => 100, + 'template' => "templates/mail_mailinglist_privacy.htm", + 'fields' => array ( + //################################# + // Begin Datatable fields + //################################# + 'list_type' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'RADIO', + 'regex' => '', + 'errmsg' => '', + 'default' => 'user', + 'value' => array ('open' => 'open_list_txt', 'closed' => 'closed_list_txt'), + 'width' => '30', + 'maxlength' => '255', + 'rows' => '', + 'cols' => '' + ), + 'subscribe_policy' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => 'confirm', + 'value' => array( + 'disabled' => 'sub_disabled_txt', + 'confirm' => 'sub_confirm_txt', + 'approval' => 'sub_approval_txt', + 'both' => 'sub_both_txt', + 'none' => 'sub_none_txt'), + ), + 'posting_policy' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => 'confirm', + 'value' => array( + 'closed' => 'post_closed_txt', + 'moderated' => 'post_moderated_txt', + 'free' => 'post_free_txt'), + ), + ) + ); + + $form["tabs"]['digest'] = array ( + 'title' => "Digest", + 'width' => 100, + 'template' => "templates/mail_mailinglist_digest.htm", + 'fields' => array ( + //################################# + // Begin Datatable fields + //################################# + 'digesttext' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), + 'digestsub' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), + 'digestinterval' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '7', + 'validators' => array(0 => array('type' => 'ISINT'), + array('type'=>'RANGE', 'range'=>'1:60') + ), + 'value' => '', + 'width' => '15' + ), + 'digestmaxmails' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '50', + 'validators' => array(0 => array('type' => 'ISINT'), + array('type'=>'RANGE', 'range'=>'10:100') + ), + 'value' => '', + 'width' => '15' + ), + ) + ); + +} ?> diff --git a/interface/web/mail/form/mail_ml_membership.tform.php b/interface/web/mail/form/mail_ml_membership.tform.php new file mode 100755 index 0000000000000000000000000000000000000000..4a1832d3dc56bcc32e334bad4ba302563239f9df --- /dev/null +++ b/interface/web/mail/form/mail_ml_membership.tform.php @@ -0,0 +1,131 @@ +uses('getconf'); +$mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + +$form["title"] = "Mailing List"; +$form["description"] = ""; +$form["name"] = "mail_ml_membership"; +$form["action"] = "mail_ml_membership_edit.php"; +$form["db_table"] = "mail_ml_membership"; +$form["db_table_idx"] = "subscriber_id"; +$form["db_history"] = "yes"; +$form["tab_default"] = "membership"; +$form["list_default"] = "mail_ml_membership_list.php"; +$form["auth"] = 'yes'; // yes / no + +$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user +$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user +$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete + +$form["tabs"]['membership'] = array ( + 'title' => "Membership", + 'width' => 100, + 'template' => "templates/mail_ml_membership_edit.htm", + 'fields' => array ( + 'server_id' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'SELECT', + 'default' => '', + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND mirror_server_id = 0 AND {AUTHSQL} ORDER BY server_name', + 'keyfield'=> 'server_id', + 'valuefield'=> 'server_name' + ), + 'value' => '' + ), + 'mailinglist_id' => array ( + 'datatype' => 'INTEGER', + 'formtype' => 'SELECT', + 'default' => '', + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => 'SELECT mailinglist_id, CONCAT_WS(\'@\', listname, domain) as listname FROM mail_mailinglist WHERE {AUTHSQL} ORDER BY listname', + 'keyfield'=> 'mailinglist_id', + 'valuefield'=> 'listname' + ), + 'value' => '' + ), + 'email' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'filters' => array( 0 => array( 'event' => 'SAVE', + 'type' => 'IDNTOASCII'), + 1 => array( 'event' => 'SHOW', + 'type' => 'IDNTOUTF8'), + 2 => array( 'event' => 'SAVE', + 'type' => 'TOLOWER') + ), + 'validators' => array ( 0 => array ( 'type' => 'ISEMAIL', + 'errmsg'=> 'email_error_isemail'), + 1 => array ( 'type' => 'UNIQUE', + 'errmsg'=> 'email_error_unique'), + ), + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255', + 'searchable' => 1 + ), + 'name' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'width' => '30', + 'maxlength' => '255', + 'searchable' => 2 + ), + 'welcome_msg' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ), + 'goodbye_msg' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), + ), +); \ No newline at end of file diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php index becb09351e869b3e4e3ccfd73ab635a1de40beff..02dfa59b470e459f6436cc4d49a5e8de75ead280 100644 --- a/interface/web/mail/form/mail_user_filter.tform.php +++ b/interface/web/mail/form/mail_user_filter.tform.php @@ -88,7 +88,7 @@ $form["tabs"]['filter'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => '', - 'value' => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt') + 'value' => array('Subject' => 'subject_txt', 'From'=>'from_txt', 'To'=>'to_txt', 'Detail'=>'detail_txt') ), 'op' => array ( 'datatype' => 'VARCHAR', @@ -116,7 +116,7 @@ $form["tabs"]['filter'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => '', - 'value' => array('move' => 'move_to_txt', 'delete'=>'delete_txt') + 'value' => array('move' => 'move_to_txt', 'delete'=>'delete_txt', 'read'=>'mark_read_txt') ), 'target' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/mail/lib/lang/ar_mail_user_filter.lng b/interface/web/mail/lib/lang/ar_mail_user_filter.lng index b5d31b589cc1a7b118c1f9516a9d895d4f3037bb..afeb15285470872587cccdbce706f39f2f88085a 100644 --- a/interface/web/mail/lib/lang/ar_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/ar_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/bg_mail_user_filter.lng b/interface/web/mail/lib/lang/bg_mail_user_filter.lng index 9eb3325c72dcc1c433fd6b38c82c0e6f447c48a5..0d39ba8555b381d57cd8f2e1e52a7937a1e59fbb 100644 --- a/interface/web/mail/lib/lang/bg_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/bg_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/br_mail_user_filter.lng b/interface/web/mail/lib/lang/br_mail_user_filter.lng index 7dca140ceeb7f80402b0c1f3060fa00e6699eb38..2406755721c3a13402bcf7475de1d2763a35ad96 100644 --- a/interface/web/mail/lib/lang/br_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/br_mail_user_filter.lng @@ -15,6 +15,7 @@ $wb['contains_txt'] = 'Contém'; $wb['is_txt'] = 'é'; $wb['begins_with_txt'] = 'Começa com'; $wb['ends_with_txt'] = 'Termina com'; +$wb['mark_read_txt'] = 'Mark as read'; $wb['delete_txt'] = 'Remover'; $wb['move_stop_txt'] = 'Mover para'; $wb['header_txt'] = 'Cabeçalho'; diff --git a/interface/web/mail/lib/lang/ca_mail_user_filter.lng b/interface/web/mail/lib/lang/ca_mail_user_filter.lng index 14b80ee07b28c5872b66bf88c70526ced7be0154..bb4d1120dcaedc828d05a1882f4a96719b3d3468 100644 --- a/interface/web/mail/lib/lang/ca_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/ca_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/cz_mail_user_filter.lng b/interface/web/mail/lib/lang/cz_mail_user_filter.lng index 9bd358063506902d11edfd038366492f0cde857f..0522e827c0e7be915daeb634589fc4973ee33c9e 100644 --- a/interface/web/mail/lib/lang/cz_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/cz_mail_user_filter.lng @@ -25,5 +25,6 @@ $wb['domain_txt'] = 'Doména'; $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; -$wb['move_to_txt'] = 'Přesunout'; +$wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/de_backup_stats_list.lng b/interface/web/mail/lib/lang/de_backup_stats_list.lng index 9e14533068b6ba433a9d368d78ceb00fcf7ceff0..9147d3cbd6e03abec15051bd166b7c10ed041c24 100644 --- a/interface/web/mail/lib/lang/de_backup_stats_list.lng +++ b/interface/web/mail/lib/lang/de_backup_stats_list.lng @@ -5,5 +5,5 @@ $wb['domain_txt'] = 'Email'; $wb['backup_count_txt'] = 'Anz. Backups'; $wb['backup_server_txt'] = 'Server'; $wb['backup_interval_txt'] = 'Intervall / Anz.'; -$wb['backup_size_txt'] = 'Backupgrösse'; +$wb['backup_size_txt'] = 'Backupgröße'; ?> diff --git a/interface/web/mail/lib/lang/de_mail_alias.lng b/interface/web/mail/lib/lang/de_mail_alias.lng index 211f0065fa0e44d05f62798fd1f36a9afebba151..4cdcd03a6f9e607366f59e7b5d555c1d08cd9d34 100644 --- a/interface/web/mail/lib/lang/de_mail_alias.lng +++ b/interface/web/mail/lib/lang/de_mail_alias.lng @@ -12,6 +12,6 @@ $wb['domain_txt'] = 'Domain'; $wb['duplicate_email_alias_txt'] = 'Dieser E-Mail Alias existiert bereits.'; $wb['source_txt'] = 'Alias'; $wb['send_as_txt'] = 'Senden als'; -$wb['send_as_exp'] = 'Ziel erlauben, den alias als Absender zu benutzen'; +$wb['send_as_exp'] = 'Ziel erlauben, den Alias als Absender zu benutzen'; $wb['greylisting_txt'] = 'Aktiviere Greylisting'; ?> diff --git a/interface/web/mail/lib/lang/de_mail_backup_list.lng b/interface/web/mail/lib/lang/de_mail_backup_list.lng index 73286a0737103be7877ad8d6c3f4aaa669042224..3c3ee4d315ac7dc1556949bb60bf2fc9b9028c7c 100644 --- a/interface/web/mail/lib/lang/de_mail_backup_list.lng +++ b/interface/web/mail/lib/lang/de_mail_backup_list.lng @@ -1,16 +1,16 @@ diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng index 2c230e34ffafb6f9fb39aff0106e9fc7b37fcf40..29be42633174a25a9c2c7e6b783a65ff1403333e 100644 --- a/interface/web/mail/lib/lang/de_mail_user.lng +++ b/interface/web/mail/lib/lang/de_mail_user.lng @@ -37,8 +37,8 @@ $wb['move_junk_txt'] = 'Spam E-Mails in das Junk Verzeichnis verschieben'; $wb['name_txt'] = 'Name'; $wb['name_optional_txt'] = '(optional)'; $wb['autoresponder_active'] = 'Autoresponder aktivieren'; -$wb['cc_txt'] = 'Kopie senden an'; -$wb['cc_error_isemail'] = 'Das -Kopie senden an- Feld enthält keine gültige E-Mail Adresse'; +$wb['cc_txt'] = 'Eingehende Mails in Kopie senden an'; +$wb['cc_error_isemail'] = 'Das Feld "Kopie senden an" enthält keine gültige E-Mail Adresse'; $wb['login_error_unique'] = 'Benutzername wird bereits verwendet.'; $wb['login_error_regex'] = 'Zulässige Zeichen sind A-Z, a-z, 0-9, ., _ und -.'; $wb['login_txt'] = 'Anmelden'; @@ -50,16 +50,16 @@ $wb['repeat_password_txt'] = 'Passwort wiederholen'; $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.'; $wb['password_match_txt'] = 'Die Passwörter stimmen überein.'; $wb['email_error_isascii'] = 'Bitte verwenden Sie keine Umlaute im Passwort. Dies kann zu Problemen mit Ihrem E-Mail-Programm führen.'; -$wb['backup_interval_txt'] = 'Backup interval'; +$wb['backup_interval_txt'] = 'Backup-Intervall'; $wb['backup_copies_txt'] = 'Anzahl der Backups'; $wb['no_backup_txt'] = 'inaktiv'; -$wb['daily_backup_txt'] = 'taeglich'; -$wb['weekly_backup_txt'] = 'woechentlich'; +$wb['daily_backup_txt'] = 'täglich'; +$wb['weekly_backup_txt'] = 'wöchentlich'; $wb['monthly_backup_txt'] = 'monatlich'; $wb['cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)'; -$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.'; -$wb['sender_cc_txt'] = 'Send outgoing BCC to'; -$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address'; -$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)'; -$wb['password_click_to_set_txt'] = 'Click to set'; +$wb['autoresponder_start_date_is_required'] = 'Das Startdatum muss angegeben werden, um den Autoresponder zu aktivieren.'; +$wb['sender_cc_txt'] = 'Ausgehende Mails in BCC senden an'; +$wb['sender_cc_error_isemail'] = 'Das Feld "Ausgehende Mails in BCC senden an" enthält keine gültige E-Mail-Adresse.'; +$wb['sender_cc_note_txt'] = '(Mehrere E-Mail-Adressen mit Kommas trennen)'; +$wb['password_click_to_set_txt'] = 'Passwort erzeugen'; ?> diff --git a/interface/web/mail/lib/lang/de_mail_user_filter.lng b/interface/web/mail/lib/lang/de_mail_user_filter.lng index c9fb78fcee1ff581249ff128bd93c5c8578e0c5b..d789c025d758318e7983aaa19bb968423754643f 100644 --- a/interface/web/mail/lib/lang/de_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/de_mail_user_filter.lng @@ -26,4 +26,6 @@ $wb['keep_txt'] = 'Behalten'; $wb['reject_txt'] = 'Abweisen'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Verschiebe nach'; +$wb['mark_read_txt'] = 'Als gelesen markieren'; +$wb['detail_txt'] = 'Detail-Angabe des Empfängers (user+detail@domain.com)'; ?> diff --git a/interface/web/mail/lib/lang/de_mail_user_list.lng b/interface/web/mail/lib/lang/de_mail_user_list.lng index 5eeff280c2a3365b1e1d4a7a6e5d921a5e3f0e91..1c6e40e3cf9c97705d43a8ff96f9c7cf8b537703 100644 --- a/interface/web/mail/lib/lang/de_mail_user_list.lng +++ b/interface/web/mail/lib/lang/de_mail_user_list.lng @@ -3,10 +3,10 @@ $wb['list_head_txt'] = 'E-Mail Konto'; $wb['email_txt'] = 'E-Mail Adresse'; $wb['autoresponder_txt'] = 'Autoresponder'; $wb['add_new_record_txt'] = 'Neues E-Mail Konto hinzufügen'; -$wb['name_txt'] = 'Realname'; +$wb['name_txt'] = 'Name'; $wb['login_txt'] = 'Anmelden'; -$wb['postfix_txt'] = 'Receiving'; -$wb['disablesmtp_txt'] = 'SMTP (sending)'; +$wb['postfix_txt'] = 'Empfang'; +$wb['disablesmtp_txt'] = 'SMTP (Versand)'; $wb['disableimap_txt'] = 'IMAP'; $wb['disablepop3_txt'] = 'POP3'; ?> diff --git a/interface/web/mail/lib/lang/el_mail_user_filter.lng b/interface/web/mail/lib/lang/el_mail_user_filter.lng index f3957144ae0225257bccd6e72dd1c9984e0ed999..cbfef59e8fdba8ac386ba64272c3c1b1099ba23f 100644 --- a/interface/web/mail/lib/lang/el_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/el_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/en_imail_ml_membership_list.lng b/interface/web/mail/lib/lang/en_imail_ml_membership_list.lng new file mode 100644 index 0000000000000000000000000000000000000000..4c2c4671f506c7857777947018edecb90369c78c --- /dev/null +++ b/interface/web/mail/lib/lang/en_imail_ml_membership_list.lng @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/interface/web/mail/lib/lang/en_mail_mailinglist.lng b/interface/web/mail/lib/lang/en_mail_mailinglist.lng index 0eba3f7f080b3c941ba184aea6e1e35ce5b36c42..2c7f947eb103ff7dbe603ee54eb022022cfef7ac 100644 --- a/interface/web/mail/lib/lang/en_mail_mailinglist.lng +++ b/interface/web/mail/lib/lang/en_mail_mailinglist.lng @@ -1,22 +1,71 @@ \ No newline at end of file +$wb['listname_error_unique'] = 'There is already a mailinglist with name on the server. Please choose a different listname.'; +$wb['email_error_isemail'] = 'Email address is invalid.'; +$wb['mailinglist_txt'] = 'Mailing list'; + +$wb['heading_general_txt'] = 'General'; + +/** MLMMJ **/ +$wb['heading_subscription_txt'] = 'Subscription'; +$wb['heading_removal_txt'] = 'Removal'; +$wb['admins_txt'] = 'Admin\'s email'; +$wb['admins_desc_txt'] = 'The additional email addresses that get mails to list name+admin@listdomain.ltd'; + +$wb['subscribers_txt'] = 'Membership'; +$wb['subscribers_desc_txt'] = 'The email addresses subscribed to the list'; + +$wb['prefix_txt'] = 'Subject prefix'; +$wb['prefix_desc_txt'] = 'This will alter the Subject: line, and add a prefix if it\'s not present elsewhere'; + +$wb['mail_footer_txt'] = 'Footer text'; +$wb['mail_footer_desc_txt'] = 'This content is appended to mail sent to the list'; + +$wb['subscribe_policy_txt'] = 'Subscribe policy'; +$wb['sub_disabled_txt'] = 'Disabled'; +$wb['sub_confirm_txt'] = 'Confirm'; +$wb['sub_approval_txt'] = 'Require approval'; +$wb['sub_both_txt'] = 'Confirm and approve'; +$wb['sub_none_txt'] = 'Limitless'; + +$wb['posting_policy_txt'] = 'posting policy'; +$wb['post_free_txt'] = 'Free'; +$wb['post_closed_txt'] = 'Closed'; +$wb['post_moderated_txt'] = 'Moderated'; + +$wb['list_type_txt'] = 'List type'; +$wb['type_open_txt'] = 'Open'; +$wb['type_closed_txt'] = 'Closed'; + +$wb['digestsub_txt'] = 'Enable'; +$wb['digesttext_txt'] = 'Thread summary'; +$wb['digestinterval_txt'] = 'Interval'; +$wb['digestinterval_desc_txt'] = 'Specifies how many days will pass before the next digest is sent. Defaults is 7 days'; +$wb['digestmaxmails_txt'] = 'Max mails'; +$wb['digestmaxmails_desc_txt'] = 'Specifies how many mails can accumulate before digest sending is triggered. Defaults to 50 mails, meaning that if 50 mails arrive to the list before digestinterval have passed, the digest is delivered'; + +$wb['archive_txt'] = 'Archive'; +$wb['archive_desc_txt'] = 'If checked, the mail will be saved in the archive and not simply deleted'; + +$wb['welcomeMsg_txt'] = 'Welcome message'; +$wb['goodbyeMsg_txt'] = 'Goodbye message'; + +$wb['open_list_txt'] = 'Open'; +$wb['closed_list_txt'] = 'Closed'; +?> diff --git a/interface/web/mail/lib/lang/en_mail_ml_membership.lng b/interface/web/mail/lib/lang/en_mail_ml_membership.lng new file mode 100755 index 0000000000000000000000000000000000000000..1c39d8452b02e07d651af11847641c9144cebc11 --- /dev/null +++ b/interface/web/mail/lib/lang/en_mail_ml_membership.lng @@ -0,0 +1,10 @@ + diff --git a/interface/web/mail/lib/lang/en_mail_user_filter.lng b/interface/web/mail/lib/lang/en_mail_user_filter.lng index e78f808efa8a4a8df9e9d889581b57e6199ad790..6f1a62ae138021047a00abd20d9f6407232ec0c4 100644 --- a/interface/web/mail/lib/lang/en_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/en_mail_user_filter.lng @@ -26,4 +26,6 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; +$wb['detail_txt'] = 'Detail part in recipient (user+detail@domain.com)'; ?> diff --git a/interface/web/mail/lib/lang/es_mail_user_filter.lng b/interface/web/mail/lib/lang/es_mail_user_filter.lng index 94100ef7a3c6a3d38f01eb68a970d295236791d1..1c190b3ef3f1377b9316add7009e24d8c1fcbb0a 100755 --- a/interface/web/mail/lib/lang/es_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/es_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['target_error_regex'] = 'El destino solo puede contener los siguientes carac $wb['target_txt'] = 'Carpeta'; $wb['to_txt'] = 'Para'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter.lng b/interface/web/mail/lib/lang/fi_mail_user_filter.lng index 1a4e7218a2807cf2f2e6ea293cbdfeb7880ab1c2..7a7c53cbf28df26af033228216db399af334042b 100755 --- a/interface/web/mail/lib/lang/fi_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/fi_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/fr_mail_user_filter.lng b/interface/web/mail/lib/lang/fr_mail_user_filter.lng index 49c5076d954656178667b5b42d1a08f192e5f7b5..2170686fa061472cfdd9dcdbd9241a43e5ab3aa0 100644 --- a/interface/web/mail/lib/lang/fr_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/fr_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/hr_mail_user_filter.lng b/interface/web/mail/lib/lang/hr_mail_user_filter.lng index 4441ecf5e452a04ba0b909f08cae19c545f10077..72cebfcc155b003adacf65c5fb421a23ce5e0c24 100644 --- a/interface/web/mail/lib/lang/hr_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/hr_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/hu_mail_user_filter.lng b/interface/web/mail/lib/lang/hu_mail_user_filter.lng index 750f3c1ae54f04cd67f345c913f771788407ebf1..544ef41d9a95ca79925bdc1953ece1f43cdcbb3e 100644 --- a/interface/web/mail/lib/lang/hu_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/hu_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/id_mail_user_filter.lng b/interface/web/mail/lib/lang/id_mail_user_filter.lng index 0def30d1a8db3e0ee6f1137af335d36edf72a348..571c948051b85f3d7997ed3c71fdd79e95d49d09 100644 --- a/interface/web/mail/lib/lang/id_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/id_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/it_mail_domain.lng b/interface/web/mail/lib/lang/it_mail_domain.lng index 46089adb90d2538e76c83aa6b46dc1bd60324252..6680c53fc3117c371cd3da0f4b13a8c239b4c7a2 100644 --- a/interface/web/mail/lib/lang/it_mail_domain.lng +++ b/interface/web/mail/lib/lang/it_mail_domain.lng @@ -6,7 +6,7 @@ $wb['active_txt'] = 'Attivo'; $wb['domain_error_empty'] = 'Dominio vuoto.'; $wb['domain_error_unique'] = 'Dominio duplicato.'; $wb['domain_error_regex'] = 'Nome dominio non valido.'; -$wb['client_txt'] = 'Cleient'; +$wb['client_txt'] = 'Cliente'; $wb['limit_maildomain_txt'] = 'Raggiunto numero massimo di domini email per questo account.'; $wb['policy_txt'] = 'Filtro Spam'; $wb['no_policy'] = '- non abilitato -'; diff --git a/interface/web/mail/lib/lang/it_mail_mailinglist.lng b/interface/web/mail/lib/lang/it_mail_mailinglist.lng index 15629238a944628da95b67581036b0a323c4f244..235469fb87ee1f09b0176cd468faff9447b57436 100644 --- a/interface/web/mail/lib/lang/it_mail_mailinglist.lng +++ b/interface/web/mail/lib/lang/it_mail_mailinglist.lng @@ -19,4 +19,56 @@ $wb['password_match_txt'] = 'Le password coincidono.'; $wb['listname_error_unique'] = 'There is already a mailinglist with name on the server. Please choose a different listname.'; $wb['email_error_isemail'] = 'Email address is invalid.'; $wb['mailinglist_txt'] = 'Mailing list'; -?> + +$wb['heading_general_txt'] = 'General'; + +/** MLMMJ **/ +$wb['Options'] = 'Opzioni'; +$wb['Membership'] = 'Membri'; +$wb['Digest'] = 'Raccolta'; + +$wb['heading_subscription_txt'] = 'Sottoscrizione'; +$wb['heading_removal_txt'] = 'Rimozione'; +$wb['admins_txt'] = 'Email amministratori'; +$wb['admins_desc_txt'] = 'Gli indirizzi email aggiuntivi che ricevono mail a list name+admin@listdomain.ltd'; + +$wb['subscribers_txt'] = 'Membri'; +$wb['subscribers_desc_txt'] = 'Gli indirizzi email sottoscritti alla lista'; + +$wb['prefix_txt'] = 'Prefisso oggetto'; +$wb['prefix_desc_txt'] = 'Questo modificherà la linea Subject: e aggiunge un prefisso se non è già presente'; + +$wb['mail_footer_txt'] = 'Piè di pagina'; +$wb['mail_footer_desc_txt'] = 'Questo contenuto è appeso alla mail inviata alla lista'; + +$wb['subscribe_policy_txt'] = 'Politiche di Sottoscrizione'; +$wb['sub_disabled_txt'] = 'Disabilitato'; +$wb['sub_confirm_txt'] = 'Conferma'; +$wb['sub_approval_txt'] = 'Richiesta approvazione'; +$wb['sub_both_txt'] = 'Conferma ed approva'; +$wb['sub_none_txt'] = 'Senza limiti'; + +$wb['posting_policy_txt'] = 'Politiche di invio'; +$wb['post_free_txt'] = 'Libero'; +$wb['post_closed_txt'] = 'Chiuso'; +$wb['post_moderated_txt'] = 'Moderato'; + +$wb['list_type_txt'] = 'Tipo di lista'; +$wb['type_open_txt'] = 'Aperta'; +$wb['type_closed_txt'] = 'Chiusa'; + +$wb['digestsub_txt'] = 'Abilitato'; +$wb['digesttext_txt'] = 'Sommario discussione'; +$wb['digestinterval_txt'] = 'Intervallo'; +$wb['digestinterval_desc_txt'] = 'Specifica quanti giorni dovranno passare prima che la prossima raccolta sia inviata. Il valore predefinito è 7 giorni'; +$wb['digestmaxmails_txt'] = 'Mail massime'; +$wb['digestmaxmails_desc_txt'] = 'Specifica quante mail si possono accumulare prima che l\'invio della raccolta venga attivato. Il valore predefinito è 50 mail, che siginifica che se 50 mail arrivano alla lista prima che l\'intervallo della raccolta sia passato, questa viene inviata'; + +$wb['archive_txt'] = 'Archivia'; +$wb['archive_desc_txt'] = 'If checked, the mail will be saved in the archive and not simply deleted'; + +$wb['welcomeMsg_txt'] = 'Messaggio di benvenuto'; +$wb['goodbyeMsg_txt'] = 'Messaggio di addio'; + +$wb['open_list_txt'] = 'Aperta'; +$wb['closed_list_txt'] = 'Chiusa'; \ No newline at end of file diff --git a/interface/web/mail/lib/lang/it_mail_ml_membership.lng b/interface/web/mail/lib/lang/it_mail_ml_membership.lng new file mode 100755 index 0000000000000000000000000000000000000000..b44d8a19ffd8c6e1a32a6a1660bfcea945f9d59e --- /dev/null +++ b/interface/web/mail/lib/lang/it_mail_ml_membership.lng @@ -0,0 +1,8 @@ + diff --git a/interface/web/mail/lib/lang/ja_mail_user_filter.lng b/interface/web/mail/lib/lang/ja_mail_user_filter.lng index 847640fee4a1f01ccdb0e3af6377026b8b29e1b9..ba6d580801abb349528f454f197a628d849b46c4 100644 --- a/interface/web/mail/lib/lang/ja_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/ja_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/nl_mail_user_filter.lng b/interface/web/mail/lib/lang/nl_mail_user_filter.lng index 903b61072928c03f49e88a7d56ff92660364116b..d7165f3cafbbf493a4c7c5223e963814e33722d0 100644 --- a/interface/web/mail/lib/lang/nl_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/nl_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/pl_mail_user_filter.lng b/interface/web/mail/lib/lang/pl_mail_user_filter.lng index 1f0b071f193ccddfef0d00a1b8a15b46d365e8d9..40315f33096e8e9834e613d8a30558925050f759 100644 --- a/interface/web/mail/lib/lang/pl_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/pl_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/pt_mail_user_filter.lng b/interface/web/mail/lib/lang/pt_mail_user_filter.lng index 42a7481d70fd920312f11f51706a6fe19097e0ac..7d308844718803da9526cbf1543e0d939119fc44 100644 --- a/interface/web/mail/lib/lang/pt_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/pt_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/ro_mail_user_filter.lng b/interface/web/mail/lib/lang/ro_mail_user_filter.lng index 7c5c72ad72a34bca4e01c691e2014f1d0f2a7309..07a3b64ff97d48cc636345c9d7ba3d094bb804b8 100644 --- a/interface/web/mail/lib/lang/ro_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/ro_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/se_mail_user_filter.lng b/interface/web/mail/lib/lang/se_mail_user_filter.lng index 0cd888b2e543a6497ea56a6866fee48f7ef2cfac..d82eb7f0d8ad2ead68eb3651b96a22c6924c2410 100644 --- a/interface/web/mail/lib/lang/se_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/se_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/sk_mail_user_filter.lng b/interface/web/mail/lib/lang/sk_mail_user_filter.lng index 20904653c65588524f931debd9eb890d8f5569eb..ae017823460d2709cbb1183b4889fd854ae38284 100644 --- a/interface/web/mail/lib/lang/sk_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/sk_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Keep'; $wb['reject_txt'] = 'Reject'; $wb['stop_txt'] = 'Stop'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/lang/tr_mail_user_filter.lng b/interface/web/mail/lib/lang/tr_mail_user_filter.lng index 8897a9d18b472f2968e2389d3da6f9f5fa4bb06d..efbdb46a2ada7e18577ab0eeb2084ab644e64a6a 100644 --- a/interface/web/mail/lib/lang/tr_mail_user_filter.lng +++ b/interface/web/mail/lib/lang/tr_mail_user_filter.lng @@ -26,4 +26,5 @@ $wb['keep_txt'] = 'Tut'; $wb['reject_txt'] = 'Reddet'; $wb['stop_txt'] = 'Durdur'; $wb['move_to_txt'] = 'Move to'; +$wb['mark_read_txt'] = 'Mark as read'; ?> diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php index 6466f614c64548bd9cacf532ed63a21b45b78d3a..3b7875eaf9a9cbfe379846e7b17a8399135ec115 100644 --- a/interface/web/mail/lib/module.conf.php +++ b/interface/web/mail/lib/module.conf.php @@ -85,6 +85,13 @@ if($app->auth->get_client_limit($userid, 'mailmailinglist') != 0) 'target' => 'content', 'link' => 'mail/mail_mailinglist_list.php', 'html_id' => 'mail_mailinglist_list'); + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + if($mlManager == 'mlmmj') + $items[] = array( 'title' => 'Membership', + 'target' => 'content', + 'link' => 'mail/mail_ml_membership_list.php', + 'html_id' => 'mail_ml_membership_list'); } if(count($items) && $app->system->has_service($userid, 'mail')) diff --git a/interface/web/mail/lib/remote.conf.php b/interface/web/mail/lib/remote.conf.php index ae03e9992aa99374c163fe0e2876189e8b9644ec..012b3b673bcc17eeea9c449d6e136e0b50daded0 100644 --- a/interface/web/mail/lib/remote.conf.php +++ b/interface/web/mail/lib/remote.conf.php @@ -19,6 +19,7 @@ $function_list['mail_spamfilter_blacklist_get,mail_spamfilter_blacklist_add,mail $function_list['mail_user_filter_get,mail_user_filter_add,mail_user_filter_update,mail_user_filter_delete'] = 'Mail user filter functions'; $function_list['mail_user_backup'] = 'Mail Backup functions'; $function_list['mail_filter_get,mail_filter_add,mail_filter_update,mail_filter_delete'] = 'Mail filter functions'; +$function_list['xmpp_domain_get,xmpp_domain_add,xmpp_domain_update,xmpp_domain_delete,xmpp_domain_set_status,xmpp_domain_get_by_domain'] = 'XMPP domain functions'; +$function_list['xmpp_user_get,xmpp_user_add,xmpp_user_update,xmpp_user_delete,xmpp_user_set_status'] = 'XMPP user functions'; - -?> +?> \ No newline at end of file diff --git a/interface/web/mail/list/mail_ml_membership.list.php b/interface/web/mail/list/mail_ml_membership.list.php new file mode 100644 index 0000000000000000000000000000000000000000..d23211817c6903aeeddd37811f68e5e84f43ec44 --- /dev/null +++ b/interface/web/mail/list/mail_ml_membership.list.php @@ -0,0 +1,93 @@ + "mailinglist_id", + 'datatype' => "INTEGER", + 'formtype' => "SELECT", + 'op' => "like", + 'prefix' => "", + 'suffix' => "", + 'datasource' => array ( 'type' => 'SQL', + 'querystring' => 'SELECT mailinglist_id, CONCAT_WS(\'@\', listname, domain) as listname FROM mail_mailinglist WHERE {AUTHSQL} ORDER BY listname', + 'keyfield'=> 'mailinglist_id', + 'valuefield'=> 'listname' + ), + 'width' => "", + 'value' => ""); + + +$liste["item"][] = array( 'field' => "email", + 'datatype' => "VARCHAR", + 'filters' => array( 0 => array( 'event' => 'SHOW', + 'type' => 'IDNTOUTF8') + ), + 'formtype' => "TEXT", + 'op' => "like", + 'prefix' => "%", + 'suffix' => "%", + 'width' => "", + 'value' => ""); + +$liste["item"][] = array( 'field' => "name", + 'datatype' => "VARCHAR", + 'formtype' => "TEXT", + 'op' => "like", + 'prefix' => "%", + 'suffix' => "%", + 'width' => "", + 'value' => ""); + +$liste["item"][] = array( 'field' => "goodbye_msg", + 'datatype' => "VARCHAR", + 'formtype' => "SELECT", + 'op' => "=", + 'prefix' => "", + 'suffix' => "", + 'width' => "", + 'value' => array('n' => "
".$app->lng('no_txt')."
", 'y' => "
".$app->lng('yes_txt')."
")); diff --git a/interface/web/mail/list/xmpp_user.list.php b/interface/web/mail/list/xmpp_user.list.php index c1cdbb8d4d36b3282d7de9d6417982854e8e4171..075e7c4554ff5df6179069ba9ed9beddd86a0db7 100644 --- a/interface/web/mail/list/xmpp_user.list.php +++ b/interface/web/mail/list/xmpp_user.list.php @@ -47,7 +47,7 @@ $liste["auth"] = "yes"; * Suchfelder *****************************************************/ -$liste["item"][] = array( 'field' => "JID", +$liste["item"][] = array( 'field' => "jid", 'datatype' => "VARCHAR", 'filters' => array( 0 => array( 'event' => 'SHOW', 'type' => 'IDNTOUTF8') diff --git a/interface/web/mail/mail_mailinglist_edit.php b/interface/web/mail/mail_mailinglist_edit.php index 1419627529253adf23bba5bdfb5f00ba0de749d5..e0b1a23be50ab0cb01bfef3812da2d92c34b832d 100644 --- a/interface/web/mail/mail_mailinglist_edit.php +++ b/interface/web/mail/mail_mailinglist_edit.php @@ -197,6 +197,13 @@ class page_action extends tform_actions { function onAfterInsert() { global $app, $conf; + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + if($mlManager == 'mlmmj') { + // The following update is usefull to set the prefix of the new mailinglist as the list name + $sql = 'UPDATE mail_mailinglist SET subject_prefix = ? WHERE mailinglist_id = ?'; + $app->db->query($sql, '['.$this->dataRecord['listname'].']', $this->id); + } + // make sure that the record belongs to the client group and not the admin group when a dmin inserts it // also make sure that the user can not delete domain created by a admin if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) { diff --git a/interface/web/mail/mail_ml_membership_del.php b/interface/web/mail/mail_ml_membership_del.php new file mode 100644 index 0000000000000000000000000000000000000000..d2dcaf542b7b1d1a4466613edabb94676f666a5f --- /dev/null +++ b/interface/web/mail/mail_ml_membership_del.php @@ -0,0 +1,63 @@ +auth->check_module_permissions('mail'); + +// Loading classes +$app->uses('tpl,tform,tform_actions'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + + function onBeforeDelete() { + global $app; $conf; + + } +} + +$page = new page_action; +$page->onDelete(); + +?> diff --git a/interface/web/mail/mail_ml_membership_edit.php b/interface/web/mail/mail_ml_membership_edit.php new file mode 100755 index 0000000000000000000000000000000000000000..60f0f1b21b8875fc6444cd4c5d9125d3e148b658 --- /dev/null +++ b/interface/web/mail/mail_ml_membership_edit.php @@ -0,0 +1,104 @@ +auth->check_module_permissions('mail'); + +// Loading classes +$app->uses('tpl,tform,tform_actions'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + + + function onShowNew() { + global $app, $conf; + + //TODO: Add ml members limit + // we will check only users, not admins +// if($_SESSION["s"]["user"]["typ"] == 'user') { +// if(!$app->tform->checkClientLimit('limit_ml_membership')) { +// $app->error($app->tform->wordbook["limit_ml_membership_txt"]); +// } +// if(!$app->tform->checkResellerLimit('limit_ml_membership')) { +// $app->error('Reseller: '.$app->tform->wordbook["limit_ml_membership_txt"]); +// } +// } + + parent::onShowNew(); + } + + function onShowEnd() { + global $app, $conf; + + if($this->id > 0) { + //* we are editing a existing record + $app->tpl->setVar("edit_disabled", 1); + + + $sql = "SELECT mailinglist_id, email FROM mail_ml_membership WHERE subscriber_id = ?"; + $mlID = $app->db->queryOneRecord($sql, $this->id); + if($mlID['mailinglist_id']) $app->tpl->setVar("mailinglist_id_value", $mlID["mailinglist_id"]); + if($mlID['email']) $app->tpl->setVar("email_value", $mlID["email"]); + } else { + $app->tpl->setVar("edit_disabled", 0); + } + + parent::onShowEnd(); + } + + function onBeforeInsert() { + global $app, $conf; + + // Set the server id of the mailinglist members = server ID of mail domain. + $domain = $app->db->queryOneRecord("SELECT server_id FROM mail_mailinglist WHERE mailinglist_id = ?", $this->dataRecord["mailinglist_id"]); + + $this->dataRecord["server_id"] = $domain['server_id']; + } + +} + +$app->tform_actions = new page_action; +$app->tform_actions->onLoad(); + +?> diff --git a/interface/web/mail/mail_ml_membership_list.php b/interface/web/mail/mail_ml_membership_list.php new file mode 100644 index 0000000000000000000000000000000000000000..7d5be8a59937d2101589ce606402dbc63742a37e --- /dev/null +++ b/interface/web/mail/mail_ml_membership_list.php @@ -0,0 +1,40 @@ +auth->check_module_permissions('mail'); + +$app->load('listform_actions'); + +class list_action extends listform_actions { + + function onShow() { + global $app, $conf; + + $app->uses('getconf'); + $global_config = $app->getconf->get_global_config('mail'); + + if($global_config['mailmailinglist_link'] == 'y') { + $app->tpl->setVar('mailmailinglist_link', 1); + } else { + $app->tpl->setVar('mailmailinglist_link', 0); + } + + parent::onShow(); + } + +} + +$list = new list_action; +$list->onLoad(); \ No newline at end of file diff --git a/interface/web/mail/templates/mail_mailinglist_digest.htm b/interface/web/mail/templates/mail_mailinglist_digest.htm new file mode 100644 index 0000000000000000000000000000000000000000..57a2c1c6674269cb987e10fc5546863d0394054a --- /dev/null +++ b/interface/web/mail/templates/mail_mailinglist_digest.htm @@ -0,0 +1,48 @@ + +

+Digest + +
+ +
+ {tmpl_var name='digestsub'} +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ {tmpl_var name='digesttext'} +
+
+ + + +
+ + +
+ + diff --git a/interface/web/mail/templates/mail_mailinglist_edit.htm b/interface/web/mail/templates/mail_mailinglist_edit.htm index 9d6f8bdde60c807372c7c3583f5062e80523ef1e..8b35adda7fa72db7de7add8abaa1d05211fbfffc 100644 --- a/interface/web/mail/templates/mail_mailinglist_edit.htm +++ b/interface/web/mail/templates/mail_mailinglist_edit.htm @@ -4,88 +4,98 @@

- Mailing List - -
- -
-
-
+ +
+ +
+
+
- -
- -
-
-
+ +
+ +
+
+
- -
- -
- -
+ -
- -
-
-
- -
-
- -
- -
-
-
- -
-
- -
-
-
- -
-
- - - - -
-
-
-
- -
-
-   -
-
-
- -
-
-
- - +
+ +
+
+ + @ +
+ +
+
+ +
+
+ +
+ +
+
+ + + +
+ +
+
+ + @ +
+
- +
+
+
+ +
+ + + +
+ +
+
+ + + + +
+
+
+
+ +
+
+   +
+
+
+ +
+
+
+
+ + +
+
+
- + -
- - -
+
+ + +
\ No newline at end of file diff --git a/interface/web/mail/templates/mail_mailinglist_options.htm b/interface/web/mail/templates/mail_mailinglist_options.htm new file mode 100644 index 0000000000000000000000000000000000000000..9d0489a165ce1b80c0d7a305d49085a56323123a --- /dev/null +++ b/interface/web/mail/templates/mail_mailinglist_options.htm @@ -0,0 +1,38 @@ + +

+ +General Options +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ {tmpl_var name='archive'} +
+
+ + + +
+ + +
+ diff --git a/interface/web/mail/templates/mail_mailinglist_privacy.htm b/interface/web/mail/templates/mail_mailinglist_privacy.htm new file mode 100644 index 0000000000000000000000000000000000000000..63fe167ade096cf6a04f80ac305e756a51ea0c46 --- /dev/null +++ b/interface/web/mail/templates/mail_mailinglist_privacy.htm @@ -0,0 +1,44 @@ + +

+Privacy + +
+ +
+ {tmpl_var name='list_type'} +
+
+ +
+ +
+
+ +
+ +
+
+ + + +
+ + +
+ + \ No newline at end of file diff --git a/interface/web/mail/templates/mail_ml_membership_edit.htm b/interface/web/mail/templates/mail_ml_membership_edit.htm new file mode 100644 index 0000000000000000000000000000000000000000..bc45027edab2965f327799d2817d7238774f4506 --- /dev/null +++ b/interface/web/mail/templates/mail_ml_membership_edit.htm @@ -0,0 +1,64 @@ + +

+ + +
+ +
+ +
+
+ +
+ +
+
  {tmpl_var name='name_optional_txt'}
+
+
+ +
+ +
+
+
+ +
+ {tmpl_var name='goodbye_msg'} +
+
+ +
+ +
+
+
+ +
+ +
+
  {tmpl_var name='name_optional_txt'}
+
+
+ +
+ +
+
+
+ +
+ {tmpl_var name='welcome_msg'} +
+
+
+ + + +
+ + +
\ No newline at end of file diff --git a/interface/web/mail/templates/mail_ml_membership_list.htm b/interface/web/mail/templates/mail_ml_membership_list.htm new file mode 100644 index 0000000000000000000000000000000000000000..9142179bc58f667fc3d11107195c317656892710 --- /dev/null +++ b/interface/web/mail/templates/mail_ml_membership_list.htm @@ -0,0 +1,75 @@ + +

+ + + +
+
+
+
+ {tmpl_var name="datalog_changes_txt"} +
    + +
  • {tmpl_var name="text"}: {tmpl_var name="count"}
  • +
    +
+ {tmpl_var name="datalog_changes_end_txt"} +
+

+
+
+

{tmpl_var name="toolsarea_head_txt"}

+ + + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{tmpl_var name='search_limit'}
  + +
{tmpl_var name="mailinglist_id"}{tmpl_var name="email"}{tmpl_var name="name"}{tmpl_var name="goodbye_msg"} + +
{tmpl_var name='globalsearch_noresults_text_txt'}
+
diff --git a/interface/web/mail/xmpp_domain_edit.php b/interface/web/mail/xmpp_domain_edit.php index 39132011148a73989d67a73cc7057e234f65bb2d..b7370a2e5e9d0ac3b644faed7e23931aa813ef79 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -405,7 +405,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND `origin` = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id FROM dns_soa WHERE active = 'Y' AND `origin` = ?", $this->dataRecord['domain'].'.'); if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa); } diff --git a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng index 1665ba14d22763412387e00b009f445090e78d4b..ac4016713bf20014df5e9e7b4b15bfb580500779 100644 --- a/interface/web/mailuser/lib/lang/de_mail_user_filter.lng +++ b/interface/web/mailuser/lib/lang/de_mail_user_filter.lng @@ -18,4 +18,5 @@ $wb['begins_with_txt'] = 'Startet mit'; $wb['ends_with_txt'] = 'Endet mit'; $wb['move_to_txt'] = 'Verschieben nach'; $wb['delete_txt'] = 'Löschen'; +$wb['detail_txt'] = 'Detail-Angabe des Empfängers (user+detail@domain.com)'; ?> diff --git a/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng index a736abf69082154b13322b64dba298c66a1927c3..e0028159433081752c19a822a3d2954b71f5b9ec 100644 --- a/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng +++ b/interface/web/mailuser/lib/lang/en_mail_user_autoresponder.lng @@ -9,5 +9,5 @@ $wb["autoresponder_end_date_txt"] = 'End by'; $wb["autoresponder_end_date_isgreater"] = 'End date must be set and be later than start date.'; $wb['autoresponder_active'] = 'Enable the autoresponder'; $wb['now_txt']='Now'; -$wb['autoresponder_subject_txt'] = 'Betreff'; +$wb['autoresponder_subject_txt'] = 'Subject'; ?> diff --git a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng index 23451b74dba6d02a5e79cd6029f6b430713e87b7..652d509741db3269dce302c97268cf66ee8d4ae5 100644 --- a/interface/web/mailuser/lib/lang/en_mail_user_filter.lng +++ b/interface/web/mailuser/lib/lang/en_mail_user_filter.lng @@ -18,4 +18,5 @@ $wb['begins_with_txt'] = 'Begins with'; $wb['ends_with_txt'] = 'Ends with'; $wb['move_to_txt'] = 'Move to'; $wb['delete_txt'] = 'Delete'; +$wb['detail_txt'] = 'Detail part in recipient (user+detail@domain.com)'; ?> diff --git a/interface/web/mailuser/lib/lang/it.lng b/interface/web/mailuser/lib/lang/it.lng index 114dec9b9195adcaa18ca636b75e5d162569d6b1..c74d282d312e1897918e9d611db30b95162537ac 100644 --- a/interface/web/mailuser/lib/lang/it.lng +++ b/interface/web/mailuser/lib/lang/it.lng @@ -1,9 +1,9 @@ diff --git a/interface/web/monitor/iframe_proxy.php b/interface/web/monitor/iframe_proxy.php new file mode 100644 index 0000000000000000000000000000000000000000..321659ebced2ab1491dabd903c1eb7587bb2d888 --- /dev/null +++ b/interface/web/monitor/iframe_proxy.php @@ -0,0 +1,152 @@ +auth->check_module_permissions('monitor'); + + +$app->uses('getconf'); +$server_config = $app->getconf->get_server_config($_SESSION['monitor']['server_id'], 'server'); + + +$context = !empty($_GET['context']) ? trim($_GET['context']) : ''; + +$proxy_url = ''; +$http_user = ''; +$http_password = ''; +if(isset($server_config[$context . '_url'])) +{ + $proxy_url = $server_config[$context . '_url']; + $proxy_url = str_replace('[SERVERNAME]', $server_config['hostname'], $proxy_url); + + if(isset($_GET['url'])) + { + $proxy_url .= urldecode($_GET['url']); + } + + $http_user = trim($server_config[$context . '_user']); + $http_password = trim($server_config[$context . '_password']); +} +else +{ + header('HTTP/1.1 500'); + echo 'Invalid Context-Parameter.'; + exit; +} + +$response = null; + +try +{ + if(isset($http_user) || isset($http_password)) + { + $proxy_url = str_replace('://', sprintf('://%s:%s@', $http_user, $http_password), $proxy_url); + } + + if(empty($proxy_url)) + { + header('HTTP/1.1 500'); + echo 'Invalid/Empty request.'; + exit; + } + + $ch = curl_init($proxy_url); + if($ch) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch, CURLOPT_TIMEOUT, 20); + curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); + + //curl_setopt($ch, CURLOPT_VERBOSE, true); + curl_setopt($ch, CURLINFO_HEADER_OUT, true); + + $response = curl_exec($ch); + $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if(empty($response_code) || empty($response)) + { + throw new \Exception('HTTP Sub-Request failed.'); + } + + // HTML-Rewrites + if(strpos($response, ' diff --git a/interface/web/monitor/lib/lang/pl.lng b/interface/web/monitor/lib/lang/pl.lng index 4ce642fbd8ba36e922bb1fe25add725cf9391764..647e7b8be0795c77861e2b88f6313b8c85cfa34f 100644 --- a/interface/web/monitor/lib/lang/pl.lng +++ b/interface/web/monitor/lib/lang/pl.lng @@ -6,6 +6,7 @@ $wb['System load 5 minutes'] = 'Obciążenie systemu w ciągu ostatnich 5 minut' $wb['System load 15 minutes'] = 'Obciążenie systemu w ciągu ostatnich 15 minut'; $wb['Server Load'] = 'Serwer włączony'; $wb['Disk usage'] = 'Użycie dysku'; +$wb['Show MySQL Database size'] = 'Pokaż rozmiar baz danych MySQL'; $wb['Memory usage'] = 'Użycie pamięci'; $wb['no_data_serverload_txt'] = 'Żadne dane o serwerze nie zostały załadowane w tym momencie. Prosze spróbować ponownie później.'; $wb['no_data_memusage_txt'] = 'Żadne dane o użyciu pamięci nie zostały załadowane w tym momencie. Prosze spróbować ponownie później.'; @@ -143,21 +144,21 @@ $wb['monitor_serverstate_beancountererror_txt'] = 'Jest za dużo problemów w be $wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter'; $wb['monitor_beancounter_nosupport_txt'] = 'Ten serwer nie jest serwerem OpenVz VE i nie posiada informacji o beancounterach'; $wb['monitor_title_iptables_txt'] = 'Reguły IPTables'; -$wb['Show fail2ban-Log'] = 'Pokaż log fail2ban'; +$wb['Show fail2ban-Log'] = 'Pokaż Log fail2ban'; $wb['Show IPTables'] = 'Pokaż reguły IPTables'; -$wb['Show OpenVz VE BeanCounter'] = 'Show OpenVz VE BeanCounter'; -$wb['Show Monit'] = 'Show Monit'; -$wb['no_monit_url_defined_txt'] = 'No Monit URL defined.'; -$wb['no_permissions_to_view_monit_txt'] = 'You are not allowed to access Monit.'; -$wb['Show Munin'] = 'Show Munin'; -$wb['no_munin_url_defined_txt'] = 'No Munin URL defined.'; -$wb['no_permissions_to_view_munin_txt'] = 'You are not allowed to access Munin.'; -$wb['no_data_database_size_txt'] = 'No data about the database usage available at the moment. Please check again later.'; -$wb['monitor_database_name_txt'] = 'Database'; -$wb['monitor_database_size_txt'] = 'Size'; -$wb['monitor_database_client_txt'] = 'Client'; -$wb['monitor_database_domain_txt'] = 'Domain'; -$wb['Show MongoDB-Log'] = 'Show MongoDB-Log'; +$wb['Show OpenVz VE BeanCounter'] = 'Pokaż OpenVz VE BeanCounter'; +$wb['Show Monit'] = 'Pokaż Monit'; +$wb['no_monit_url_defined_txt'] = 'Nie zdefiniowano adresu URL Monit.'; +$wb['no_permissions_to_view_monit_txt'] = 'Nie masz dostępu do Monit.'; +$wb['Show Munin'] = 'Pokaż Munin'; +$wb['no_munin_url_defined_txt'] = 'Nie zdefiniowano adresu URL Munin.'; +$wb['no_permissions_to_view_munin_txt'] = 'Nie masz dostępu do Munina.'; +$wb['no_data_database_size_txt'] = 'Brak danych na temat wykorzystania bazy danych w danym momencie. Sprawdź później ponownie.'; +$wb['monitor_database_name_txt'] = 'Baza danych'; +$wb['monitor_database_size_txt'] = 'Wielkość'; +$wb['monitor_database_client_txt'] = 'Klient'; +$wb['monitor_database_domain_txt'] = 'Domena'; +$wb['Show MongoDB-Log'] = 'Pokaż Log MongoDB'; $wb['monitor_services_mongodb_txt'] = 'MongoDB-Server:'; $wb['monitor_title_mongodb_txt'] = 'MongoDB Log'; ?> diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php index cd84ff3b1a735f7a9d4ea2f9437b1bb61f818a77..5b35053dc6f7dcda21daa7109eb470f64864697f 100644 --- a/interface/web/monitor/lib/module.conf.php +++ b/interface/web/monitor/lib/module.conf.php @@ -121,6 +121,11 @@ $items[] = array( 'title' => "Show Services", 'target' => 'content', 'link' => 'monitor/show_data.php?type=services', 'html_id' => 'services'); + +$items[] = array( 'title' => "Show Nagios/Check_MK", + 'target' => 'content', + 'link' => 'monitor/show_nagios.php', + 'html_id' => 'nagios'); $items[] = array( 'title' => "Show Monit", 'target' => 'content', diff --git a/interface/web/monitor/show_monit.php b/interface/web/monitor/show_monit.php index 7bd69df43f5dd84713525bdbea9c4a8bbd8ac6f0..8c6903d04282f3ae4cbc049634c0cbfe7854afde 100644 --- a/interface/web/monitor/show_monit.php +++ b/interface/web/monitor/show_monit.php @@ -48,11 +48,20 @@ $app->tpl->setVar("list_head_txt", $title); if($_SESSION["s"]["user"]["typ"] == 'admin'){ + /* $app->uses('getconf'); $server_config = $app->getconf->get_server_config($_SESSION['monitor']['server_id'], 'server'); - $monit_url = trim($server_config['monit_url']); + */ + + $monit_url = sprintf( + '%s://%s/monitor/iframe_proxy.php?context=monit', + (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http', + $_SERVER['HTTP_HOST'] + ); + if($monit_url != ''){ + /* $monit_url = str_replace('[SERVERNAME]', $_SESSION['monitor']['server_name'], $monit_url); $monit_user = trim($server_config['monit_user']); $monit_password = trim($server_config['monit_password']); @@ -68,7 +77,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'){ $monit_url_parts = parse_url($monit_url); $monit_url = $monit_url_parts['scheme'].'://'.$auth_string.$monit_url_parts['host'].(isset($monit_url_parts['port']) ? ':' . $monit_url_parts['port'] : '').(isset($monit_url_parts['path']) ? $monit_url_parts['path'] : '').(isset($monit_url_parts['query']) ? '?' . $monit_url_parts['query'] : '').(isset($monit_url_parts['fragment']) ? '#' . $monit_url_parts['fragment'] : ''); - + */ $app->tpl->setVar("monit_url", $monit_url); } else { $app->tpl->setVar("no_monit_url_defined_txt", $app->lng("no_monit_url_defined_txt")); diff --git a/interface/web/monitor/show_nagios.php b/interface/web/monitor/show_nagios.php new file mode 100644 index 0000000000000000000000000000000000000000..da2b7f028f2caf83d8e815300a6ff94fa070ac60 --- /dev/null +++ b/interface/web/monitor/show_nagios.php @@ -0,0 +1,106 @@ +auth->check_module_permissions('monitor'); + +$app->uses('tools_monitor'); + +// Loading the template +$app->uses('tpl'); +$app->tpl->newTemplate("form.tpl.htm"); +$app->tpl->setInclude('content_tpl', 'templates/show_nagios.htm'); + +$monTransSrv = $app->lng("monitor_settings_server_txt"); +$title = 'Nagios ('. $monTransSrv .' : ' . $_SESSION['monitor']['server_name'] . ')'; + +$app->tpl->setVar("list_head_txt", $title); + +if($_SESSION["s"]["user"]["typ"] == 'admin'){ + + $app->uses('getconf'); + $server_config = $app->getconf->get_server_config($_SESSION['monitor']['server_id'], 'server'); + + $nagios_url = trim($server_config['nagios_url']); + if($nagios_url != ''){ + $nagios_url = str_replace('[SERVERNAME]', $_SESSION['monitor']['server_name'], $nagios_url); + $nagios_user = trim($server_config['nagios_user']); + $nagios_password = trim($server_config['nagios_password']); + $nagios_url_parts = parse_url($nagios_url); + if (strpos($nagios_url, '/check_mk') !== false) { + //** Check_MK + if($nagios_user != ''){ + $nagios_url = $nagios_url_parts['scheme'].'://'.$auth_string.$nagios_url_parts['host'].(isset($nagios_url_parts['port']) ? ':' . $nagios_url_parts['port'] : ''); + $pathparts = explode('/check_mk', $nagios_url_parts['path'], 2); + $nagios_url .= $pathparts[0].'/check_mk/login.py?_login=1&_password='.rawurlencode($nagios_password).'&_username='.rawurlencode($nagios_user); + if (strlen(@$pathparts[1]) > 0) { + if (substr($pathparts[1], 0, 1) == '/') $pathparts[1] = substr($pathparts[1], 1, strlen($pathparts[1])-1); + $nagios_url .= '&_origtarget='.rawurlencode($pathparts[1]); + } + if (isset($nagios_url_parts['query'])) $nagios_url .= '?'.rawurlencode($nagios_url_parts['query']); + + } else { + $nagios_url = $nagios_url_parts['scheme'].'://'.$auth_string.$nagios_url_parts['host'].(isset($nagios_url_parts['port']) ? ':' . $nagios_url_parts['port'] : ''); + $pathparts = explode('/check_mk', $nagios_url_parts['path'], 2); + $nagios_url .= $pathparts[0].'/check_mk/login.py'; + if (strlen(@$pathparts[1]) > 0) { + if (substr($pathparts[1], 0, 1) == '/') $pathparts[1] = substr($pathparts[1], 1, strlen($pathparts[1])-1); + $nagios_url .= '?_origtarget='.rawurlencode($pathparts[1]); + } + if (isset($nagios_url_parts['query'])) $nagios_url .= '?'.rawurlencode($nagios_url_parts['query']); + } + + } else { + //** Nagios + $auth_string = ''; + if($nagios_user != ''){ + $auth_string = rawurlencode($nagios_user); + } + if($nagios_user != '' && $nagios_password != ''){ + $auth_string .= ':'.rawurlencode($nagios_password); + } + if($auth_string != '') $auth_string .= '@'; + $nagios_url = $nagios_url_parts['scheme'].'://'.$auth_string.$nagios_url_parts['host'].(isset($nagios_url_parts['port']) ? ':' . $nagios_url_parts['port'] : '').(isset($nagios_url_parts['path']) ? $nagios_url_parts['path'] : '').(isset($nagios_url_parts['query']) ? '?' . $nagios_url_parts['query'] : '').(isset($nagios_url_parts['fragment']) ? '#' . $nagios_url_parts['fragment'] : ''); + } + + $app->tpl->setVar("nagios_url", $nagios_url); + } else { + $app->tpl->setVar("no_nagios_url_defined_txt", $app->lng("no_nagios_url_defined_txt")); + } +} else { + $app->tpl->setVar("no_permissions_to_view_nagios_txt", $app->lng("no_permissions_to_view_nagios_txt")); +} + +$app->tpl_defaults(); +$app->tpl->pparse(); +?> \ No newline at end of file diff --git a/interface/web/monitor/templates/show_nagios.htm b/interface/web/monitor/templates/show_nagios.htm new file mode 100644 index 0000000000000000000000000000000000000000..0388cb7c65d8da827ee03b47f505525914d5ad80 --- /dev/null +++ b/interface/web/monitor/templates/show_nagios.htm @@ -0,0 +1,12 @@ + +

+ +
+ + + +

ERROR

  1. {tmpl_var name="no_nagios_url_defined_txt"} {tmpl_var name="no_permissions_to_view_nagios_txt"}
+
+
\ No newline at end of file diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php index aef56f55141bbe937e552215207b762777b99d6b..40085478397bd7b0a7ca8733f5f1b4014d5fe853 100644 --- a/interface/web/sites/form/database.tform.php +++ b/interface/web/sites/form/database.tform.php @@ -157,7 +157,7 @@ $form["tabs"]['database'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => '', - 'value' => array('' => 'DB-Default', 'latin1' => 'Latin 1', 'utf8' => 'UTF-8') + 'value' => array('' => 'DB-Default', 'latin1' => 'Latin 1', 'utf8' => 'UTF-8', 'utf8mb4' => 'UTF-8 4-Byte') ), 'remote_access' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php index 239bfdb8583a7ec0a6e52b699a7ed98164dcbcb9..3b2ad1aee90a90cdd14e7514a80bf2a6bc62a129 100644 --- a/interface/web/sites/form/ftp_user.tform.php +++ b/interface/web/sites/form/ftp_user.tform.php @@ -203,7 +203,7 @@ if($app->auth->is_admin()) { 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'directory_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/', + 'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{7,128}$/', 'errmsg'=> 'directory_error_regex'), 2 => array ( 'type' => 'CUSTOM', 'class' => 'validate_ftpuser', diff --git a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng index 41f4eb9bb1f21761774069477e28370445dfb01e..1f01c23704c3791362d3dd99e75fd85eb18b2b00 100644 --- a/interface/web/sites/lib/lang/ar_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ar_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng index 2da107636ca51e9206b69a989ba879c2f26826c6..971ca5d893c646b4ffb2b6d0eb2f4ece4e02fcc1 100644 --- a/interface/web/sites/lib/lang/bg_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/bg_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/br_web_vhost_domain.lng b/interface/web/sites/lib/lang/br_web_vhost_domain.lng index 468fe0c7a2e6ea19ac6b26ea4df13430807eaa7b..8628d66264bc0f0804690db425921523cf272a8d 100644 --- a/interface/web/sites/lib/lang/br_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/br_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'Porta HTTPS'; $wb['http_port_error_regex'] = 'Porta HTTP inválida.'; $wb['https_port_error_regex'] = 'Porta HTTPS inválida.'; $wb['enable_pagespeed_txt'] = 'Habilitar PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Tempo de armazenamenro dos arquivos de log'; $wb['log_retention_error_regex'] = 'Tempo de armazenamento, em dias (valores permitidos: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng index 43a58b0dd1e65434b6c643d0aba3636b6cad7675..83538dc778d95776ae89083b3fbf36bf46e0709a 100644 --- a/interface/web/sites/lib/lang/ca_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ca_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng index a278776629ca75b43d93f9f42b62d171faa2f1db..435c2b63fb70c7846ee9fced9cc6ba34651172fc 100644 --- a/interface/web/sites/lib/lang/cz_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/cz_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/de.lng b/interface/web/sites/lib/lang/de.lng index 48e0a9a9a77432462558a73e0e1b1f5cf5be2c09..f5cf2e2052f88c852180c9d4d9ddeb4987f0641f 100644 --- a/interface/web/sites/lib/lang/de.lng +++ b/interface/web/sites/lib/lang/de.lng @@ -14,7 +14,7 @@ $wb['Command Line'] = 'Kommandozeile'; $wb['Shell-User'] = 'Shell Benutzer'; $wb['Cron Jobs'] = 'Cronjobs'; $wb['Statistics'] = 'Statistik'; -$wb['Web traffic'] = 'Datentransfer'; +$wb['Web traffic'] = 'Web-Datentransfer'; $wb['Website quota (Harddisk)'] = 'Speicherplatzbeschränkung'; $wb['Cron'] = 'Cron'; $wb['Stats'] = 'Statistiken'; @@ -32,4 +32,7 @@ $wb['Installed packages'] = 'Installierte Pakete'; $wb['Update Packagelist'] = 'Paketliste aktualisieren'; $wb['error_proxy_requires_url'] = 'Weiterleitungstyp '; $wb['Subdomain (Vhost)'] = 'Subdomain (vHost)'; +$wb['Database quota'] = 'Datenbank-Quota'; +$wb['FTP traffic'] = 'FTP-Datentransfer'; +$wb['Backup Stats'] = 'Backup-Statistiken'; ?> diff --git a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng index 3bc9874bf105333a5ae9d0a6517f909b075d4772..087756104a3cdcd706ae4de1805193a403083851 100644 --- a/interface/web/sites/lib/lang/de_database_quota_stats_list.lng +++ b/interface/web/sites/lib/lang/de_database_quota_stats_list.lng @@ -5,5 +5,5 @@ $wb['client_txt'] = 'Kunde'; $wb['used_txt'] = 'Verwendeter Speicherplatz'; $wb['quota_txt'] = 'Quota'; $wb['percentage_txt'] = 'Verbraucht in %'; -$wb['list_head_txt'] = 'Database Quota'; +$wb['list_head_txt'] = 'Datenbank-Quota'; ?> diff --git a/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng index e44025a715dbf435bdca9faee0b109ba25bf611d..c2df2b397c58bdbde1366ee1bbd6135b6671b298 100644 --- a/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng +++ b/interface/web/sites/lib/lang/de_ftp_sites_stats_list.lng @@ -1,10 +1,10 @@ diff --git a/interface/web/sites/lib/lang/de_shell_user.lng b/interface/web/sites/lib/lang/de_shell_user.lng index 9130b456e345e32b661ff72b78b8d39d7a217a49..6b5dac53c3a5a1ed6558e733ed9572eb695154d4 100644 --- a/interface/web/sites/lib/lang/de_shell_user.lng +++ b/interface/web/sites/lib/lang/de_shell_user.lng @@ -28,9 +28,9 @@ $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.'; $wb['password_match_txt'] = 'Die Passwörter stimmen überein.'; $wb['username_must_not_exceed_32_chars_txt'] = 'Der Benutzername darf 32 Zeichen nicht überschreiten.'; $wb['username_not_allowed_txt'] = 'Dieser Benutzername ist nicht erlaubt.'; -$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group'; -$wb['directory_error_regex'] = 'Invalid directory'; -$wb['shell_error_regex'] = 'Invalid shell'; -$wb['invalid_username_txt'] = 'Invalid Username'; -$wb['directory_error_notinweb'] = 'The directory has to be inside the web root.'; +$wb['invalid_system_user_or_group_txt'] = 'Ungültiger Web Benutzername oder Gruppe'; +$wb['directory_error_regex'] = 'Ungültiges Verzeichnis'; +$wb['shell_error_regex'] = 'Ungültige Shell'; +$wb['invalid_username_txt'] = 'Ungültiger Benutzername'; +$wb['directory_error_notinweb'] = 'Das Verzeichnis muss innerhalb des Web-Verzeichnisses liegen.'; ?> diff --git a/interface/web/sites/lib/lang/de_web_childdomain_list.lng b/interface/web/sites/lib/lang/de_web_childdomain_list.lng index 275b09080caeaf0cfd0973adbd0cf5a9f3995736..136a3d70adbce67c8d4b71ed20ce580e477340c2 100644 --- a/interface/web/sites/lib/lang/de_web_childdomain_list.lng +++ b/interface/web/sites/lib/lang/de_web_childdomain_list.lng @@ -10,8 +10,8 @@ $wb['domain_error_regex'] = 'Domain Name ist ungültig.'; $wb['no_redirect_txt'] = 'Keine Weiterleitung'; $wb['no_flag_txt'] = 'Keine Optionen'; $wb['none_txt'] = 'Keine'; -$wb['add_new_subdomain_txt'] = 'Add new Subdomain'; -$wb['add_new_aliasdomain_txt'] = 'Add new Aliasdomain'; +$wb['add_new_subdomain_txt'] = 'Neue Subdomain hinzufügen'; +$wb['add_new_aliasdomain_txt'] = 'Neue Aliasdomain hinzufügen'; $wb['aliasdomain_list_head_txt'] = 'Aliasdomains'; $wb['subdomain_list_head_txt'] = 'Subdomains'; ?> diff --git a/interface/web/sites/lib/lang/de_web_subdomain.lng b/interface/web/sites/lib/lang/de_web_subdomain.lng index 586c90adc38f69190b75a1723f6641b92ed4558f..4f34874a11f1d7490f6c8536c502faabea09492a 100644 --- a/interface/web/sites/lib/lang/de_web_subdomain.lng +++ b/interface/web/sites/lib/lang/de_web_subdomain.lng @@ -45,6 +45,6 @@ $wb['available_proxy_directive_snippets_txt'] = 'Verfügbare Proxy Direktiven Sc $wb['error_proxy_requires_url'] = 'Weiterleitungstyp \\"proxy\\" erfordert eine URL als Weiterleitungspfad.'; $wb['http_port_txt'] = 'HTTP Port'; $wb['https_port_txt'] = 'HTTPS Port'; -$wb['http_port_error_regex'] = 'HTTP Port invalid.'; -$wb['https_port_error_regex'] = 'HTTPS Port invalid.'; +$wb['http_port_error_regex'] = 'HTTP Port ungültig.'; +$wb['https_port_error_regex'] = 'HTTPS Port ungültig.'; ?> diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng index 1b86171ea7a3ea7c27833c4a9a477caade0c8e77..7719b296894a22f1c701aed85b713a00fd2287bc 100644 --- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng @@ -138,15 +138,19 @@ $wb['enable_spdy_txt'] = 'Aktiviere SPDY'; $wb['load_client_data_txt'] = 'Kundendaten übernehmen'; $wb['load_my_data_txt'] = 'Meine Kontaktdaten laden'; $wb['reset_client_data_txt'] = 'Daten verwerfen'; -$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.'; -$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.'; -$wb['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS'; -$wb['password_strength_txt'] = 'Password strength'; +$wb['server_chosen_not_ok'] = 'Der ausgewählte Server ist nicht zulässig für diesen Account.'; +$wb['subdomain_error_empty'] = 'Die Subdomain ist leer oder ungültig.'; +$wb['rewrite_to_https_txt'] = 'HTTP zu HTTPS weiterleiten'; +$wb['password_strength_txt'] = 'Passwortstärke'; $wb['directive_snippets_id_txt'] = 'Webserver-Konfiguration'; $wb['http_port_txt'] = 'HTTP Port'; $wb['https_port_txt'] = 'HTTPS Port'; -$wb['http_port_error_regex'] = 'HTTP Port invalid.'; -$wb['https_port_error_regex'] = 'HTTPS Port invalid.'; +$wb['http_port_error_regex'] = 'HTTP Port ungültig.'; +$wb['https_port_error_regex'] = 'HTTPS Port ungültig.'; +$wb['error_ipv4_change_forbidden'] = 'Die IP-Adresse kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator, wenn Sie die IPv4-Adresse ändern möchten.'; +$wb['error_ipv6_change_forbidden'] = 'Die IP-Adresse kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator, wenn Sie die IPv6-Adresse ändern möchten.'; +$wb['error_domain_change_forbidden'] = 'Der Domainname kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator, wenn Sie den Domainnamen ändern möchten.'; +$wb['error_server_change_not_possible'] = 'Der Server kann nicht geändert werden.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; $wb['log_retention_txt'] = 'Log-Dateien Aufbewahrungszeit'; $wb['log_retention_error_regex'] = "Aufbewahrungszeit in Tagen (Erlaubte Werte: min. 0 - max. 9999)"; diff --git a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng index 43a58b0dd1e65434b6c643d0aba3636b6cad7675..83538dc778d95776ae89083b3fbf36bf46e0709a 100644 --- a/interface/web/sites/lib/lang/dk_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/dk_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/el_web_vhost_domain.lng b/interface/web/sites/lib/lang/el_web_vhost_domain.lng index 66d8f33a16a093809b45c5c0da56899deadb047d..983a298b36c97aee6bbe240fe276e0a227212bd4 100644 --- a/interface/web/sites/lib/lang/el_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/el_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng index 9d6a27fb682e4f7e18b278efa33a45a6014318f7..2deefcb719d7ab6bdc7c6345b535f4ff61e54fd9 100644 --- a/interface/web/sites/lib/lang/en_ftp_user.lng +++ b/interface/web/sites/lib/lang/en_ftp_user.lng @@ -18,7 +18,7 @@ $wb["active_txt"] = 'Active'; $wb["limit_ftp_user_txt"] = 'The max. number of FTP users for your account is reached.'; $wb["username_error_empty"] = 'Username is empty.'; $wb["username_error_unique"] = 'The username must be unique.'; -$wb["username_error_regex"] = 'The username contains charachters that are not allowed.'; +$wb["username_error_regex"] = 'The username contains characters that are not allowed.'; $wb["quota_size_error_empty"] = 'Quota is empty.'; $wb["uid_error_empty"] = 'UID empty.'; $wb["uid_error_empty"] = 'GID empty.'; diff --git a/interface/web/sites/lib/lang/en_web_folder_user.lng b/interface/web/sites/lib/lang/en_web_folder_user.lng index 207f5367ebe1f5036bb28254d584d9845740c7d8..7736d6132fbaa998fa02d1492d87657af1b7416f 100644 --- a/interface/web/sites/lib/lang/en_web_folder_user.lng +++ b/interface/web/sites/lib/lang/en_web_folder_user.lng @@ -11,4 +11,5 @@ $wb['password_mismatch_txt'] = 'The passwords do not match.'; $wb['password_match_txt'] = 'The passwords do match.'; $wb["no_folder_perm"] = 'You have no permission for this folder.'; $wb['error_user_exists_already_txt'] = 'There is already a record for this user.'; +$wb["username_error_regex"] = 'The Username contains invalid characters.'; ?> \ No newline at end of file diff --git a/interface/web/sites/lib/lang/en_web_vhost_domain.lng b/interface/web/sites/lib/lang/en_web_vhost_domain.lng index 4d7b32015155c5f35403e2f5cdaa7a118db69339..9948839b5f75693c376edea2cf64670540598f09 100644 --- a/interface/web/sites/lib/lang/en_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/en_web_vhost_domain.lng @@ -153,6 +153,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/es_web_vhost_domain.lng b/interface/web/sites/lib/lang/es_web_vhost_domain.lng index 432dd843410e2efd3c1ef63e1bf340dbdbe15729..e484620216ef4ef6e6d36e706779ba79cd953752 100644 --- a/interface/web/sites/lib/lang/es_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/es_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng index f2de0000a0db169ab3c30a08caebd649306d79e3..74b98d86aa20336066207629921c54c8dbe94dfc 100644 --- a/interface/web/sites/lib/lang/fi_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/fi_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng index eb1bb82750cba95b5e98781cfcfa7a62492c412e..39a1040d7ba210ca8eced7cff78b28e5cfc0795b 100644 --- a/interface/web/sites/lib/lang/fr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/fr_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng index 7262c6f85850de5b762e5177fa8da470896a143f..ecbc78132d0fc4c00b15166df0143c616a45b9e2 100644 --- a/interface/web/sites/lib/lang/hr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/hr_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng index e10f791710b0593d0116ca75f5e22f0a272003ac..e05cce85431f942995666c0190934299f7872c93 100644 --- a/interface/web/sites/lib/lang/hu_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/hu_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/id_web_vhost_domain.lng b/interface/web/sites/lib/lang/id_web_vhost_domain.lng index 0cd28efa96b3f3b3fe7613e7626ea5e5cffff4eb..7c637d58310c67c58daffd437b48f0a5af5f8149 100644 --- a/interface/web/sites/lib/lang/id_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/id_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/it_web_vhost_domain.lng b/interface/web/sites/lib/lang/it_web_vhost_domain.lng index 73b7b4d352180bc716a8d8fc0c4233308ea41103..59a30ed4134bbefc55e70b28f650fbf4c339da92 100644 --- a/interface/web/sites/lib/lang/it_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/it_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng index 47d7a154f19de5a8f3a9dc609bcc1628f26e8b61..faddd9b76ce2a6f8738ee2da07a132ca367dbc7f 100644 --- a/interface/web/sites/lib/lang/ja_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ja_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng index 227eb70d21110ea0bd3174e5c7828c45bdc15266..ceac5ff8212914158f15dbad278159167f948d12 100644 --- a/interface/web/sites/lib/lang/nl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/nl_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Poort'; $wb['http_port_error_regex'] = 'HTTP Poort niet correct.'; $wb['https_port_error_regex'] = 'HTTPS Poort niet correct.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/pl_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/pl_ftp_sites_stats_list.lng index e44025a715dbf435bdca9faee0b109ba25bf611d..74ee2d2187a40eedfca4598f2b568141fcec8987 100644 --- a/interface/web/sites/lib/lang/pl_ftp_sites_stats_list.lng +++ b/interface/web/sites/lib/lang/pl_ftp_sites_stats_list.lng @@ -1,10 +1,10 @@ diff --git a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng index 3ccd645c32d4c6e5d159bf3dd6f3e5460ae86318..b8f22335013fde543e8f1af7294be9f571998b5a 100644 --- a/interface/web/sites/lib/lang/pl_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/pl_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng index 4ff1e7c4252101f4ec762bea8c594f939b0c2886..ec24cbe806939c4a4c52b66ba2de20ea210901a8 100644 --- a/interface/web/sites/lib/lang/pt_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/pt_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng index fc10154df554189effef1c9f2d30a7ee415154a2..a874c27bed800f9810c6e17d685a385faaacddd4 100644 --- a/interface/web/sites/lib/lang/ro_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/ro_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/se_web_vhost_domain.lng b/interface/web/sites/lib/lang/se_web_vhost_domain.lng index b8dae2f09a640e81d9c2eabbfd929f7415e69cf4..e0dd1e129431f20e1e34384ef46748f3df52da9c 100644 --- a/interface/web/sites/lib/lang/se_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/se_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng index 140835db84c53c8efabe363378b725dba6f1acec..390e0d171d55f397094a2153e00916df891d1021 100644 --- a/interface/web/sites/lib/lang/sk_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/sk_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng index e2676913bf7a389118525ff17f10b8327450f2a4..d78b7cead6e5bd8179b2f15fa8636f304bae8069 100644 --- a/interface/web/sites/lib/lang/tr_web_vhost_domain.lng +++ b/interface/web/sites/lib/lang/tr_web_vhost_domain.lng @@ -148,6 +148,10 @@ $wb['https_port_txt'] = 'HTTPS Port'; $wb['http_port_error_regex'] = 'HTTP Port invalid.'; $wb['https_port_error_regex'] = 'HTTPS Port invalid.'; $wb['enable_pagespeed_txt'] = 'Enable PageSpeed'; +$wb['error_ipv4_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv4 address.'; +$wb['error_ipv6_change_forbidden'] = 'The IP cannot be changed. Please contact your administrator if you want to change the IPv6 address.'; +$wb['error_domain_change_forbidden'] = 'The domain name cannot be changed. Please contact your administrator if you want to change the domain name.'; +$wb['error_server_change_not_possible'] = 'The server cannot be changed.'; $wb['log_retention_txt'] = 'Logfiles retention time'; $wb['log_retention_error_regex'] = 'Retention time in days (allowed values: min. 0 - max. 9999)'; ?> diff --git a/interface/web/sites/web_vhost_domain_edit.php b/interface/web/sites/web_vhost_domain_edit.php index 023f8db0c52938f467b5c3eb5c8ba6d61e9420c5..72c07724ea2e153780f6b6adb59e482a8756479d 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -1472,7 +1472,7 @@ class page_action extends tform_actions { $rec = $app->db->queryOneRecord("SELECT server_id from web_domain WHERE domain_id = ?", $this->id); if($rec['server_id'] != $this->dataRecord["server_id"]) { //* Add a error message and switch back to old server - $app->tform->errorMessage .= $app->lng('The Server can not be changed.'); + $app->tform->errorMessage .= $app->tform->lng('error_server_change_not_possible'); $this->dataRecord["server_id"] = $rec['server_id']; } unset($rec); @@ -1483,17 +1483,17 @@ class page_action extends tform_actions { $rec = $app->db->queryOneRecord("SELECT sys_perm_group, domain, ip_address, ipv6_address from web_domain WHERE domain_id = ?", $this->id); if(isset($this->dataRecord["domain"]) && $rec['domain'] != $this->dataRecord["domain"] && !$app->tform->checkPerm($this->id, 'u')) { //* Add a error message and switch back to old server - $app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'); + $app->tform->errorMessage .= $app->tform->lng('error_domain_change_forbidden'); $this->dataRecord["domain"] = $rec['domain']; } if(isset($this->dataRecord["ip_address"]) && $rec['ip_address'] != $this->dataRecord["ip_address"] && $rec['sys_perm_group'] != 'riud') { //* Add a error message and switch back to old server - $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv4-Address.'); + $app->tform->errorMessage .= $app->tform->lng('error_ipv4_change_forbidden'); $this->dataRecord["ip_address"] = $rec['ip_address']; } if(isset($this->dataRecord["ipv6_address"]) && $rec['ipv6_address'] != $this->dataRecord["ipv6_address"] && $rec['sys_perm_group'] != 'riud') { //* Add a error message and switch back to old server - $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv6-Address.'); + $app->tform->errorMessage .= $app->tform->lng('error_ipv6_change_forbidden'); $this->dataRecord["ipv6_address"] = $rec['ipv6_address']; } unset($rec); diff --git a/interface/web/strengthmeter/lib/lang/it_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/it_strengthmeter.lng index 3f2b615f75809e0ad79d3c54f68729f31852e522..b006c4714150243cf1fb1e306af4acb9948e2cab 100644 --- a/interface/web/strengthmeter/lib/lang/it_strengthmeter.lng +++ b/interface/web/strengthmeter/lib/lang/it_strengthmeter.lng @@ -1,7 +1,7 @@
- + - @@ -79,7 +79,7 @@
@@ -141,7 +141,7 @@ searchFieldWatermark: '', resultBoxPosition: '' }); - + ISPConfig.loadInitContent(); }); //--> diff --git a/interface/web/tools/import_ispconfig.php b/interface/web/tools/import_ispconfig.php index c43b15b7eb0ef286ff5d66ab8220f1e1d91bb2c1..728c279c01933b152905734cd122e7b197e88a46 100644 --- a/interface/web/tools/import_ispconfig.php +++ b/interface/web/tools/import_ispconfig.php @@ -109,10 +109,21 @@ if(isset($_POST['connected'])) { try { + //* Second connections to self signed SSL certs + $context = stream_context_create( + array( + 'ssl' => array ( + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ) + ) + ); $client = new SoapClient(null, array('location' => $_POST['remote_server'], 'uri' => $_POST['remote_server'].'/index.php', 'trace' => 1, - 'exceptions' => 1)); + 'exceptions' => 1, + 'stream_context' => $context)); if(!isset($remote_session_id)) $remote_session_id = $_POST['remote_session_id']; diff --git a/interface/web/vm/lib/lang/bg.lng b/interface/web/vm/lib/lang/bg.lng index 4167e14a8a150090ecfb1aa6738fb8a6abf17760..b42a772d5b0cb34a9833f8bc7add1d2be8945ea4 100644 --- a/interface/web/vm/lib/lang/bg.lng +++ b/interface/web/vm/lib/lang/bg.lng @@ -1,7 +1,7 @@ diff --git a/remoting_client/examples/sites_database_add.php b/remoting_client/examples/sites_database_add.php index 3c827769904ab9f0fbf4270e5e91c64cd62d4f8a..c63ad551eb243da03c4b0475cac66bb7fbf254a0 100644 --- a/remoting_client/examples/sites_database_add.php +++ b/remoting_client/examples/sites_database_add.php @@ -19,7 +19,7 @@ try { $params = array( 'server_id' => 1, 'type' => 'mysql', - 'website_id' => 1, + 'parent_domain_id' => 1, 'database_name' => 'db_name2', 'database_user_id' => '1', 'database_ro_user_id' => '0', diff --git a/remoting_client/examples/sites_database_user_add.php b/remoting_client/examples/sites_database_user_add.php index 108163340989e2096f2b1574b3d21b9199f98573..d59b66d9e62e53eb9c9b06d0fe650f618fbf870b 100644 --- a/remoting_client/examples/sites_database_user_add.php +++ b/remoting_client/examples/sites_database_user_add.php @@ -22,7 +22,7 @@ try { 'database_password' => 'db_name2' ); - $database_id = $client->sites_database_user_add($session_id, $client_id, $params); + $database_user_id = $client->sites_database_user_add($session_id, $client_id, $params); echo "Database ID: ".$database_user_id."
"; diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master index 47d35304f609f4e4e3405d06ad33c46e146dce3a..86814064a86ea6f21d2e4af1e2565597795b362f 100644 --- a/server/conf/apache_apps.vhost.master +++ b/server/conf/apache_apps.vhost.master @@ -1,4 +1,3 @@ - ###################################################### # This virtual host contains the configuration # for the ISPConfig apps vhost @@ -10,7 +9,7 @@ ServerAdmin webmaster@localhost {tmpl_var name='apps_vhost_servername'} - + SetHandler None @@ -18,13 +17,7 @@ RequestHeader unset Proxy early - - {tmpl_if name="enable_spdy" op="==" value="y"} - - SpdyEnabled on - - {/tmpl_if} - + DocumentRoot {tmpl_var name='apps_vhost_dir'} AddType application/x-httpd-php .php @@ -46,9 +39,9 @@ Options +Indexes +FollowSymLinks +MultiViews +ExecCGI AllowOverride AuthConfig Indexes Limit Options FileInfo - - SetHandler fcgid-script - + + SetHandler fcgid-script + FCGIWrapper {tmpl_var name='apps_vhost_basedir'}/php-fcgi-scripts/apps/.php-fcgi-starter .php Require all granted diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master index 3edf45fd46f2bc425642c78fe1bf37054d1e0196..74277a2637c5d6cc390046a257dad56d7f825313 100644 --- a/server/conf/apache_ispconfig.conf.master +++ b/server/conf/apache_ispconfig.conf.master @@ -1,128 +1,141 @@ +################################################ +# ISPConfig General Apache Options +################################################ +ServerTokens ProductOnly +ServerSignature Off + + + +SSLStaplingCache shmcb:/var/run/ocsp(128000) + + ################################################ # ISPConfig Logfile configuration for vlogger ################################################ -SetEnvIf Request_URI "^/datalogstatus.php$" dontlog - + +LogFormat '%v %h %l %u %t "%r" %>s %S "%{Referer}i" "%{User-Agent}i"' combined_ispconfig + 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 env=!dontlog + +CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig AllowOverride None - - Require all denied - - Order Deny,Allow - Deny from all - + + Require all denied + + Order Deny,Allow + Deny from all + # Do not allow access to the root file system of the server for security reasons - Options -Indexes + Options -Indexes AllowOverride None - - Require all denied - - Order Deny,Allow - Deny from all - + + Require all denied + + Order Deny,Allow + Deny from all + AllowOverride None - - Require all denied - - Order Deny,Allow - Deny from all - + + Require all denied + + Order Deny,Allow + Deny from all + # Except of the following directories that contain website scripts - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + # Allow access to mailman on OpenSuSE - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + Options +FollowSymLinks - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + # allow path to awstats and alias for awstats icons - - Require all granted - + + Require all granted + Order allow,deny Allow from all - + Alias /awstats-icon "/usr/share/awstats/icon" Alias /.well-known/acme-challenge /usr/local/ispconfig/interface/acme/.well-known/acme-challenge - - Require all granted - + + Require all granted + Order allow,deny Allow from all @@ -131,8 +144,10 @@ Alias /.well-known/acme-challenge /usr/local/ispconfig/interface/acme/.well-know + NameVirtualHost *:80 NameVirtualHost *:443 NameVirtualHost {tmpl_var name="ip_address"}:{tmpl_var name="port"} + diff --git a/server/conf/bind_pri.domain.master b/server/conf/bind_pri.domain.master index ed395064af5490be0a11aafeac61a67a9ef99d2e..897ece496ce2be29203845cc37607697ac04527e 100644 --- a/server/conf/bind_pri.domain.master +++ b/server/conf/bind_pri.domain.master @@ -20,6 +20,9 @@ $TTL {tmpl_var name='ttl'} {tmpl_var name='name'} {tmpl_var name='ttl'} CNAME {tmpl_var name='data'} + +{tmpl_var name='name'} {tmpl_var name='ttl'} CAA {tmpl_var name='data'} + {tmpl_var name='name'} {tmpl_var name='ttl'} CNAME {tmpl_var name='data'} @@ -53,5 +56,8 @@ $TTL {tmpl_var name='ttl'} {tmpl_var name='name'} {tmpl_var name='ttl'} TXT "{tmpl_var name='data'}" + +{tmpl_var name='name'} {tmpl_var name='ttl'} TYPE257 {tmpl_var name='data'} + diff --git a/server/conf/metronome_conf_host.master b/server/conf/metronome_conf_host.master index 179d533e19c532bdc498d938406a962cf877c437..3dea69257bc8cc2b637570196500ff64df24f1ea 100644 --- a/server/conf/metronome_conf_host.master +++ b/server/conf/metronome_conf_host.master @@ -59,7 +59,7 @@ VirtualHost "{tmpl_var name='domain'}" }; - + VirtualHost "anon.{tmpl_var name='domain'}" enabled = true; authentication = "anonymous"; diff --git a/server/conf/nginx_apps.vhost.master b/server/conf/nginx_apps.vhost.master index ed5e3a49ae5160842cfbc25bbd25e7e22f6c4822..75daa4df8f1692f48eacca62c217583473d9cbbf 100644 --- a/server/conf/nginx_apps.vhost.master +++ b/server/conf/nginx_apps.vhost.master @@ -89,7 +89,7 @@ server { # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; - # To access phpMyAdmin, the default user (like www-data on Debian/Ubuntu) must be used + # To access phpMyAdmin, the default user (like www-data on Debian/Devuan/Ubuntu) must be used {use_tcp}fastcgi_pass 127.0.0.1:9000; {use_socket}fastcgi_pass unix:{fpm_socket}; fastcgi_index index.php; @@ -139,7 +139,7 @@ server { # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; - # To access SquirrelMail, the default user (like www-data on Debian/Ubuntu) must be used + # To access SquirrelMail, the default user (like www-data on Debian/Devuan/Ubuntu) must be used {use_tcp}fastcgi_pass 127.0.0.1:9000; {use_socket}fastcgi_pass unix:{fpm_socket}; fastcgi_index index.php; diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 8cfdbcf8f6b9ba00dd8c2d42504ed46c732e99a7..7b3c376e9818626c1b258ad8e4efdaf0489476e4 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -1,10 +1,32 @@ + + +server { + listen :; + + listen []:; + + server_name ; + access_log off; + rewrite ^ https://$http_host$request_uri? permanent; +} + + + server { + listen :; listen []:; + + + listen :; + + listen []:; + + listen : ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if}; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; @@ -35,13 +57,6 @@ server { rewrite ^(.*)$ $2 ; } - - - if ($scheme != "https") { - rewrite ^ https://$http_host$request_uri? permanent; - } - - @@ -290,15 +305,16 @@ server { server { - listen :80; + listen :; - listen []:80; + listen []:; - + - listen :443 ssl; + listen : ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if}; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - listen []:443 ssl; + listen []: ssl{tmpl_if name='enable_http2' op='==' value='y'} http2{/tmpl_if}{tmpl_if name='enable_spdy' op='==' value='y'} spdy{/tmpl_if}; ssl_certificate ; ssl_certificate_key ; diff --git a/server/conf/sieve_filter.master b/server/conf/sieve_filter.master index 8e78c6c83aa87fdeb53f03a42d771aacd0c0b5e5..bfd75c4d43e6279ecba65701c7151ccade11fa79 100644 --- a/server/conf/sieve_filter.master +++ b/server/conf/sieve_filter.master @@ -1,4 +1,4 @@ -require ["fileinto", "regex", "vacation"]; +require ["fileinto", "regex", "vacation", "imap4flags", "envelope", "subaddress"]; # Send a copy of email to diff --git a/server/conf/sieve_filter_1.2.master b/server/conf/sieve_filter_1.2.master index 0dd9e62e6c4b2e6ba0a58c96af27191d0d215217..47370ec0a919e4c165835e8fd5ae8734cc7b5c45 100644 --- a/server/conf/sieve_filter_1.2.master +++ b/server/conf/sieve_filter_1.2.master @@ -1,4 +1,4 @@ -require ["fileinto", "regex", "date", "relational", "vacation"]; +require ["fileinto", "regex", "date", "relational", "vacation", "imap4flags", "envelope", "subaddress"]; # Send a copy of email to diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 063b5c7e3390666fb569578f97ec5448e9b38b35..812e8e0fcc9aec596e90c73a52903c442ad8591c 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -13,6 +13,12 @@ + + + Protocols h2 h2c http/1.1 + + + DocumentRoot @@ -51,8 +57,8 @@ ErrorDocument 503 /error/503.html - + SSLEngine on SSLProtocol All -SSLv2 -SSLv3 # 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 @@ -71,9 +77,9 @@ SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off - + # Clear PHP settings of this website @@ -339,12 +345,24 @@ - SetHandler php5-fcgi + + + SetHandler php5-fcgi + + + SetHandler php5-fcgi + - SetHandler php5-fcgi + + + SetHandler php5-fcgi + + + SetHandler php5-fcgi + Action php5-fcgi /php5-fcgi virtual @@ -361,7 +379,13 @@ #ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:/$1 - SetHandler "proxy:fcgi://127.0.0.1:" + + + SetHandler "proxy:fcgi://127.0.0.1:" + + + SetHandler "proxy:fcgi://127.0.0.1:" + @@ -369,7 +393,13 @@ #ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix://|fcgi://localhost//$1 - SetHandler "proxy:unix:|fcgi://localhost" + + + SetHandler "proxy:unix:|fcgi://localhost" + + + SetHandler "proxy:unix:|fcgi://localhost" + @@ -440,22 +470,31 @@ RewriteCond %{REQUEST_URI} ^/\.well-known/acme-challenge/ RewriteRule ^ - [END] + + + + RewriteCond %{HTTPS} off + RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ + + RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] + + RewriteCond %{HTTP_HOST} ^$ [NC] RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ - RewriteRule ^(.*)$ https://$1 [R=301,NE,L] + RewriteRule ^ https://%{REQUEST_URI} [R=301,NE,L] RewriteCond %{HTTP_HOST} ^$ [NC] RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ - RewriteRule ^(.*)$ https://$1 [R=301,NE,L] + RewriteRule ^ https://%{REQUEST_URI} [R=301,NE,L] - RewriteCond %{HTTP_HOST} $ [NC] + RewriteCond %{HTTP_HOST} $ [NC] RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ @@ -464,8 +503,7 @@ RewriteCond %{REQUEST_URI} !^/php5-fcgi/ RewriteCond %{REQUEST_URI} !^ - - RewriteRule ^/(.*)$ $1 + RewriteRule /(.*) $1 @@ -484,36 +522,24 @@ AssignUserId - - # Do not execute PHP files in webdav directory - - - SecRuleRemoveById 960015 - SecRuleRemoveById 960032 - - - SetHandler None - - - DavLockDB {tmpl_var name='document_root'}/tmp/DavLock - # DO NOT REMOVE THE COMMENTS! - # IF YOU REMOVE THEM, WEBDAV WILL NOT WORK ANYMORE! - # WEBDAV BEGIN - # WEBDAV END + + + + SecRuleRemoveById 960015 + SecRuleRemoveById 960032 + DirectoryIndex disabled + SetHandler None + + DavLockDB {tmpl_var name='document_root'}/tmp/DavLock + # needed by apache2_plugin.inc.php + # WEBDAV BEGIN + # WEBDAV END + - - - - - SSLStaplingCache shmcb:/var/run/ocsp(128000) - - - - diff --git a/server/cron.sh b/server/cron.sh index 98f0ddfd30d4443382e0b77a5d1a9145bb503544..58ddc67ff253394e2ec0608248b15d9f6bd581ed 100644 --- a/server/cron.sh +++ b/server/cron.sh @@ -10,8 +10,9 @@ if [ -f /usr/local/ispconfig/server/lib/php.ini ]; then fi cd /usr/local/ispconfig/server -/usr/bin/php -q \ +$(which php) -q \ -d disable_classes= \ -d disable_functions= \ -d open_basedir= \ /usr/local/ispconfig/server/cron.php + \ No newline at end of file diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php old mode 100755 new mode 100644 index dd8be5aa68791472b47fa90e76a32f6e4335b5e5..117af30b8a0c7ec3599b3abe2b05d30b697648dd --- a/server/lib/app.inc.php +++ b/server/lib/app.inc.php @@ -51,7 +51,7 @@ class app { */ if($conf['dbmaster_host'] != '' && ($conf['dbmaster_host'] != $conf['db_host'] || ($conf['dbmaster_host'] == $conf['db_host'] && $conf['dbmaster_database'] != $conf['db_database']))) { - $this->dbmaster = new db($conf['dbmaster_host'], $conf['dbmaster_user'], $conf['dbmaster_password'], $conf['dbmaster_database'], $conf['dbmaster_port']); + $this->dbmaster = new db($conf['dbmaster_host'], $conf['dbmaster_user'], $conf['dbmaster_password'], $conf['dbmaster_database'], $conf['dbmaster_port'], $conf['dbmaster_client_flags']); } else { $this->dbmaster = $this->db; } diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php index 9b601d90b341d5f7722da5468a55e74d1961da24..b2be236fa15313adb06343fd9471bb60cc0d48a4 100644 --- a/server/lib/classes/aps_installer.inc.php +++ b/server/lib/classes/aps_installer.inc.php @@ -559,7 +559,7 @@ class ApsInstaller extends ApsBase $shell_ret_str = implode("\n", $shell_ret); // Although $shell_retcode might be 0, there can be PHP errors. Filter them: - if(substr_count($shell_ret_str, 'Warning: ') > 0) $shell_retcode = 1; + if(stripos($shell_ret_str,'error: ')!==false)$shell_retcode=1; // If an error has occurred, the return code is != 0 if($shell_retcode != 0) throw new Exception($shell_ret_str); diff --git a/server/lib/classes/cron.d/100-monitor_openvz.inc.php b/server/lib/classes/cron.d/100-monitor_openvz.inc.php index 30b51b4b5fb50242648f9b66be66c08d9a01ea6e..adc092ec95eb72d96b563202c5607f47c5f0ef64 100644 --- a/server/lib/classes/cron.d/100-monitor_openvz.inc.php +++ b/server/lib/classes/cron.d/100-monitor_openvz.inc.php @@ -69,7 +69,7 @@ class cronjob_monitor_openvz extends cronjob { /* Fetch the data into a array */ - $app->load(openvz_tools); + $app->load('openvz_tools'); $openVzTools = new openvz_tools(); $data = $openVzTools->getOpenVzVeInfo(); @@ -98,7 +98,7 @@ class cronjob_monitor_openvz extends cronjob { /* Fetch the data into a array */ - $app->load(openvz_tools); + $app->load('openvz_tools'); $openVzTools = new openvz_tools(); $data = $openVzTools->getOpenVzVeBeanCounter(); diff --git a/server/lib/classes/cron.d/100-monitor_system_update.inc.php b/server/lib/classes/cron.d/100-monitor_system_update.inc.php index bc4f521073ff3d3813ad286af70c16945121fe09..f2faeeb551b3ed93c068f2ecf9119c1817cfc355 100644 --- a/server/lib/classes/cron.d/100-monitor_system_update.inc.php +++ b/server/lib/classes/cron.d/100-monitor_system_update.inc.php @@ -70,8 +70,8 @@ class cronjob_monitor_system_update extends cronjob { $type = 'system_update'; - /* This monitoring is only available on Debian or Ubuntu */ - if (file_exists('/etc/debian_version')) { + /* This monitoring is only available on Debian, Devuan or Ubuntu */ + if (file_exists('/etc/debian_version') || file_exists('/etc/devuan_version')) { /* * first update the "apt database" @@ -159,6 +159,18 @@ class cronjob_monitor_system_update extends cronjob { * Fetch the output */ $data['output'] = shell_exec('zypper lu'); + } else if (file_exists('/etc/redhat-release')) { + + if(shell_exec("yum list updates | awk 'p; /Updated Packages/ {p=1}'") == '') { + // There is nothing to update + $state = 'ok'; + } + else { + $state = 'info'; + } + // Fetch the output + $yumData = shell_exec('yum check-update'); + $data['output'] = $yumData; } else { /* * It is not Debian/Ubuntu, so there is no data and no state diff --git a/server/lib/classes/cron.inc.php b/server/lib/classes/cron.inc.php index 48ca09373901eb3c1cfaf977bdfcf1248531db64..3a8ba2c6a63fd5010d87007b84e2d26bf52e5494 100644 --- a/server/lib/classes/cron.inc.php +++ b/server/lib/classes/cron.inc.php @@ -264,9 +264,10 @@ class cron { if(!array_key_exists($sField, $this->_aValidValues)) return false; reset($this->_aValidValues[$sField]); - while(($cur = each($this->_aValidValues[$sField])) !== false) { - if($bIncludeCurrent == true && $cur['value'] >= $iValue) return $cur['value']; - elseif($cur['value'] > $iValue) return $cur['value']; + + foreach($this->_aValidValues[$sField] as $key => $value) { + if($bIncludeCurrent == true && $value >= $iValue) return $value; + elseif($value > $iValue) return $value; } return reset($this->_aValidValues[$sField]); } diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index 9b34dc4c1f3f4d3953fcd42ea8db9ec028dbee14..9a7968caea5ef3e004a7727c0b81ba1acc2c30eb 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -64,7 +64,7 @@ class db */ // constructor - public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL, $port = NULL) { + public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL, $port = NULL, $flags = NULL) { global $app, $conf; $this->dbHost = $host ? $host : $conf['db_host']; @@ -74,15 +74,13 @@ class db $this->dbPass = $pass ? $pass : $conf['db_password']; $this->dbCharset = $conf['db_charset']; $this->dbNewLink = $conf['db_new_link']; - $this->dbClientFlags = $conf['db_client_flags']; + $this->dbClientFlags = $flags ? $flags : $conf['db_client_flags']; + $this->_iConnId = mysqli_init(); - $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort); - $try = 0; - while((!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5) { - if($try > 0) sleep(1); - - $try++; - $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort); + mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort, NULL, $this->dbClientFlags); + for($try=0;(!is_object($this->_iConnId) || mysqli_connect_error()) && $try < 5;++$try) { + sleep($try); + mysqli_real_connect($this->_iConnId, $this->dbHost, $this->dbUser, $this->dbPass, '', (int)$this->dbPort, NULL, $this->dbClientFlags); } if(!is_object($this->_iConnId) || mysqli_connect_error()) { @@ -197,7 +195,7 @@ class db $try++; $ok = mysqli_ping($this->_iConnId); if(!$ok) { - if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort)) { + if(!mysqli_real_connect(mysqli_init(), $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName, (int)$this->dbPort, NULL, $this->dbClientFlags)) { if($this->errorNumber == '111') { // server is not available if($try > 9) { diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php index 9f7580fee1e105bb752799c37592ddff073b7410..577fd4eb2bdb6d66026d3b482410e4f9fe6817b4 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -221,6 +221,21 @@ class monitor_tools { } } + //** Devuan + elseif(file_exists('/etc/devuan_version')) { + if(false !== strpos(trim(file_get_contents('/etc/devuan_version')), 'jessie')) { + $distname = 'Devuan'; + $distver = 'Jessie'; + $distid = 'debian60'; + $distbaseid = 'debian'; + } elseif(false !== strpos(trim(file_get_contents('/etc/devuan_version')), 'ceres')) { + $distname = 'Devuan'; + $distver = 'Testing'; + $distid = 'debiantesting'; + $distbaseid = 'debian'; + } + } + //** OpenSuSE elseif(file_exists('/etc/SuSE-release')) { if(stristr(file_get_contents('/etc/SuSE-release'), '11.0')) { @@ -279,12 +294,12 @@ class monitor_tools { $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS release 5')) { $distname = 'CentOS'; - $distver = 'Unknown'; + $distver = '5'; $distid = 'centos53'; $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) { $distname = 'CentOS'; - $distver = 'Unknown'; + $distver = '6'; $distid = 'centos53'; $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS Linux release 7')) { @@ -464,6 +479,8 @@ class monitor_tools { if (@is_file('/etc/debian_version')) { $dist = 'debian'; + } elseif (@is_file('/etc/devuan_version')) { + $dist = 'devuan'; } elseif (@is_file('/etc/redhat-release')) { $dist = 'redhat'; } elseif (@is_file('/etc/SuSE-release')) { @@ -476,6 +493,8 @@ class monitor_tools { case 'log_mail': if ($dist == 'debian') { $logfile = '/var/log/mail.log'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/mail.log'; } elseif ($dist == 'redhat') { $logfile = '/var/log/maillog'; } elseif ($dist == 'suse') { @@ -487,6 +506,8 @@ class monitor_tools { case 'log_mail_warn': if ($dist == 'debian') { $logfile = '/var/log/mail.warn'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/mail.warn'; } elseif ($dist == 'redhat') { $logfile = '/var/log/maillog'; } elseif ($dist == 'suse') { @@ -498,6 +519,8 @@ class monitor_tools { case 'log_mail_err': if ($dist == 'debian') { $logfile = '/var/log/mail.err'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/mail.err'; } elseif ($dist == 'redhat') { $logfile = '/var/log/maillog'; } elseif ($dist == 'suse') { @@ -509,6 +532,8 @@ class monitor_tools { case 'log_messages': if ($dist == 'debian') { $logfile = '/var/log/syslog'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/syslog'; } elseif ($dist == 'redhat') { $logfile = '/var/log/messages'; } elseif ($dist == 'suse') { @@ -520,6 +545,8 @@ class monitor_tools { case 'log_ispc_cron': if ($dist == 'debian') { $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; + } elseif ($dist == 'devuan') { + $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; } elseif ($dist == 'redhat') { $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; } elseif ($dist == 'suse') { @@ -531,6 +558,8 @@ class monitor_tools { case 'log_freshclam': if ($dist == 'debian') { $logfile = '/var/log/clamav/freshclam.log'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/clamav/freshclam.log'; } elseif ($dist == 'redhat') { $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log'); } elseif ($dist == 'suse') { @@ -542,6 +571,8 @@ class monitor_tools { case 'log_clamav': if ($dist == 'debian') { $logfile = '/var/log/clamav/clamav.log'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/clamav/clamav.log'; } elseif ($dist == 'redhat') { $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog'); } elseif ($dist == 'suse') { @@ -553,6 +584,8 @@ class monitor_tools { case 'log_fail2ban': if ($dist == 'debian') { $logfile = '/var/log/fail2ban.log'; + } elseif ($dist == 'devuan') { + $logfile = '/var/log/fail2ban.log'; } elseif ($dist == 'redhat') { $logfile = '/var/log/fail2ban.log'; } elseif ($dist == 'suse') { @@ -567,6 +600,8 @@ class monitor_tools { case 'log_ispconfig': if ($dist == 'debian') { $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; + } elseif ($dist == 'devuan') { + $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; } elseif ($dist == 'redhat') { $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; } elseif ($dist == 'suse') { diff --git a/server/mods-available/dns_module.inc.php b/server/mods-available/dns_module.inc.php index d3c13031c0829e3899fc4cf3f7c973483a4af263..2983a06755a0514edfa71d7c244b22a6e142a36f 100644 --- a/server/mods-available/dns_module.inc.php +++ b/server/mods-available/dns_module.inc.php @@ -126,6 +126,10 @@ class dns_module { $daemon = ''; if(is_file($conf['init_scripts'] . '/' . 'bind9')) { $daemon = 'bind9'; + }elseif(is_file($conf['init_scripts'] . '/' . 'named-chroot')) { + $daemon = 'named-chroot'; + }elseif(is_file('/usr/lib/systemd/system/named-chroot.service')) { + $daemon = 'named-chroot'; } else { $daemon = 'named'; } diff --git a/server/mods-available/mail_module.inc.php b/server/mods-available/mail_module.inc.php index bc6d2901457169db191ef871c8acbabff74c03a1..8460d5d96a6f1a7b58cdee2837840f72378e5038 100644 --- a/server/mods-available/mail_module.inc.php +++ b/server/mods-available/mail_module.inc.php @@ -55,7 +55,10 @@ class mail_module { 'mail_content_filter_delete', 'mail_mailinglist_insert', 'mail_mailinglist_update', - 'mail_mailinglist_delete'); + 'mail_mailinglist_delete', + 'mail_ml_member_insert', + 'mail_ml_member_update', + 'mail_ml_member_delete'); //* This function is called during ispconfig installation to determine // if a symlink shall be created for this plugin. @@ -102,6 +105,7 @@ class mail_module { $app->modules->registerTableHook('mail_get', 'mail_module', 'process'); $app->modules->registerTableHook('mail_content_filter', 'mail_module', 'process'); $app->modules->registerTableHook('mail_mailinglist', 'mail_module', 'process'); + $app->modules->registerTableHook('mail_ml_membership', 'mail_module', 'process'); } @@ -154,6 +158,11 @@ class mail_module { if($action == 'u') $app->plugins->raiseEvent('mail_mailinglist_update', $data); if($action == 'd') $app->plugins->raiseEvent('mail_mailinglist_delete', $data); break; + case 'mail_ml_membership': + if($action == 'i') $app->plugins->raiseEvent('mail_ml_member_insert', $data); + if($action == 'u') $app->plugins->raiseEvent('mail_ml_member_update', $data); + if($action == 'd') $app->plugins->raiseEvent('mail_ml_member_delete', $data); + break; } // end switch } // end function diff --git a/server/mods-available/remoteaction_core_module.inc.php b/server/mods-available/remoteaction_core_module.inc.php index 807de5060ab28bfbee5257760b812e60ba65a655..15e9d279e9e4952a405e937859a60add020afe3e 100644 --- a/server/mods-available/remoteaction_core_module.inc.php +++ b/server/mods-available/remoteaction_core_module.inc.php @@ -172,16 +172,17 @@ class remoteaction_core_module { /* * Do the update */ - exec("aptitude update"); - exec("aptitude safe-upgrade -y"); + //Guess this is not wanted here? + //exec("aptitude update"); + //exec("aptitude safe-upgrade -y"); //TODO : change this when distribution information has been integrated into server record if(file_exists('/etc/gentoo-release')) { exec("glsa-check -f --nocolor affected"); } else { - exec("aptitude update"); - exec("aptitude safe-upgrade -y"); + exec("apt-get update"); + exec("apt-get -y upgrade"); } /* diff --git a/server/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php index aecec10579e37e1b4160dc2ac57d924f12936f49..e085c28a947804a22ad3e0c0b97fd6ecf41c3017 100644 --- a/server/mods-available/web_module.inc.php +++ b/server/mods-available/web_module.inc.php @@ -203,7 +203,9 @@ class web_module { $daemon = $web_config['server_type']; break; default: - if(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) { + if(is_file($conf['init_scripts'] . '/' . 'httpd24-httpd') || is_dir('/opt/rh/httpd24/root/etc/httpd')) { + $daemon = 'httpd24-httpd'; + } elseif(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) { $daemon = 'httpd'; } else { $daemon = 'apache2'; diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 1a802bcf96dd8078f62c7df8032dd5dc49e3da90..e7718b0c1c855e060f9cbe7dc2818b61f6632b4f 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -643,7 +643,7 @@ class apache2_plugin { //* Unmount the old log directory bfore we move the log dir //exec('fuser -km '.escapeshellcmd($old_dir.'/log')); - exec('umount '.escapeshellcmd($data['old']['document_root'].'/log')); + exec('umount -l '.escapeshellcmd($data['old']['document_root'].'/log')); //* Create new base directory, if it does not exist yet if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir); @@ -733,7 +733,7 @@ class apache2_plugin { //* Unmount log directory //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder)); - exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder)); + exec('umount -l '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder)); } //* Create the log dir if nescessary and mount it @@ -1173,6 +1173,7 @@ class apache2_plugin { || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain || $this->update_letsencrypt == true )) { + $success = $app->letsencrypt->request_certificates($data); if($success) { /* we don't need to store it. @@ -1189,7 +1190,7 @@ class apache2_plugin { $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']); - } + } } if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1; @@ -1211,6 +1212,7 @@ class apache2_plugin { $tpl->setVar($vhost_data); $tpl->setVar('apache_version', $app->system->getapacheversion()); + $tpl->setVar('apache_full_version', $app->system->getapacheversion(true)); // Rewrite rules $rewrite_rules = array(); @@ -1276,7 +1278,7 @@ class apache2_plugin { unset($client); unset($aa_search); unset($aa_replace); - $server_alias[] .= $auto_alias.' '; + $server_alias[] .= $auto_alias; } // get alias domains (co-domains and subdomains) @@ -1284,23 +1286,23 @@ class apache2_plugin { $alias_seo_redirects = array(); switch($data['new']['subdomain']) { case 'www': - $server_alias[] = 'www.'.$data['new']['domain'].' '; + $server_alias[] = 'www.'.$data['new']['domain']; break; case '*': - $server_alias[] = '*.'.$data['new']['domain'].' '; + $server_alias[] = '*.'.$data['new']['domain']; break; } if(is_array($aliases)) { foreach($aliases as $alias) { switch($alias['subdomain']) { case 'www': - $server_alias[] .= 'www.'.$alias['domain'].' '.$alias['domain'].' '; + $server_alias[] .= 'www.'.$alias['domain'].' '.$alias['domain']; break; case '*': - $server_alias[] .= '*.'.$alias['domain'].' '.$alias['domain'].' '; + $server_alias[] .= '*.'.$alias['domain'].' '.$alias['domain']; break; default: - $server_alias[] .= $alias['domain'].' '; + $server_alias[] .= $alias['domain']; break; } $app->log('Add server alias: '.$alias['domain'], LOGLEVEL_DEBUG); @@ -1367,22 +1369,18 @@ class apache2_plugin { } //* If we have some alias records - if(count($server_alias) > 0) { - $server_alias_str = ''; - $n = 0; - - // begin a new ServerAlias line after 30 alias domains - foreach($server_alias as $tmp_alias) { - if($n % 30 == 0) $server_alias_str .= "\n ServerAlias "; - $server_alias_str .= $tmp_alias; - } - unset($tmp_alias); - - $tpl->setVar('alias', trim($server_alias_str)); + if($server_alias) { + //* begin a new ServerAlias line after 32 alias domains to avoid apache bugs + $server_alias_str = 'ServerAlias '.$server_alias[0]; + for($n=1;$nsetVar('alias', $server_alias_str); + unset($server_alias_str); + unset($n); } else { $tpl->setVar('alias', ''); } - + if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0 || $data['new']['rewrite_to_https'] == 'y') { @@ -1422,6 +1420,7 @@ class apache2_plugin { $fcgi_tpl = new tpl(); $fcgi_tpl->newTemplate('php-fcgi-starter.master'); $fcgi_tpl->setVar('apache_version', $app->system->getapacheversion()); + $fcgi_tpl->setVar('apache_full_version', $app->system->getapacheversion(true)); // Support for multiple PHP versions (FastCGI) if(trim($data['new']['fastcgi_php_version']) != ''){ @@ -1561,6 +1560,7 @@ class apache2_plugin { $cgi_tpl = new tpl(); $cgi_tpl->newTemplate('php-cgi-starter.master'); $cgi_tpl->setVar('apache_version', $app->system->getapacheversion()); + $cgi_tpl->setVar('apache_full_version', $app->system->getapacheversion(true)); // This works because PHP "rewrites" a symlink to the physical path $php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir']; @@ -1792,33 +1792,9 @@ class apache2_plugin { } else { // if no output is given, check again $webserver_binary = ''; - exec('which apache2ctl', $webserver_check_output, $webserver_check_retval); + exec('which apache2ctl apache2 httpd2 httpd apache 2>/dev/null', $webserver_check_output, $webserver_check_retval); if($webserver_check_retval == 0){ - $webserver_binary = 'apache2ctl'; - } else { - unset($webserver_check_output, $webserver_check_retval); - exec('which apache2', $webserver_check_output, $webserver_check_retval); - if($webserver_check_retval == 0){ - $webserver_binary = 'apache2'; - } else { - unset($webserver_check_output, $webserver_check_retval); - exec('which httpd2', $webserver_check_output, $webserver_check_retval); - if($webserver_check_retval == 0){ - $webserver_binary = 'httpd2'; - } else { - unset($webserver_check_output, $webserver_check_retval); - exec('which httpd', $webserver_check_output, $webserver_check_retval); - if($webserver_check_retval == 0){ - $webserver_binary = 'httpd'; - } else { - unset($webserver_check_output, $webserver_check_retval); - exec('which apache', $webserver_check_output, $webserver_check_retval); - if($webserver_check_retval == 0){ - $webserver_binary = 'apache'; - } - } - } - } + $webserver_binary = reset($webserver_check_output); } if($webserver_binary != ''){ exec($webserver_binary.' -t 2>&1', $tmp_output, $tmp_retval); @@ -1962,12 +1938,12 @@ class apache2_plugin { foreach($log_folders as $log_folder){ //if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); - exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); + exec('umount -l '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); } } else { //if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); - exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null'); + exec('umount -l '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); } // remove letsencrypt if it exists (renew will always fail otherwise) @@ -2222,6 +2198,7 @@ class apache2_plugin { $tpl = new tpl(); $tpl->newTemplate('apache_ispconfig.conf.master'); $tpl->setVar('apache_version', $app->system->getapacheversion()); + $tpl->setVar('apache_full_version', $app->system->getapacheversion(true)); $records = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ? AND virtualhost = 'y'", $conf['server_id']); $records_out= array(); @@ -2755,80 +2732,54 @@ class apache2_plugin { $in = fopen($fileName, 'r'); $output = ''; $inWebdavSection = false; - - /* - * read line by line and search for the username and authname - */ + //* read line by line and search for the username and authname while ($line = fgets($in)) { - /* - * is the "replace-comment" found... - */ + //* is the "replace-comment" found... if (trim($line) == '# WEBDAV BEGIN') { - /* - * The begin of the webdav - section is found, so ignore all lines til the end is found - */ + //* The begin of the webdav - section is found, so ignore all lines til the end is found $inWebdavSection = true; - - $output .= " # WEBDAV BEGIN\n"; - - /* - * add all the webdav-dirs to the webdav-section - */ + $output .= "# WEBDAV BEGIN\n"; + //* add all the webdav-dirs to the webdav-section $files = @scandir($webdavRoot); if(is_array($files)) { foreach($files as $file) { if (substr($file, strlen($file) - strlen('.htdigest')) == '.htdigest' && preg_match("/^[a-zA-Z0-9\-_\.]*$/", $file)) { - /* - * found a htdigest - file, so add it to webdav - */ + //* found a htdigest - file, so add it to webdav $fn = substr($file, 0, strlen($file) - strlen('.htdigest')); $output .= "\n"; - // $output .= " Alias /" . $fn . ' ' . $webdavRoot . '/' . $fn . "\n"; - // $output .= " \n"; - $output .= " Alias /webdav/" . $fn . ' ' . $webdavRoot . '/' . $fn . "\n"; - $output .= " \n"; - $output .= " DAV On\n"; - $output .= ' BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On'."\n"; - $output .= " AuthType Digest\n"; + $output .= "Alias /webdav/$fn $webdavRoot/$fn\n"; + $output .= "\n"; + $output .= "DAV On\n"; + $output .= "BrowserMatch MSIE AuthDigestEnableQueryStringHack=On\n"; + $output .= "AuthType Digest\n"; if($fn != '' && $fn != '/') { $output .= " AuthName \"" . $fn . "\"\n"; } else { $output .= " AuthName \"Restricted Area\"\n"; } - $output .= " AuthUserFile " . $webdavRoot . '/' . $file . "\n"; - $output .= " Require valid-user \n"; - $output .= " Options +Indexes \n"; - $output .= " Order allow,deny \n"; - $output .= " Allow from all \n"; - $output .= " \n"; + $output .= "AuthUserFile $webdavRoot/$file\n"; + $output .= "Require valid-user\n"; + $output .= "Options +Indexes\n"; + if($app->system->getapacheversion()<=2.2) + $output .= "Order allow,deny\nAllow from all\n"; + $output .= "\n"; } } } } - /* - * is the "replace-comment-end" found... - */ + //* is the "replace-comment-end" found... if (trim($line) == '# WEBDAV END') { - /* - * The end of the webdav - section is found, so stop ignoring - */ + //* The end of the webdav - section is found, so stop ignoring $inWebdavSection = false; } - - /* - * Write the line to the output, if it is not in the section - */ + //* Write the line to the output, if it is not in the section if (!$inWebdavSection) { $output .= $line; } } fclose($in); - - /* - * Now lets write the new file - */ + //* Now lets write the new file $app->system->file_put_contents($fileName, $output); - } //* Update the awstats configuration file @@ -3009,6 +2960,7 @@ class apache2_plugin { $tpl = new tpl(); $tpl->newTemplate('php_fpm_pool.conf.master'); $tpl->setVar('apache_version', $app->system->getapacheversion()); + $tpl->setVar('apache_full_version', $app->system->getapacheversion(true)); if($data['new']['php_fpm_use_socket'] == 'y'){ $use_tcp = 0; @@ -3279,37 +3231,35 @@ class apache2_plugin { if(substr($web['domain'], 0, 2) === '*.') $web['subdomain'] = '*'; if($web['subdomain'] == 'www' || $web['subdomain'] == '*'){ + $domain = str_replace('.', '\.', $web['domain']); if($web['seo_redirect'] == 'non_www_to_www'){ - $seo_redirects[$prefix.'seo_redirect_origin_domain'] = str_replace('.', '\.', $web['domain']); + $seo_redirects[$prefix.'seo_redirect_origin_domain'] = $domain; $seo_redirects[$prefix.'seo_redirect_target_domain'] = 'www.'.$web['domain']; $seo_redirects[$prefix.'seo_redirect_operator'] = ''; } if($web['seo_redirect'] == '*_domain_tld_to_www_domain_tld'){ - // ^(example\.com|(?!\bwww\b)\.example\.com)$ - // ^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$ - $seo_redirects[$prefix.'seo_redirect_origin_domain'] = '('.str_replace('.', '\.', $web['domain']).'|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.'.str_replace('.', '\.', $web['domain']).'))'; + $seo_redirects[$prefix.'seo_redirect_origin_domain'] = $domain.'|.*\.'.$domain.'(? - +?> \ No newline at end of file diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index 23856f0c8661f3317f4beaa91f2fb20c92ac93c2..edf7b93d9f1ea62f8b314a62b73c77f15e5ca678 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -236,6 +236,17 @@ class bind_plugin { //* load the server configuration options $dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns'); + //* Get the bind version + $bind_caa = false; + $bind = explode("\n", shell_exec('which named bind')); + $bind = reset($bind); + if(is_executable($bind)) { + exec($bind . ' -v 2>&1', $tmp); + $bind_caa = @(version_compare($tmp[0],"BIND 9.9.6", '>='))?true:false; + unset($tmp); + } + unset($bind); + //* Write the domain file if(!empty($data['new']['id'])) { $tpl = new tpl(); @@ -253,6 +264,19 @@ class bind_plugin { if($records[$i]['type'] == 'TXT' && strlen($records[$i]['data']) > 255) { $records[$i]['data'] = implode('" "',str_split( $records[$i]['data'], 255)); } + //* CAA-Records - Type257 for older bind-versions + if($records[$i]['type'] == 'CAA' && !$bind_caa) { + $records[$i]['type'] = 'TYPE257'; + $temp = explode(' ', $records[$i]['data']); + unset($temp[0]); + $records[$i]['data'] = implode(' ', $temp); + $data_new = str_replace(array('"', ' '), '', $records[$i]['data']); + $hex = unpack('H*', $data_new); + $hex[1] = '0005'.strtoupper($hex[1]); + $length = strlen($hex[1])/2; + $data_new = "\# $length $hex[1]"; + $records[$i]['data'] = $data_new; + } } } $tpl->setLoop('zones', $records); diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php index 67ed2379fbbe554b595efceef048c761cbff2667..a12292495190c9ec1d8fe1f4c94d40216e18e188 100644 --- a/server/plugins-available/firewall_plugin.inc.php +++ b/server/plugins-available/firewall_plugin.inc.php @@ -205,7 +205,7 @@ class firewall_plugin { } else { //* Ensure that bastille firewall is stopped exec($conf['init_scripts'] . '/' . 'bastille-firewall stop 2>/dev/null'); - if(@is_file('/etc/debian_version')) exec('update-rc.d -f bastille-firewall remove'); + if(@is_file('/etc/debian_version') || @is_file('/etc/devuan_version')) exec('update-rc.d -f bastille-firewall remove'); //* Start ufw firewall exec('ufw --force enable'); @@ -258,12 +258,12 @@ class firewall_plugin { exec('ufw disable'); } exec($conf['init_scripts'] . '/' . 'bastille-firewall restart 2>/dev/null'); - if(@is_file('/etc/debian_version')) exec('update-rc.d bastille-firewall defaults'); + if(@is_file('/etc/debian_version') || @is_file('/etc/devuan_version')) exec('update-rc.d bastille-firewall defaults'); if(@is_file('/sbin/insserv')) exec('insserv -d bastille-firewall'); $app->log('Restarting the firewall', LOGLEVEL_DEBUG); } else { exec($conf['init_scripts'] . '/' . 'bastille-firewall stop 2>/dev/null'); - if(@is_file('/etc/debian_version')) exec('update-rc.d -f bastille-firewall remove'); + if(@is_file('/etc/debian_version') || @is_file('/etc/devuan_version')) exec('update-rc.d -f bastille-firewall remove'); if(@is_file('/sbin/insserv')) exec('insserv -r -f bastille-firewall'); $app->log('Stopping the firewall', LOGLEVEL_DEBUG); } @@ -275,7 +275,7 @@ class firewall_plugin { global $app, $conf; exec($conf['init_scripts'] . '/' . 'bastille-firewall stop 2>/dev/null'); - if(@is_file('/etc/debian_version')) exec('update-rc.d -f bastille-firewall remove'); + if(@is_file('/etc/debian_version') || @is_file('/etc/devuan_version')) exec('update-rc.d -f bastille-firewall remove'); if(@is_file('/sbin/insserv')) exec('insserv -r -f bastille-firewall'); $app->log('Stopping the firewall', LOGLEVEL_DEBUG); diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index 8275696620fbe1612aa78c816f9a9deaf1f11c7d..17f48efe26cfc1d16cd27082f352289b8e5b4182 100644 --- a/server/plugins-available/mail_plugin.inc.php +++ b/server/plugins-available/mail_plugin.inc.php @@ -213,11 +213,11 @@ class mail_plugin { if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) { $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html'); $html = true; + } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) { + $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt'); } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html')) { $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.html'); $html = true; - } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt')) { - $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.txt'); } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) { $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt'); } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) { diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php index 6f042e9070c0a53be51d99e7f7029a3558e5e332..26de6ca4af3b8aebc832d9ee8476b7fd363a1be5 100755 --- a/server/plugins-available/mail_plugin_dkim.inc.php +++ b/server/plugins-available/mail_plugin_dkim.inc.php @@ -196,8 +196,21 @@ class mail_plugin_dkim { $public_key=''; foreach($pubkey as $values) $public_key=$public_key.$values."\n"; /* save the DKIM Public-key in dkim-dir */ - if ( $app->system->file_put_contents($key_file.'.public', $public_key) ) + if ( $app->system->file_put_contents($key_file.'.public', $public_key) ) { $app->log('Saved DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG); + if($app->system->is_user('amavis')) { + $amavis_user='amavis'; + } elseif ($app->system->is_user('vscan')) { + $amavis_user='vscan'; + } + else { + $amavis_user=''; + } + if($amavis_user!='') { + $app->system->chown($key_file.'.private', $amavis_user); + $app->system->chmod($key_file.'.private', 0440); + } + } else $app->log('Unable to save DKIM Public to '.$key_domain.'.', LOGLEVEL_DEBUG); } else { $app->log('Unable to save DKIM Private-key to '.$key_file.'.private', LOGLEVEL_ERROR); diff --git a/server/plugins-available/mlmmj_plugin.inc.php b/server/plugins-available/mlmmj_plugin.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..7f1130e01c7455cbf9957ed68060109f2550326d --- /dev/null +++ b/server/plugins-available/mlmmj_plugin.inc.php @@ -0,0 +1,406 @@ + 10100 Srl +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. +*/ + +/* +templates/mail_mailinglist_list.htm +templates/mail_mailinglist_edit.htm + +list/mail_mailinglist.list.php + +form/mail_mailinglist.tform.php + +mailinglist.php +mail_mailinglist_list.php +mail_mailinglist_edit.php +mail_mailinglist_del.php +*/ + +class mlmmj_plugin { + const ML_ALIAS = 0; + const ML_TRANSPORT = 1; + const ML_VIRTUAL = 2; + const SECONDS_IN_DAY = 86400; + + private $plugin_name = 'mlmmj_plugin'; + private $class_name = 'mlmmj_plugin'; + private $mlmmj_config_dir = '/etc/mlmmj/'; + + /* + This function is called during ispconfig installation to determine + if a symlink shall be created for this plugin. + */ + function onInstall() { + global $conf; + + if($conf['services']['mail'] == true) return true; + else return false; + } + + //This function is called when the plugin is loaded + function onLoad() { + global $app; + + // Register for the events + $app->plugins->registerEvent('mail_mailinglist_insert', $this->plugin_name, 'list_insert'); + $app->plugins->registerEvent('mail_mailinglist_update', $this->plugin_name, 'list_update'); + $app->plugins->registerEvent('mail_mailinglist_delete', $this->plugin_name, 'list_delete'); + + $app->plugins->registerEvent('mail_ml_member_insert', $this->plugin_name, 'member_insert'); + $app->plugins->registerEvent('mail_ml_member_update', $this->plugin_name, 'member_update'); + $app->plugins->registerEvent('mail_ml_member_delete', $this->plugin_name, 'member_delete'); + + } + + function list_insert($event_name, $data) { + global $app, $conf; + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + + if($mlManager == 'mlmmj') { + $mlConf = $this->getMlConfig(); + $rec = $data['new']; + $listDomain = $rec['domain']; + $listName = $rec['listname']; + $listDir = $mlConf['spool_dir']."/$listDomain/$listName"; + $lang = 'en'; + $owner = $rec['email']; + + // Creating ML directories structure + mkdir("$listDir/incoming", 0755, true); + mkdir("$listDir/queue/discarded", 0755, true); + mkdir("$listDir/archive", 0755, true); + mkdir("$listDir/text", 0755, true); + mkdir("$listDir/subconf", 0755, true); + mkdir("$listDir/unsubconf", 0755, true); + mkdir("$listDir/bounce", 0755, true); + mkdir("$listDir/control", 0755, true); + mkdir("$listDir/moderation", 0755, true); + mkdir("$listDir/subscribers.d", 0755, true); + mkdir("$listDir/digesters.d", 0755, true); + mkdir("$listDir/requeue", 0755, true); + mkdir("$listDir/nomailsubs.d", 0755, true); + + // Creating ML index file + touch("$listDir/index"); + + // Creating default control files + // WARNING: Edit this section if default DB values will be modified! + touch("$listDir/control/nodigestsub"); + touch("$listDir/control/noarchive"); + file_put_contents("$listDir/control/owner", $owner); + file_put_contents("$listDir/control/listaddress", "$listName@$listDomain"); + file_put_contents("$listDir/control/prefix", "[$listName]"); + + // Copying language translations + if(!is_dir("/usr/share/mlmmj/text.skel/$lang")) $lang = 'en'; + foreach (glob("/usr/share/mlmmj/text.skel/$lang/*") as $filename) + copy($filename, "$listDir/text/".basename($filename)); + + // The mailinglist directory have to be owned by the user running the mailserver + $this->changeOwnership($listDir); + + // Creating alias entry + $this->addMapEntry("$listName: \"|/usr/bin/mlmmj-recieve -L $listDir/\"", self::ML_ALIAS); + + // Creating transport entry + $this->addMapEntry("$listDomain--$listName@localhost.mlmmj mlmmj:$listDomain/$listName", self::ML_TRANSPORT); + + // Creating virtual entry + $this->addMapEntry("$listName@$listDomain $listDomain--$listName@localhost.mlmmj", self::ML_VIRTUAL); + } + } + + // The purpose of this plugin is to rewrite the main.cf file + function list_update($event_name, $data) { + global $app, $conf; + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + + if($mlManager == 'mlmmj') { + $rec = $data['new']; + $mlConf = $this->getMlConfig(); + + $controlDir = "{$mlConf['spool_dir']}/{$rec['domain']}/{$rec['listname']}/control"; + + // Doesn't matter if the list is open or close, members can ALWAYS unsubscribe + if($rec['list_type'] == 'open') { + switch($rec['subscribe_policy']) { + case 'disabled': + touch("$controlDir/closedlistsub"); + @unlink("$controlDir/submod"); + @unlink("$controlDir/nosubconfirm"); + break; + case 'both': + touch("$controlDir/submod"); + case 'approval': + touch("$controlDir/nosubconfirm"); + @unlink("$controlDir/closedlistsub"); + break; + case 'none': + touch("$controlDir/nosubconfirm"); + @unlink("$controlDir/closedlistsub"); + break; + case 'confirm': + @unlink("$controlDir/nosubconfirm"); + @unlink("$controlDir/closedlistsub"); + @unlink("$controlDir/submod"); + break; + } + + switch($rec['posting_policy']) { + case 'closed': + touch("$controlDir/subonlypost"); + break; + case 'moderated': + touch("$controlDir/modnonsubposts"); + break; + case 'free': + @unlink("$controlDir/modnonsubposts"); + @unlink("$controlDir/subonlypost"); + break; + } + } elseif($rec['list_type'] == 'closed') { + touch("$controlDir/closedlistsub"); + touch("$controlDir/subonlypost"); + @unlink("$controlDir/modnonsubposts"); + @unlink("$controlDir/submod"); + @unlink("$controlDir/nosubconfirm"); + } + + if($rec['digestsub'] == 'y') { + @unlink("$controlDir/nodigestsub"); + if($rec['digesttext'] == 'y') @unlink("$controlDir/nodigesttext"); + else touch("$controlDir/nodigesttext"); + file_put_contents("$controlDir/digestinterval", $rec['digestinterval']*self::SECONDS_IN_DAY); + file_put_contents("$controlDir/digestmaxmails", $rec['digestmaxmails']); + } else { + touch("$controlDir/nodigestsub"); + @unlink("$controlDir/nodigesttext"); + @unlink("$controlDir/digestinterval"); + @unlink("$controlDir/digestmaxmails"); + } + + if($rec['subject_prefix']) + file_put_contents("$controlDir/prefix", $rec['subject_prefix']); + else @unlink("$controlDir/prefix"); + + if($rec['mail_footer']) + file_put_contents("$controlDir/footer", $rec['mail_footer']); + else @unlink("$controlDir/footer"); + + if($rec['archive'] == 'y') + @unlink("$controlDir/noarchive"); + else + touch("$controlDir/noarchive"); + + $this->changeOwnership("$controlDir/*"); + } + } + + function list_delete($event_name, $data) { + global $app, $conf; + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + + if($mlManager == 'mlmmj') { + $mlConf = $this->getMlConfig(); + $rec = $data['old']; + $listDomain = $rec['domain']; + $listName = $rec['listname']; + $listDir = $mlConf['spool_dir']."/$listDomain/$listName"; + + // Remove ML directory structure + $this->rmdirR($listDir); + @rmdir($mlConf['spool_dir']."/$listDomain"); + + // Removing alias entry + $this->delMapEntry("$listName: \"|/usr/bin/mlmmj-recieve -L $listDir/\"", self::ML_ALIAS); + + // Removing transport entry + $this->delMapEntry("$listDomain--$listName@localhost.mlmmj mlmmj:$listDomain/$listName", self::ML_TRANSPORT); + + // Removing virtual entry + $this->delMapEntry("$listName@$listDomain $listDomain--$listName@localhost.mlmmj", self::ML_VIRTUAL); + } + } + + function member_insert($event_name, $data) { + global $app, $conf; + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + + if($mlManager == 'mlmmj') { + $mlConf = $this->getMlConfig(); + + $rec = $data['new']; + + $sql = "SELECT * FROM mail_mailinglist WHERE mailinglist_id = ?"; + $ml = $app->db->queryOneRecord($sql, $rec['mailinglist_id']); + if($ml['mailinglist_id']) { + $listDomain = $ml['domain']; + $listName = $ml['listname']; + $listDir = $mlConf['spool_dir']."/$listDomain/$listName"; + } + + $welcome = ($rec['welcome_msg'] == 'y')?'-c':''; + $command = "/usr/bin/mlmmj-sub -q -s -L $listDir $welcome -a ".$rec['email']; + exec("nohup $command>/dev/null 2>&1"); + } + } + + function member_update($event_name, $data) { + //TODO: Implement something usefull on update event (e.g. change to digest subscription) + } + + function member_delete($event_name, $data) { + global $app, $conf; + + $mlManager = $app->getconf->get_server_config($conf['server_id'], 'mail')['mailinglist_manager']; + + if($mlManager == 'mlmmj') { + $mlConf = $this->getMlConfig(); + + $rec = $data['old']; + + $sql = "SELECT * FROM mail_mailinglist WHERE mailinglist_id = ?"; + $ml = $app->db->queryOneRecord($sql, $rec['mailinglist_id']); + if($ml['mailinglist_id']) { + $listDomain = $ml['domain']; + $listName = $ml['listname']; + $listDir = $mlConf['spool_dir']."/$listDomain/$listName"; + } + + $goodbye = ($rec['goodbye_msg'] == 'y')?'-c':''; + $command = "/usr/bin/mlmmj-unsub -q -s -L $listDir $goodbye -a ".$rec['email']; + exec("nohup $command>/dev/null 2>&1"); + } + } + + private function getMlConfig() { + $mlConfig = @parse_ini_file($this->mlmmj_config_dir.'mlmmj.conf'); + + // Force PHP7 to use # to mark comments + if(PHP_MAJOR_VERSION >= 7 && is_array($mlConfig)) + $mlConfig = array_filter($mlConfig, function($v){return(substr($v,0,1)!=='#');}, ARRAY_FILTER_USE_KEY); + + return $mlConfig; + } + + private function changeOwnership($path, $recursive=true) { + if(basename($path) == '*') $path = dirname($path); + + if(is_dir($path)) { + if($objs = glob($path."/*")) { + foreach($objs as $obj) { + chown($obj, 'mlmmj'); + chgrp($obj, 'mlmmj'); + if(is_dir($obj) && $recursive) $this->changeOwnership($obj); + } + } + } + + return chown($path, 'mlmmj') && chgrp($path, 'mlmmj'); + } + + private function rmdirR($path) { + if(is_dir($path) === true) { + $files = array_diff(scandir($path), array('.', '..')); + foreach($files as $file) $this->rmdirR(realpath($path) . '/' . $file); + + return rmdir($path); + } elseif(is_file($path) === true) return unlink($path); + + return false; + } + + private function addMapEntry($directive, $type) { + + $destFile = $this->mlmmj_config_dir; + switch($type) { + case self::ML_ALIAS: + $destFile .= 'aliases'; + $command = 'postalias'; + break; + case self::ML_TRANSPORT: + $destFile .= 'transport'; + $command = 'postmap'; + break; + case self::ML_VIRTUAL: + $destFile .= 'virtual'; + $command = 'postmap'; + break; + } + + $lines = file($destFile, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); + $lines[] = $directive; + + file_put_contents($destFile, implode("\n", array_unique($lines))); + exec("nohup /usr/sbin/$command $destFile >/dev/null 2>&1 &"); + } + + private function delMapEntry($directive, $type) { + + $destFile = $this->mlmmj_config_dir; + switch($type) { + case self::ML_ALIAS: + $destFile .= 'aliases'; + $command = 'postalias'; + break; + case self::ML_TRANSPORT: + $destFile .= 'transport'; + $command = 'postmap'; + break; + case self::ML_VIRTUAL: + $destFile .= 'virtual'; + $command = 'postmap'; + break; + } + + $lines = file($destFile, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); + + foreach(array_keys($lines, $directive) as $key) unset($lines[$key]); + + file_put_contents($destFile, implode("\n", array_unique($lines))); + exec("nohup /usr/sbin/$command $destFile >/dev/null 2>&1 &"); + } + + private function checkSys() { + if(!is_dir($this->mlmmj_config_dir)) mkdir($this->mlmmj_config_dir, 0755); + if(!file_exists($this->mlmmj_config_dir.'mlmmj.conf')) { + file_put_contents($this->mlmmj_config_dir.'mlmmj.conf', 'skel_dir = /usr/share/mlmmj/text.skel'); + file_put_contents($this->mlmmj_config_dir.'mlmmj.conf', 'spool_dir = /var/spool/mlmmj', FILE_APPEND); + } + if(!file_exists($this->mlmmj_config_dir.'aliases')) touch($this->mlmmj_config_dir.'aliases'); + if(!file_exists($this->mlmmj_config_dir.'transport')) touch($this->mlmmj_config_dir.'transport'); + if(!file_exists($this->mlmmj_config_dir.'virtual')) touch($this->mlmmj_config_dir.'virtual'); + } +} // end class + +?> diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php index 5ce6f934b810c64148b997690f57fc4263b41f9c..56a2512d4022bbc927a4d1f6ff0808620125cb55 100644 --- a/server/plugins-available/network_settings_plugin.inc.php +++ b/server/plugins-available/network_settings_plugin.inc.php @@ -86,7 +86,7 @@ class network_settings_plugin { $server_config['ip_address'] != '0.0.0.0' && $server_config['gateway'] != '0.0.0.0') { - if (is_file('/etc/debian_version')) + if (is_file('/etc/debian_version') || is_file('/etc/devuan_version')) { copy('/etc/network/interfaces', '/etc/network/interfaces~'); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index daf953e2650063799c2f52e6642ab9c90183c06e..477eeaace0d54f261b2ef5f3a31464fccb944556 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1250,7 +1250,7 @@ class nginx_plugin { /* 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_action = '' WHERE domain_id = ?", $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']); diff --git a/server/plugins-available/server_services_plugin.inc.php b/server/plugins-available/server_services_plugin.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..29710a72852376cf3bb0d4b34676f506787447ae --- /dev/null +++ b/server/plugins-available/server_services_plugin.inc.php @@ -0,0 +1,155 @@ +plugins->registerEvent('server_insert', 'server_services_plugin', 'insert'); + $app->plugins->registerEvent('server_update', 'server_services_plugin', 'update'); + $app->plugins->registerEvent('server_delete', 'server_services_delete', 'delete'); + + } + + function insert($event_name, $data) { + + $this->update($event_name, $data); + + } + + function delete($event_name, $data) { + + $this->update($event_name, $data); + + } + + function update($event_name, $data) { + global $app, $conf; + + $app->uses('getconf'); + $old_services = array(); + $new_services = array(); + foreach($this->services as $service) { + $old_services[$service] = $data['old'][$service]; + $new_services[$service] = $data['new'][$service]; + } + $changed_services=array_diff_assoc($new_services,$old_services); + foreach($changed_services as $service => $value) { + switch($service) { + case 'mail_server': + $config = $app->getconf->get_server_config($conf['server_id'], 'mail'); + $plugins = @($config['pop3_imap_daemon'] == 'dovecot')?$this->dovecot_plugins:$this->courier_plugins; + $plugins = array_merge($plugins, $this->mail_plugins); + $this->change_state($plugins, $value, $config); + break; + case 'web_server': + $config = $app->getconf->get_server_config($conf['server_id'], 'web'); + $plugins = @($config['server_type'] == 'apache')?$this->apache_plugins:$this->nginx_plugins; + $plugins = array_merge($plugins, $this->web_plugins); + $this->change_state($plugins, $value, $config); + break; + case 'dns_server': + $config = $app->getconf->get_server_config($conf['server_id'], 'dns'); + $plugins = @(isset($config['bind_user']))?$this->bind_plugins:$this->powerdns_plugins; + $this->change_state($plugins, $value, $config); + break; + case 'db_server': + $this->change_state($this->db_plugins, $value, $config); + break; + case 'vserver_server': + $this->change_state($this->openvz_plugins, $value, $config); + break; + case 'xmpp_server': + $this->change_state($this->xmpp_plugins, $value, $config); + break; + } + } + + } + + function change_state($plugins, $value, $config) { + + $enabled_dir = '/usr/local/ispconfig/server/plugins-enabled/'; + $available_dir = '/usr/local/ispconfig/server/plugins-available/'; + + if($value == 0) { //* disable services + foreach($plugins as $plugin) { + if(is_link($enabled_dir.$plugin.'.inc.php')) { + unlink($enabled_dir.$plugin.'.inc.php'); + } + } + } + if ($value == 1) { //* enable services + foreach($plugins as $plugin) { + if(is_file($available_dir.$plugin.'.inc.php') && !is_link($enabled_dir.$plugin.'.inc.php')) { + symlink($available_dir.$plugin.'.inc.php', $enabled_dir.$plugin.'.inc.php'); + } + } + } + + } + +} // end class + + + +?> diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php index 587bd4f09a610c3ec496e1fa1edffe1e17e76b94..3f6ae3d8d195fdb11b9636966a4eb80dce4d8053 100644 --- a/server/plugins-available/software_update_plugin.inc.php +++ b/server/plugins-available/software_update_plugin.inc.php @@ -278,10 +278,10 @@ class software_update_plugin { global $app; //** Debian and compatible Linux distributions - if(file_exists('/etc/debian_version')) { - exec("apt-get update"); - exec("apt-get upgrade -y"); - $app->log('Execeuted Debian / Ubuntu update', LOGLEVEL_DEBUG); + if(file_exists('/etc/debian_version') || file_exists('/etc/devuan_version')) { + exec("aptitude update"); + exec("aptitude safe-upgrade -y"); + $app->log('Execeuted Debian / Devuan / Ubuntu update', LOGLEVEL_DEBUG); } //** Gentoo Linux