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/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..d7c70de8706139ff4497138f5076163460882ba5 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 92787bf428c441fdfae359ce967b6a813e42cd53..fdf83109180774a634922c994a92938f60484f5d 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/install.php b/install/install.php index b9d2f0641eb01b2a0226f3e5f53026e3be2e1684..1371bcbb17ac541b81e07962e79b7936d0dabc6d 100644 --- a/install/install.php +++ b/install/install.php @@ -178,6 +178,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 +284,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"]); + $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 +341,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 +434,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']) { @@ -552,7 +558,7 @@ if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPCon //** Customise the port ISPConfig runs on $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port'); $conf['interface_password'] = $inst->free_query('Admin password', 'admin','ispconfig_admin_password'); - if($conf['interface_password'] != 'admin') { + if(!AUTOINSTALL && $conf['interface_password'] != 'admin') { $check = false; do { unset($temp_password); @@ -622,6 +628,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/install.lib.php b/install/lib/install.lib.php index 3466d0b50c3110882edaae54cda916dff6167e27..476ac8fca1dfe4c5e2185e063d193ab3282bf213 100644 --- a/install/lib/install.lib.php +++ b/install/lib/install.lib.php @@ -218,7 +218,7 @@ function get_distname() { } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) { $distname = 'Debian'; $distver = 'Testing'; - $distid = 'debian60'; + $distid = 'debian90'; $distconfid = 'debiantesting'; $distbaseid = 'debian'; swriteln("Operating System: Debian Testing\n"); @@ -231,6 +231,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')) { @@ -959,4 +976,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 51361c3c690dbe56d8c218d4f44d7313839c9497..90124ff10cfb63d372dc3333562e837225c15baf 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; @@ -223,15 +224,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 = ''"); //** Create the database if(!$this->db->query('CREATE DATABASE IF NOT EXISTS ?? DEFAULT CHARACTER SET ?', $conf['mysql']['database'], $conf['mysql']['charset'])) { @@ -313,6 +307,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']; @@ -817,6 +812,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; @@ -1410,7 +1489,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.'~'); @@ -1461,11 +1540,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); @@ -1478,7 +1552,38 @@ 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'); + if(!$this->is_update) { + //* 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 7cf06ee044a24aa279bed471210b5224fad490f6..c4943d4facedab11ae8dfc4eea4d42794c141bd8 100644 --- a/install/lib/mysql.lib.php +++ b/install/lib/mysql.lib.php @@ -96,15 +96,16 @@ class db extends mysqli $this->_setCharset(); } - public function setDBData($host, $user, $password) { + public function setDBData($host, $port, $user, $password) { $this->dbHost = $host; + $this->dbPort = $port; $this->dbUser = $user; $this->dbPass = $password; } public function setDBName($name) { $this->dbName = $name; - $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass); + $this->_iConnId = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, '', $this->dbPort); if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) { $this->close(); $this->_sqlerror('Datenbank nicht gefunden / Database not found'); diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php index 7c30bc676793abb95162791b64c7ba5150b0fb01..603548ffd4c7a2ea89e48aa16988771875815bb9 100644 --- a/install/lib/update.lib.php +++ b/install/lib/update.lib.php @@ -123,14 +123,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 = ''"); //* Update $conf array with values from the server.ini that shall be preserved $tmp = $inst->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']); diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 0c91f1a724b8298da674210346cf8d6430532ac6..0e0ba294f4535e65bc4fb85152d7f312426d3ace 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -1,3 +1,17 @@ +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'; ALTER TABLE `web_domain` CHANGE `folder_directive_snippets` `folder_directive_snippets` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL; ALTER TABLE `web_domain` ADD `log_retention` INT NOT NULL DEFAULT '30' AFTER `https_port`; ALTER TABLE `web_domain` CHANGE `stats_type` `stats_type` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'awstats'; @@ -14,7 +28,36 @@ CHANGE `spam_modifies_subj` `spam_modifies_subj` ENUM('N','Y') CHARACTER SET utf CHANGE `warnvirusrecip` `warnvirusrecip` ENUM('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', CHANGE `warnbannedrecip` `warnbannedrecip` ENUM('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N', CHANGE `warnbadhrecip` `warnbadhrecip` ENUM('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N'; + +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`) +) 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', 'Comodo', 'comodoca.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GeoTrust (Symantec)', 'geotrust.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'N', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec', 'symantec.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Thawte (Symantec)', 'thawte.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 `dns_rr` CHANGE `data` `data` TEXT NOT NULL; ALTER TABLE `web_database` CHANGE `database_quota` `database_quota` INT(11) NULL DEFAULT NULL; ALTER TABLE `web_domain` ADD `log_retention` INT NOT NULL DEFAULT '30' ; -ALTER TABLE spamfilter_policy CHANGE spam_tag_level spam_tag_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_tag2_level spam_tag2_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_kill_level spam_kill_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_dsn_cutoff_level spam_dsn_cutoff_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_quarantine_cutoff_level spam_quarantine_cutoff_level DECIMAL(5,2) NULL DEFAULT NULL; \ No newline at end of file +ALTER TABLE spamfilter_policy CHANGE spam_tag_level spam_tag_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_tag2_level spam_tag2_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_kill_level spam_kill_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_dsn_cutoff_level spam_dsn_cutoff_level DECIMAL(5,2) NULL DEFAULT NULL, CHANGE spam_quarantine_cutoff_level spam_quarantine_cutoff_level DECIMAL(5,2) NULL DEFAULT NULL; diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 43cbc367bd5c6edb4f655ae4f21937da33d688ae..94961035ccac7b97b623ef9dea3861fc99488425 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,40 @@ 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`) +) 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', 'Comodo', 'comodoca.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'DigiCert', 'digicert.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Entrust', 'entrust.net', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'GeoTrust (Symantec)', 'geotrust.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Izenpe', 'izenpe.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Let''s Encrypt', 'letsencrypt.org', 'N', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Symantec', 'symantec.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'Thawte (Symantec)', 'thawte.com', 'Y', '', 0), +(NULL, 1, 1, 'riud', 'riud', '', 'Y', 'WoSign', 'wosign.com', 'Y', '', 0); + + -- -------------------------------------------------------- -- @@ -879,8 +913,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 ; @@ -1732,7 +1777,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`) @@ -1802,6 +1847,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 1b750c8724cb84dc75e776a4d4c49ea559d018d4..f206b94582b6819eb2619d55f8868f3e406a8d3a 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 @@ -133,9 +146,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..ffbb7c03deaf616f99a769e04b635b459ac954be 100644 --- a/install/tpl/apache_ispconfig.vhost.master +++ b/install/tpl/apache_ispconfig.vhost.master @@ -4,7 +4,7 @@ ###################################################### Listen -NameVirtualHost *: +NameVirtualHost *: > ServerAdmin webmaster@localhost @@ -76,7 +76,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/named.conf.options.master b/install/tpl/named.conf.options.master index f13976ffd6db31f72447c1d0d57be7d2935a556d..37182dfba98e2a137508c174eeff1aa47270d62b 100644 --- a/install/tpl/named.conf.options.master +++ b/install/tpl/named.conf.options.master @@ -22,6 +22,8 @@ options { dnssec-validation yes; dnssec-lookaside auto; + version "DNS managed by ISPConfig"; + 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 b32cf0189b0d8a0d433bad78bebdc5226655322b..6e85df7873596f31c8a2c25dcc3c88512cb8ba39 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -54,6 +54,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 230fa4db80e99d39a9a970a539fd3e6a0bffddf5..3228e0a7bb26aab06898b7d7094e1e0e15a0aa52 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]; @@ -275,7 +278,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"]); + $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; @@ -378,6 +381,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'); @@ -405,9 +414,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(); @@ -568,6 +575,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 99db77bdbf7a822f188613d8aee255bdc55bd669..39322b799e25d4e467b42d4aa06daaec1445f33c 100644 --- a/interface/lib/classes/aps_crawler.inc.php +++ b/interface/lib/classes/aps_crawler.inc.php @@ -568,6 +568,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( @@ -577,7 +580,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 8c06dd71a8f19a92c8c9c1b336500e0bfe2d08ac..cfca8aac9ebb34b312a9f1f1df1aeecc97dba5d7 100644 --- a/interface/lib/classes/db_mysql.inc.php +++ b/interface/lib/classes/db_mysql.inc.php @@ -75,14 +75,12 @@ class db extends mysqli $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()) { @@ -244,7 +242,7 @@ class db extends mysqli $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/remoting.inc.php b/interface/lib/classes/remoting.inc.php index 69ebac2e4c3bc628aee969470974861ba22cbe7b..24577b3b26141965a69594962b515bcfedf5c417 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -71,6 +71,8 @@ class remoting { { global $app, $conf; + $error = array(); + // Maintenance mode $app->uses('ini_parser,getconf'); $server_config_array = $app->getconf->get_global_config('misc'); @@ -80,70 +82,60 @@ class remoting { } if(empty($username)) { - throw new SoapFault('login_username_empty', 'The login username is empty.'); - return false; + $error = array('faultcode' => 'login_username_empty', 'faultstring' => 'The login username is empty.'); } if(empty($password)) { - throw new SoapFault('login_password_empty', 'The login password is empty.'); - return false; + $error = array('faultcode' => 'login_password_empty', 'faultstring' => 'The login password is empty.'); } //* Delete old remoting sessions $sql = "DELETE FROM remote_session WHERE tstamp < UNIX_TIMESTAMP()"; $app->db->query($sql); - if($client_login == true) { - $sql = "SELECT * FROM sys_user WHERE USERNAME = ?"; - $user = $app->db->queryOneRecord($sql, $username); - if($user) { - $saved_password = stripslashes($user['passwort']); + $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(substr($saved_password, 0, 3) == '$1$') { - //* The password is crypt-md5 encrypted - $salt = '$1$'.substr($saved_password, 3, 8).'$'; + if($alreadyfailed['times'] > 5) { + throw new SoapFault('error_user_too_many_logins', 'Too many failed logins'); + return false; + } - if(crypt(stripslashes($password), $salt) != $saved_password) { - throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); - return false; + 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(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; - } + // 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.'); + } - //* 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) { //* Create a remote user session //srand ((double)microtime()*1000000); $remote_session = md5(mt_rand().uniqid('ispco')); @@ -153,11 +145,57 @@ class remoting { $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.'); + $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) { + //* 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); + } else { + $error = array('faultcode' => 'login_failed', 'faultstring' => 'The login failed. Username or password wrong.'); + } + } + + } + + 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; } } @@ -552,4 +590,4 @@ class remoting { } -?> +?> \ No newline at end of file diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php index 923953adcdc4e3ab2b7b647711e577fb29437e80..1c96afb72857a4a5d9768ee2d4016269e10e99a4 100644 --- a/interface/lib/classes/tform_base.inc.php +++ b/interface/lib/classes/tform_base.inc.php @@ -541,7 +541,7 @@ class tform_base { foreach($field['value'] as $k => $v) { $checked = ($k == $val)?' CHECKED':''; //$out .= "\r\n"; - $out .= "\r\n"; + $out .= "\r\n"; $elementNo++; } } @@ -671,7 +671,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++; } } @@ -1022,13 +1022,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 156a52ca19ce26b80d66c8ab40baeb5c8577e927..03624037179552ad5101eb8116c76a5118490e41 100644 --- a/interface/lib/lang/br.lng +++ b/interface/lib/lang/br.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/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 259b66d9131568a993552b2a06c4db20524c5bec..b20e9358ecc0a6b6e8e588a5fd6cd23b0c2d38d6 100644 --- a/interface/lib/lang/cz.lng +++ b/interface/lib/lang/cz.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/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..506629c9459c28d3a5159288a09e30656d2468f7 100644 --- a/interface/lib/lang/es.lng +++ b/interface/lib/lang/es.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/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..5b898f84c667eaf5f298f87a29983b7f7a26053d 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -193,6 +193,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 +256,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 5cf56ca5372befe9de7d5de2c930d476d99b7bc8..9146056017e85a8ce9b352c180d569f3f74b1661 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -357,6 +357,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', @@ -608,6 +636,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 //################################# @@ -1574,7 +1608,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 72618657968a7642d32f8f35ef1607af82877fef..9e00f29f89584a8d7dfcf30c37f672e8d3354935 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', @@ -634,5 +646,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_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_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 ec12c14ef4f6216ec038137875bec901338b1b4b..d7d689986c8d108145537d3aec930e04e5c7adf5 100644 --- a/interface/web/admin/lib/lang/br_system_config.lng +++ b/interface/web/admin/lib/lang/br_system_config.lng @@ -81,4 +81,12 @@ $wb['default_dnsserver_txt'] = 'Servidor dns padrão'; $wb['default_slave_dnsserver_txt'] = 'Servidor dns secundário padrão'; $wb['default_dbserver_txt'] = 'Seridor de banco de dados padrão'; $wb['No'] = 'No'; +$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/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_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 6e5cec146d7a7dba80bde2f99d02ee32d89df5c6..a0aecd8984b7d4510d04e1fff9b6961f6235008b 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_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_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_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 018904cc7869779579b21f9118f53818d0ece9c6..d5f36ae252c4f80b5697917bec6f115d7784f20c 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 '; @@ -284,5 +289,6 @@ $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'; ?> 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_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_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_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_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_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_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_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index f9b0922e8c4e3e1bc5a5e75f38e9c343cd3ad555..7e7210d1fc13539c1153064992ba274ac48587ef 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,5 +281,6 @@ $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'; ?> 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_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_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_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_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_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_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_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_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 3156ca797a091c6dceed2a5e6affff3570fe0446..8775f0e41c851993599c434d034db225a3a579e9 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/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/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/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php index 01b731a2e4201e86920393d5eb6a98e79ff762fc..d181f0c63dc90a00daadb0cd8d815cc4d081a222 100644 --- a/interface/web/dns/form/dns_txt.tform.php +++ b/interface/web/dns/form/dns_txt.tform.php @@ -86,7 +86,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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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_caa.lng b/interface/web/dns/lib/lang/bg_dns_caa.lng new file mode 100644 index 0000000000000000000000000000000000000000..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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..21c02359f0aaa2e34a7df86f050da96cff76ed20 --- /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 b65fdf677cc5b4559fa0b063ef5874ef7c1b8946..22e36200e899454362aa78c10aa0ab49efb316b9 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 c47be675ef993f7afeec1668c1816d4af4db75a5..1ad0afc01b12fdebd1e11940d24090b979bf7e2d 100644 --- a/interface/web/dns/templates/dns_dmarc_edit.htm +++ b/interface/web/dns/templates/dns_dmarc_edit.htm @@ -158,6 +158,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 24a2fa2f7ef6ad5c0f8f71b707627272de5ab873..f7ef7d8a1d63ae0eadf40978c1aa137804090a16 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'; +?> \ No newline at end of file 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_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng index b7f3e21f987f2ca4016eeaf3834b4e5445983571..2abb6cf9068d4f593d6d3b0119a62452cd200f12 100755 --- a/interface/web/login/lib/lang/es_login_as.lng +++ b/interface/web/login/lib/lang/es_login_as.lng @@ -9,4 +9,6 @@ $wb['tcp_ports_error_regex'] = 'Caracteres no permitidos en la definición de pu $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['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/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..da43327d5105fdbcb57f2479798f52b820e194f3 100644 --- a/interface/web/login/lib/lang/pl.lng +++ b/interface/web/login/lib/lang/pl.lng @@ -21,14 +21,14 @@ $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 24c4f003c9ef4f9ebff5f3cc1c4269b13dbcfb11..643961861bcdf8d1549d47ed1bbbb5837ba76684 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"; @@ -151,4 +154,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 d5f6a0ab5bd719bf0de027a2f86f297c68c04759..341f8ad857d5061f6417543bfb4002d1edd7b69f 100644 --- a/interface/web/mail/form/mail_user_filter.tform.php +++ b/interface/web/mail/form/mail_user_filter.tform.php @@ -106,7 +106,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 968cfb2b0beca3992b1b0aee7d8bae4b0dea5c19..8f18000d2b7206f484c1ff00284b09085452c656 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..e951d18c6bdb33a96ec2a2868075b778a7d32eaf 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,5 @@ $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'; ?> 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..6bec7601c32f7c0277a0c4b44baf90167233cad2 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,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/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 5515670734700a4ec1c700085dadd0eb073df24e..96706b3271f9231f1bcd3a465da737038f42f2f7 100644 --- a/interface/web/mail/mail_mailinglist_edit.php +++ b/interface/web/mail/mail_mailinglist_edit.php @@ -194,6 +194,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 3f62dbdb03c6ce244af2f436bdd5073adb79a59d..aaa8d640e8ae69e28aa426665e6aca7d563fa8e0 100644 --- a/interface/web/mail/xmpp_domain_edit.php +++ b/interface/web/mail/xmpp_domain_edit.php @@ -402,7 +402,7 @@ class page_action extends tform_actions { // $this->desyncMailusers($this->dataRecord['domain']); // Update DNS Records // TODO: Update gets only triggered from main form. WHY? - $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND `origin` = ?", $this->dataRecord['domain'].'.'); + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, 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/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/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/lib/lang/de.lng b/interface/web/monitor/lib/lang/de.lng index 6a342be1ea40aca529d0cceafe2f3c90c0532178..ec5b6382120b9cd399354cefd997f7e5ded29357 100644 --- a/interface/web/monitor/lib/lang/de.lng +++ b/interface/web/monitor/lib/lang/de.lng @@ -155,6 +155,10 @@ $wb['no_permissions_to_view_monit_txt'] = 'Sie haben nicht die Berechtigung, auf $wb['Show Munin'] = 'Munin anzeigen'; $wb['no_munin_url_defined_txt'] = 'Keine Munin-URL definiert.'; $wb['no_permissions_to_view_munin_txt'] = 'Sie haben nicht die Berechtigung, auf Munin zuzugreifen.'; +$wb['Show Nagios/Check_MK'] = 'Nagios/Check_MK anzeigen'; +$wb['no_nagios_url_defined_txt'] = 'Keine Nagios-URL definiert.'; +$wb['no_permissions_to_view_nagios_txt'] = 'Sie haben nicht die Berechtigung, auf Nagios bzw. Check_MK zuzugreifen.'; +$wb['go_to_nagios_txt'] = 'Diese Anzeige in einem eigenen Fenster öffnen'; $wb['no_data_database_size_txt'] = 'Derzeit stehen keine Daten über die Speicherverbrauch der Datenbanken zur Verfügung. Bitte später erneut Ãrüfen..'; $wb['monitor_database_name_txt'] = 'Database'; $wb['monitor_database_size_txt'] = 'Size'; diff --git a/interface/web/monitor/lib/lang/en.lng b/interface/web/monitor/lib/lang/en.lng index aa6472e580038b537920d750a8db1cb3285de5f8..c76caefbcee886137ae61790f0010686c11d8183 100644 --- a/interface/web/monitor/lib/lang/en.lng +++ b/interface/web/monitor/lib/lang/en.lng @@ -160,4 +160,8 @@ $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['Show Nagios/Check_MK'] = 'Show Nagios'; +$wb['no_nagios_url_defined_txt'] = 'No Nagios URL defined.'; +$wb['no_permissions_to_view_nagios_txt'] = 'You are not allowed to access Nagios/Check_MK.'; +$wb['go_to_nagios_txt'] = 'Open a new window containing this view'; ?> 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_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/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 ef6ceeaada73809b19dc0cd17f8b78847c1dbef4..e9b9c0cd48500cd420a654e344908d4d931227dc 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'] = '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/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_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 82cf226a374ce4858f6f251ac227bd53aad7f085..fd4d55656a2afa4afd6f9268a8c1c83354bd1649 100644 --- a/interface/web/sites/web_vhost_domain_edit.php +++ b/interface/web/sites/web_vhost_domain_edit.php @@ -1469,7 +1469,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); @@ -1480,17 +1480,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/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 fff212d089d90a634cc28876de6411c54a5ee922..9afe89cec8f297007afd0672c9b42b5c77bedb1c 100644 --- a/server/conf/apache_ispconfig.conf.master +++ b/server/conf/apache_ispconfig.conf.master @@ -1,119 +1,132 @@ +################################################ +# 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 - + @@ -122,9 +135,9 @@ 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 @@ -133,8 +146,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..29badac7ac413bbd97ea203aad1613d36154cb68 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 0 {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 0399cf9f1d3e4081d2819a4498db691798a91d19..d5c6b7b79c64898c32bf7595852b0637d393f521 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; - } - - @@ -288,15 +303,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 e161a9f4999bf97b404ba42ada39d83c6b72559d..ff6a74b22b4f23c0c33d9e859e627c9e73bfad97 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"]; # 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..7580e190dc8c3bad9b185f3fc918dc4cfdb4b5ec 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"]; # Send a copy of email to diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index d5052d8d567fbadf4ae1adc09b35265f79f65409..385f06f5fe923e98e39ad2e1ef0512d68e347de9 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -51,8 +51,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 +71,9 @@ SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off - + # Clear PHP settings of this website @@ -339,12 +339,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 +373,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 +387,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 +464,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,19 +497,9 @@ RewriteCond %{REQUEST_URI} !^/php5-fcgi/ RewriteCond %{REQUEST_URI} !^ - - RewriteRule ^/(.*)$ $1 + RewriteRule /(.*) $1 - - - - RewriteCond %{HTTPS} off - RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ - - RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] - - # add support for apache mpm_itk @@ -484,36 +507,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/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 5270a5ae9ed0b6d035a6b3aecc2155b36e65c7ca..9b601d90b341d5f7722da5468a55e74d1961da24 100644 --- a/server/lib/classes/aps_installer.inc.php +++ b/server/lib/classes/aps_installer.inc.php @@ -306,7 +306,7 @@ class ApsInstaller extends ApsBase $db_id = parent::getXPathValue($sxe, '//db:id'); if(empty($db_id)) return; // No database needed - $mysqlver_res = $app->db->queryOneRecord('SELECT VERSION() as ver;'); + $mysqlver_res = $app->db->queryOneRecord('SELECT VERSION() as ver'); $mysqlver = $mysqlver_res['ver']; $tmp = $app->db->queryOneRecord("SELECT value FROM aps_instances_settings WHERE name = 'main_database_password' AND instance_id = ?", $task['instance_id']); 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.d/550-bind_dnssec.inc.php b/server/lib/classes/cron.d/550-bind_dnssec.inc.php index ed831ea9100e09b1f47891e8961bcc5d11222285..7f917b64e0786b0b17c98dd7d5eb6756aafebe45 100644 --- a/server/lib/classes/cron.d/550-bind_dnssec.inc.php +++ b/server/lib/classes/cron.d/550-bind_dnssec.inc.php @@ -82,18 +82,13 @@ class cronjob_bind_dnssec extends cronjob { //* Load libraries $app->uses("getconf,tpl"); - - //* load the server configuration options - $dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns'); //TODO : change this when distribution information has been integrated into server record $filespre = (file_exists('/etc/gentoo-release')) ? 'pri/' : 'pri.'; - $soas = $app->db->queryAllRecords("SELECT id,serial,origin FROM dns_soa WHERE server_id = ? AND active= 'Y' AND dnssec_wanted = 'Y' AND dnssec_initialized = 'Y' AND (dnssec_last_signed < ? OR dnssec_last_signed > ?)", $conf['server_id'], time()-(3600*24*5)+900, time()+900); //Resign zones every 5 days (expiry is 16 days so we have enough safety, 15 minutes tolerance) + $soas = $app->db->queryAllRecords("SELECT id,serial,origin FROM dns_soa WHERE active= 'Y' AND dnssec_wanted = 'Y' AND dnssec_initialized = 'Y' AND (dnssec_last_signed < ? OR dnssec_last_signed > ?)", time()-(3600*24*5)+900, time()+900); //Resign zones every 5 days (expiry is 16 days so we have enough safety, 15 minutes tolerance) foreach ($soas as $data) { $domain = substr($data['origin'], 0, strlen($data['origin'])-1); - if (!file_exists($dns_config['bind_zonefiles_dir'].'/'.$filespre.$domain)) continue; - $app->log('DNSSEC Auto-Resign: Touching zone '.$domain, LOGLEVEL_DEBUG); $app->db->datalogUpdate('dns_soa', array("serial" => $this->increase_serial($data['serial'])), 'id', $data['id']); } diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index ec89ba79e10ce63d56e459d6e93fed99188de951..1825c52240469df28d3e75a97d9a6775af2004bd 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -64,7 +64,7 @@ class db extends mysqli */ // 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 extends mysqli $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 extends mysqli $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 3ff25c01e16b6911aa7d44872867544d6e00682f..3a83815a830f030099d7a8b100facf214e836626 100644 --- a/server/lib/classes/monitor_tools.inc.php +++ b/server/lib/classes/monitor_tools.inc.php @@ -206,7 +206,7 @@ class monitor_tools { } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) { $distname = 'Debian'; $distver = 'Testing'; - $distid = 'debian60'; + $distid = 'debian90'; $distconfid = 'debiantesting'; $distbaseid = 'debian'; } else { @@ -217,6 +217,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')) { @@ -275,12 +290,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')) { $distname = 'CentOS'; - $distver = 'Unknown'; + $distver = '6'; $distid = 'centos53'; $distbaseid = 'fedora'; } elseif(stristr($content, 'CentOS Linux release 7')) { @@ -460,6 +475,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')) { @@ -472,6 +489,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') { @@ -483,6 +502,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') { @@ -494,6 +515,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') { @@ -505,6 +528,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') { @@ -516,6 +541,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') { @@ -527,6 +554,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') { @@ -538,6 +567,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') { @@ -549,6 +580,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') { @@ -563,6 +596,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 3478e0f34159c813863a1d7bd3dc21f452a0f66b..56827513bd0bb36c6efee8c9402220cd6fc1fe78 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); @@ -726,7 +726,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 @@ -1166,6 +1166,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. @@ -1182,7 +1183,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; @@ -1204,6 +1205,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(); @@ -1269,7 +1271,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) @@ -1277,23 +1279,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); @@ -1360,22 +1362,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') { @@ -1414,6 +1412,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']) != ''){ @@ -1556,6 +1555,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']; @@ -1787,33 +1787,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); @@ -1957,12 +1933,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) @@ -2217,6 +2193,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(); @@ -2750,76 +2727,49 @@ 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 .= " AuthName \"" . $fn . "\"\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 .= "Alias /webdav/$fn $webdavRoot/$fn\n"; + $output .= "\n"; + $output .= "Dav On\n"; + $output .= "BrowserMatch MSIE AuthDigestEnableQueryStringHack=On\n"; + $output .= "AuthType Digest\n"; + $output .= "AuthName \"$fn\"\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 @@ -3000,6 +2950,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)); $apache_modules = $app->system->getapachemodules(); @@ -3273,37 +3224,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/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 933010478f91845fc7d975186ed35255be14b955..b41aea384f8e6229f3a612f41e9c9a33a0b064e4 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1243,7 +1243,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 640d7a962b8557f529e6703efcd2d2b39d42104a..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')) { + if(file_exists('/etc/debian_version') || file_exists('/etc/devuan_version')) { exec("aptitude update"); exec("aptitude safe-upgrade -y"); - $app->log('Execeuted Debian / Ubuntu update', LOGLEVEL_DEBUG); + $app->log('Execeuted Debian / Devuan / Ubuntu update', LOGLEVEL_DEBUG); } //** Gentoo Linux